Исправляющий код
endRow
должен быть объявлен как long, потому что .Rows.Count
превышает ограничение для Integer
.
33 - номер столбца или столбец AG
. Ваш код ищет CATS в столбце AG
, начиная со строки 1 до последней строки с данными, и при обнаружении присваивает найденный номер строки lastRowSearchValue
, что неверно, поскольку lastRowSearchValue
- это диапазон. Правильным будет Set lastRowSearchValue = .Cells(i, 33)
, чтобы можно было продолжить с lastRowSearchValue.Copy
. Он продолжит поиск до конца, чтобы найти другие вхождения CATS. Чтобы остановить это, вы можете добавить строку Exit For
, чтобы выйти из цикла, когда CATS был найден. Но так как вы действительно хотите найти последнее вхождение, вы не хотите этого делать.
Я решил объявить lastRow как Long, чтобы получить последнюю встречающуюся строку, а затем скопировать эту строку на одну строку ниже. Чтобы сделать его менее запутанным, я использовал буквы столбца.
Код
Sub CopyRowBelowWhenFound()
Dim shortname As String
Dim endRow As Long
Dim lastRow As Long
Dim i As Integer
shortname = "CATS"
With ActiveSheet
endRow = .Cells(.Rows.Count, "AG").End(xlUp).Row
For i = 1 To endRow
If .Cells(i, "AG") = shortname Then
lastRow = i
End If
Next i
With .Cells(lastRow, "AG")
.EntireRow.Copy .Offset(1, 0).EntireRow
End With
End With
End Sub