Копирование / вставка строк из двух разных листов с довольно «сложной» сортировкой - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь создать один список операций и частей для переноса структуры продукта из одной системы в другую.

. Я дошел до того, что отсортировал и скопировал операции, относящиеся к конкретномупродукт с использованием этого кода 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" у меня есть выход, который я ищу, где желтые столбцы являются важными "критериями";

  1. Перечислите все "номер продукта" с именем "мотоцикл" по
  2. наименьший "номер операции" в качестве первой строки
  3. со значением "новый pos" в качестве значения "10"
  4. , за которой следует любая другая часть, связанная с этой операцией, нет
  5. с "новым положением", равным +10 ("20")
  6. и, если несколько частей на одну операцию, сортируйте"Pos"
  7. с "новым pos" +10 ("40, 50, 60")

[Строки операций, 50000 строк] https://imgur.com/aLDxoP7

[Строки продукта, 70000 строк] https://imgur.com/WBDeAFr

[Ожидаемый результат после копирования / вставки и сортировки] https://imgur.com/D8rClAc

ОБНОВЛЕНИЕ:

Чтобы разбить этот шаг по шагам, я начну с вопроса:

  1. Как выбрать все строки на вкладке "Operation_Rows_MO", где "product_no" = "motorcycle" иположить их в массив?
  2. Как отсортировать строки в этом массиве по "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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...