Есть пара проблем с вашим кодом.Во-первых, чтобы помочь вам узнать, как вы можете решить эту проблему ... Во-первых, вы захотите добавить несколько точек останова и настроить несколько часов.Но вы увидите, что ваши циклы вначале настроены безупречно, но не адаптируются должным образом при добавлении данных.
Практически ваш оператор цикла продолжает циклически повторяться до тех пор, пока вы не нажмете lastrowtwo
, который сначала будет установлен длязначение 3 (на основе вашего примера выше).Вместо этого ваш код должен добавлять +1
каждый раз, когда вы находите истинный результат в переменной lastrowtwo
.Я изменил ваш код ниже, чтобы преодолеть эту проблему.
Другая проблема заключается в том, что вы копируете все из одной ячейки в другую, а затем перемещаете ее вниз.Делая это, вы будете сравнивать следующее (что снова будет совпадением).Через некоторое время вы увидите, что это будет сканировать только первую позицию.Чтобы преодолеть это, вы можете просто пропустить следующую строку в проверке цикла.Вы можете сделать это, добавив +1
к переменной j
.См. Ниже для модификаций.
Sub oneMacro()
Dim lastrowone, lastrowtwo As Long
lastrowone = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
lastrowtwo = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastrowone
For j = 2 To lastrowtwo
If Sheets("Sheet1").Cells(i, 1).Value = Sheets("Sheet2").Cells(j, 1).Value Then
Sheets("Sheet1").Cells(i, 1).EntireRow.Copy
Sheets("Sheet2").Cells(j, 1).Offset(1).Insert Shift:=xlDown
j = j + 1 ' Modified = this must be added to overcome an issue with DOUBLE checking the newly inserted data
lastrowtwo = lastrowtwo + 1 ' Modified = This is added to overcome an issue with not completing all rows
End If
Next j
Next i
End Sub