Вместо выполнения цикла For
по всему (!) Столбцу вы можете сначала проверить, есть ли что-то в столбце, а затем .Find
требуемое значение. Если вы нашли результат, вы можете использовать его номер строки.
Вместо копирования / вставки вы можете просто назначить Range.Value
для получения значений без форматирования.
Этот код копирует значения всей строки четырьмя строками ниже.
Sub Test()
Dim ws As Worksheet
Dim c As Range
Set ws = ActiveSheet
If WorksheetFunction.CountA(ws.Columns(2)) > 0 Then
Set c = ws.Columns(2).Find( _
What:="Total WI Expenses", _
After:=ws.Cells(1, 2), _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext)
If Not c Is Nothing Then
ws.Rows(c.Row + 4).Value = ws.Rows(c.Row).Value
End If
Set c = Nothing
End If
Set ws = Nothing
End Sub