Вместо того, чтобы использовать Select (см. Как не использовать select в Excel VBA ), объявите, с каким диапазоном или ячейкой вы работаете.
Что-то вроде ...
Dim myRange As Range
Dim LastRow as Long
Dim LastColumn As Long
With ThisWorkbook.Sheets("Sheet1")
LastRow = .Cells(.Rows.Count, 38).End(xlUp).Row
LastColumn = .Cells(7, .Columns.Count).End(xlToLeft).Column
Set myRange = .Range("AL7", .Cells(LastRow,LastColumn))
End with
Dim myCell as Variant
For Each myCell In myRange
If myCell.Text = "#N/A" Then
myCell.Value = myCell.Offset(-1, 0).Value
End If
Next
End Sub
Конечно, myRange
этого набора довольно динамично, если проверяемые столбцы всегда одинаковы, вы можете установить диапазон следующим образом:
With ThisWorkbook.Sheets("Sheet1")
LastRow = .Cells(.Rows.Count, 38).End(xlUp).Row
Set myRange = .Range("AL7:AS" & LastRow)
End With