Изменение:
r.Copy w2.Cells(K, 1)
Кому:
r.EntireRow.Copy w2.Cells(K, 1)
Весь код без Activate
листа w1
:
With w1
For Each r In Intersect(.Range("D5:D1048576"), .UsedRange)
v = r.Value
If InStr(v, ModelSelection.Value) > 0 Then
r.EntireRow.Copy w2.Cells(K, 1)
K = K + 1
End If
Next r
End With
Примечание : более быстрый способ - не Копировать >> Вставить столько раз, но использовать объект CopyRng
, который сохранит все объединенные r
, где критерий удовлетворен, а затем в конце просто скопируйте >> вставьте один раз (также не нужно заранее K
).
Измененный код
Dim CopyRng As Range
With w1
For Each r In Intersect(.Range("D5:D1048576"), .UsedRange)
v = r.Value
If InStr(v, ModelSelection.Value) > 0 Then
If Not CopyRng Is Nothing Then
Set CopyRng = Application.Union(r, CopyRng)
Else
Set CopyRng = r
End If
End If
Next r
End With
' Copy >> Paste only once of the entire range
If Not CopyRng Is Nothing Then CopyRng.EntireRow.Copy w2.Cells(1, 1)