Вот несколько указателей, которые ускорят ваш код:
Dim
все переменные
Dim i As long
Dim eR As variant
В начале вашей процедуры установите для расчета значение Вручную, отключите функцию обновления экрана и события.
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Включите их снова в конце
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = true
Не Select
диапазоны, которые вы хотите обработать. Установите переменную и действуйте в соответствии с этим. Пример:
Dim rng as Range
Set rng = Range(sSecCol + LTrim(Str(i)) + ":" + sLastCol + LTrim(Str(i)))
rng.Copy
Не действуйте на листе по одной строке за раз, действуйте на непрерывном расстоянии. В этом случае это потребует более сложных вычислений для обработки строк между исключенными строками, но это будет иметь чистую выгоду.
Есть много способов «переместить» данные, некоторые, вероятно, быстрее, чем Копировать, Вставить, Очистить. Но как только вы примените подсказки выше, вы можете обнаружить, что процедура выполняется достаточно быстро. Если нет, напишите снова.