Прошу прощения, если уже существует аналогичный вопрос, но если да, я не нашел.Excel VBA Optimize Cycle
Я новичок в программировании в VBA и до сих пор не знаю многого, теперь я пытаюсь запустить функцию, которая проверяет, повторяются ли в столбце «B» ведомости, и если существует, будет проверяться столбец «C», где самое высокое значение, копирование нижней таблицы в другую и ее удаление.
Код уже делает все это, однако необходимо запустить в таблицах с 65 000 строк, и для запуска этих таблиц требуется много времени, так как даже при работе в таблицах с 5000 или 10000 строк занимает примерно 6 15 минут.
Мой вопрос в том, есть ли какой-либо способ оптимизировать цикл, который я использую, лучше использовать для каждого или поддерживать Do While Loop?
Вот код, я использую:
Function Copy()
Worksheets("Sheet1").Range("A1:AQ1").Copy _
Destination:=Worksheets("Sheet2").Range("A1")
Dim lRow As Long
Dim lRow2 As Long
Dim Row As Long
Dim countA As Long
Dim countB As Long
Dim t As Double
lRow = 5000
Row = 2
countA = 0
countB = 0
Application.ScreenUpdating = False
ViewMode = ActiveWindow.View
ActiveWindow.View = xlNormalView
Application.EnableEvents = False
Application.DisplayStatusBar = False
ActiveSheet.DisplayPageBreaks = False
lRow2 = lRow - 1
t = Timer
Do While lRow > 2
If (Cells.Item(lRow, "B") <> Cells.Item(lRow2, "B")) Then
lRow = lRow - 1
lRow2 = lRow - 1
Else
If (Cells.Item(lRow, "C") > Cells.Item(lRow2, "C")) Then
Sheets("Sheet1").Rows(lRow2).Copy Sheets("Sheet2").Rows(Row)
Rows(lRow2).Delete
lRow = lRow - 1
Row = Row + 1
countA = countA + 1
Else
Sheets("Sheet1").Rows(lRow).Copy Sheets("Sheet2").Rows(Row)
Rows(lRow).Delete
lRow = lRow - 1
Row = Row + 1
countB = countB + 1
End If
lRow2 = lRow2 - 1
End If
Loop
Application.DisplayStatusBar = True
ActiveWindow.View = ViewMode
Application.ScreenUpdating = False
MsgBox "A = " & countA & " B = " & countB & "Time (minutes): " & (Timer - t)/60
End Function
Являются ли таблицы максимум 65 000 строк или могут быть больше 65 536 строк? – Jeeped
Следует отметить, что описанная выше процедура была разработана для работы с отсортированными данными. – Jeeped
Таблицы могут быть больше 65 536 строк. – OutOfMemory