Я запускаю этот код vba в Excel, он копирует столбцы из листа 1, вставляет его в лист два. Затем он сравнивает его с столбцом на листе 2 перед удалением любых дубликатов.Выполнение кода VBA-Excel более эффективно
Private Sub CommandButton1_Click()
Dim MasterList As New Dictionary
Dim iListCount As Integer
Dim x As Variant
Dim iCtr As Integer
Dim v As Variant
Dim counter As Integer, i As Integer
counter = 0
Sheets("Sheet2").Select
Sheets("Sheet2").Range("M:M").Select
Selection.ClearContents
Sheets("Sheet1").Select
Sheets("Sheet1").Range("C:C").Select
Selection.Copy
Sheets("Sheet2").Select
Sheets("Sheet2").Range("M1").Select
ActiveSheet.Paste
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' Get count of records in master list
iListCount = Sheets("sheet2").Cells(Rows.Count, "A").End(xlUp).Row
'Load Dictionary:
For iCtr = 1 To iListCount
v = Sheets("sheet2").Cells(iCtr, "A").value
If Not MasterList.Exists(v) Then MasterList.Add v, ""
Next iCtr
'Get count of records in list to be deleted
iListCount = Sheets("sheet2").Cells(Rows.Count, "M").End(xlUp).Row
'Loop through the "delete" list.
For iCtr = iListCount To 1 Step -1
If MasterList.Exists(Sheets("Sheet2").Cells(iCtr, "M").value) Then
Sheets("Sheet2").Cells(iCtr, "M").Delete shift:=xlUp
End If
Next iCtr
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Done!"
End Sub
Существует только под 30000 строк, что он должен сравнить, так что я знаю, что она всегда собирается занять некоторое время, но мне было интересно, есть ли какой-либо способ ускорить его или даже просто сделать свой код более оптимизированы и эффективны.
возможно дубликат [Оптимизация кода, чтобы минимизировать время выполнения макроса] (http://stackoverflow.com/questions/20716733/optimize-code-to-minimize-runtime-of-the-macro) – andrescpacheco
Это должен быть на 'codereview.stackexchange.com' – puzzlepiece87