Это должно быть довольно быстро.Надеюсь, я не слишком изменил ваш код, чтобы изменить то, чего у меня не должно быть.
Сбор всех данных в одном варианте делает это намного быстрее, поскольку VBA не слишком сильно взаимодействует с Excel.Использование специальных ячеек также делает это.Использование «like» очищает код, не знаю, лучше ли производительность для этого.
Dim rng As Range
Dim vData As Variant
Dim i As Long
Dim limitz As String
Set rng = Range("G2", Range("B1").End(xlDown).Offset(0, 5).Address)
'Delete empty cells
On Error Resume Next
rng.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
'Get all data in range
vData = rng.Resize(, 2)
For i = 1 To UBound(vData)
limitz = Left$(CStr(vData(i, 1)), 1)
If limitz Like "[!0-9,!-]" Then
vData(i, 1) = Right$(CStr(vData(i, 1)), Len(vData(i, 1)) - 1)
vData(i, 2) = limitz
End If
Next
rng.Resize(, 2) = vData
Следующий код не проверен, но должен работать и работать довольно быстро.Следует отметить, что удаление целых строк довольно затратно (по времени), хотя вы можете минимизировать время, используя метод, описанный ниже, это все равно займет некоторое время, и вы ничего не можете с этим поделать:*