Мой ответ будет лучше выглядеть как комментарий, но он слишком длинный, чтобы уместиться в комментарии (и не может быть правильно отформатирован).
Как зациклить диапазон
Я советую вам взглянуть на страницу Чипа Пирсона , посвященную оптимизации VBA, особенно циклически изменяя диапазон в VBA.
Когда вы перебираете диапазон, вы должны использовать оператор for each
, как описано в этом примере:
Dim WS as Worksheet
For Each WS In Worksheets
MsgBox WS.Name
Next WS
Dim i as Integer
For i = 1 To Worksheets.Count
MsgBox Worksheets(i).Name
Next i
Поиск последней пустой ячейки
Ваш код пытается найти последнюю пустую ячейку. Вы можете сделать это легко с
With ActiveWorkbook.Worksheets("Sheet1")
.Cells(.Rows.Count,1).End(xlUp)
End With
Вы можете найти еще несколько советов по ozgrid (даже если они не используют rows.count
)
Избегание выбора
Ваш код будет очень очень медленным , если вы попытаетесь Select
каждой ячейке в цикле.
Вам лучше использовать объектную модель VBA.
Например, если вы хотите скопировать значение ячейки:
Не делай
Range("A1").Select
Selection.Copy
Range("A2").Select
Selection.Paste
У
Range("A2").Value = Range("A1").Value