Реализует пару изменений и закрепит общее согласие из комментариев:
'"As Integer" will get silently converted to "As Long" so just start with Long to save processing power
Dim i As Long, j as long, z as long
Dim ws1 as Worksheet, ws2 as Worksheet, ws3 as Worksheet
'setting sheets to just be cleaner and easier to write
set ws1 = Sheets(1) 'using the index, but could be Sheets("sheet1"), etc.
set ws2 = sheets(2)
set ws3 = sheets(3)
j = 1 'need this or you'll default to j=0 which doesn't work for a range in excel
For i = 2 To 3318
For z = 8 To 731
If ws1.Cells(i, 1).Value = ws2.Cells(z, 8).Value Then
ws1.Rows(i).Copy Destination:=ws3.Rows(j)
j = j + 1
End If
Next z
Next i
Обратите внимание, что Range("A1")
и Cells(1,1)
- это синтаксически разные способы сказать одно и то же. Будьте осторожны, чтобы не поменять их местами.
Если вы используете переменную, вы не используете кавычки, например, переменная j
повторяется на новом листе, и вы не написали бы Range("j:j") as that will be the whole column 'J
на листе (дастрочные буквы для этого технически не важны).