Я думаю, это то, что вы ищете. Причина, по которой код работает медленно, заключается в том, что вы пытаетесь копировать, вставлять и удалять внутри цикла, что означает, что каждый цикл вызывает 3 случая действия. Этот метод выполняет действие вне цикла, что означает, что у вас есть только 3 экземпляра действия.
Еще лучше было бы просто отфильтровать столбец по пробелам, а затем скопировать / вставить / удалить ячейки, показанные фильтром. Но вы выбрали циклический подход, так что это был бы лучший способ завершить запрос циклом.
Option Explicit
Sub Blanks()
Dim ws4 As Worksheet: Set ws4 = ThisWorkbook.Sheets("Sheet4")
Dim ws8 As Worksheet: Set ws8 = ThisWorkbook.Sheets("Sheet8")
Dim LRow As Long, MyCell As Range, MyRange As Range, MyUnion As Range
LRow = ws4.Range("BN" & ws4.Rows.Count).End(xlUp).Row
Set MyRange = ws4.Range("BN2:BN" & LRow)
For Each MyCell In MyRange
If MyCell = "" Then
If Not MyUnion Is Nothing Then
Set MyUnion = Union(MyUnion, MyCell)
Else
Set MyUnion = MyCell
End If
End If
Next MyCell
If Not MyUnion Is Nothing Then
MyUnion.EntireRow.Copy
ws8.Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
MyUnion.EntireRow.Delete
End If
End Sub