Я пытаюсь создать один список операций и частей для переноса структуры продукта из одной системы в другую.
. Я дошел до того, что отсортировал и скопировал операции, относящиеся к конкретномупродукт с использованием этого кода VBA, но теперь я не совсем уверен, как выбрать и отсортировать детали для каждой операции плавным и удобным для процесса способом.
Я имею в виду, я могу зациклить все строки ипоиск построчно, но должен быть более простой способ?
Элемент без «МОТОЦИКЛА» на изображениях на самом деле является серией чисел, но в этом примере я набрал его как имя, чтобы показатьжелаемый вывод легче просматривать.
Обратите внимание, что приведенный ниже код некорректно работает с изображениями из-за номеров ячеек и т. д.
Sub SpecialCopy()
Dim targetSh As Worksheet
Set targetSh = ThisWorkbook.Worksheets("Import_Rows_PY")
Dim i As Long
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(i, 1).Value = "motorcycle" Then
Range(Cells(i, 15), Cells(i, 1)).Copy Destination:=targetSh.Range("A" & targetSh.Cells(Rows.Count, "A").End(xlUp).Row + 1)
End If
Next i
End Sub
Существующая структура и предпочтительный вывод:
Во вкладке «Operation_rows_MO» у меня есть список всех операций, для ВСЕХ продуктов.На вкладке "Part_rows_MO" у меня есть список всех частей для ВСЕХ продуктов.
На вкладке "Import_rows_Py" у меня есть выход, который я ищу, где желтые столбцы являются важными "критериями";
- Перечислите все "номер продукта" с именем "мотоцикл" по
- наименьший "номер операции" в качестве первой строки
- со значением "новый pos" в качестве значения "10"
- , за которой следует любая другая часть, связанная с этой операцией, нет
- с "новым положением", равным +10 ("20")
- и, если несколько частей на одну операцию, сортируйте"Pos"
- с "новым pos" +10 ("40, 50, 60")
[Строки операций, 50000 строк] https://imgur.com/aLDxoP7
[Строки продукта, 70000 строк] https://imgur.com/WBDeAFr
[Ожидаемый результат после копирования / вставки и сортировки] https://imgur.com/D8rClAc
ОБНОВЛЕНИЕ:
Чтобы разбить этот шаг по шагам, я начну с вопроса:
- Как выбрать все строки на вкладке "Operation_Rows_MO", где "product_no" = "motorcycle" иположить их в массив?
- Как отсортировать строки в этом массиве по "Operation_no" и вставить их (одну за другой) за другой?
Новый подход:
Я выбираю ископируйте все строки в соответствии с вопросом 1 выше, используя код ниже.Есть ли способ отсортировать скопированные строки и сделать цикл между «вставкой», чтобы найти связанные строки продукта?
Option Explicit
Sub SpecialCopy()
Dim lastRow As Long, i As Long
Dim CopyRange As Range
'~~> Select sheet to copy rows from
With Sheets("OpRows_Mo")
lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> Set i to count from row 27 to last row (end of sheet)
For i = 27 To lastRow
'~~> If cell meets criteria, copy row (This will eventually be a loop
'~~> and not a static number as 16719
If (Range("A" & i).Value) = 16719 Then
If CopyRange Is Nothing Then
Set CopyRange = .Rows(i)
Else
Set CopyRange = Union(CopyRange, .Rows(i))
End If
End If
Next
'~~> // From this point I would like to:
'~~> Sort copied lines by Operation no
'~~> Paste first line
'~~> Copy any connected lines from "product_rows" tab
'~~> Sort and paste "Products"
'~~> Loop it to paste second operation line
'~~> // But for now I just do this:
If Not CopyRange Is Nothing Then
'~~> Go to other sheet and paste copied rows
CopyRange.Copy Sheets("ProdRows_PY").Rows(1)
End If
End With
End Sub