Вот точный исправленный код, который вы ищете, а затем немного улучшенный общий подход, который может дать вам некоторые идеи. Учитывая, что вы не знакомы со свойством Row
, вы проделали отличную работу для того, кто не знаком с VBA. Так держать ... отличный первый пост.
Sub find()
Dim lastRow As Integer
Dim rng As Range
lastRow = Sheets("Sheet2").Range("A65000").End(xlUp).Row
For i = 1 To lastRow
Set rng = Sheets("Sheet1").Range("A:L").find(Sheets("Sheet2").Cells(i, 1))
If Not rng Is Nothing Then
Sheets("Sheet2").Cells(i, 1).Cells.Interior.Color = vbGreen
Sheets("Sheet2").Cells(i, 2).Value = Sheets("Sheet1").Cells(rng.Row, 2).Value
End If
Next
End Sub
Несколько идей для рассмотрения:
Sub alternateWays()
Dim lastRow As Integer, i As Long, aCell As Range
Dim rng As Range, ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("sheet2")
Set aCell = ws2.Range("A1")
Do While Not IsEmpty(aCell)
Set rng = ws1.Range("A:L").find(aCell.Value)
If Not rng Is Nothing Then
aCell.Cells.Interior.Color = vbGreen
aCell.Offset(, 1).Value = ws1.Cells(rng.Row, 2).Value
End If
Set aCell = aCell.Offset(1, 0) 'don't forget this....
Loop
End Sub