У меня возникли проблемы с моим кодом, который в основном соответствует номерам ссылок из двух книг и записывает соответствующую информацию на новый рабочий лист. Прежде всего, позвольте мне подробно рассказать о размерах. Одна из книг имеет 1987 строк и 66 столбцов, а другая - 15645 строк и 13 столбцов. Новый лист после кода имеет 5643 строки и 41 столбец. В среднем код работает в течение 2 минут и 10 секунд, что слишком велико в моем случае. Я пробовал несколько вещей, чтобы ускорить мой код, однако это не сработало. Большое спасибо за любую помощь!Ускорение кода VBA
Sub take_swap_values()
With Application
.ScreenUpdating = False
.DisplayStatusBar = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Dim h, f As Long
Dim r As Integer
h = Application.WorksheetFunction.Count(Workbooks("swap.xlsx").Sheets("Sheet3").Range("$B$2:$B$1987"))
f = Application.WorksheetFunction.Count(Workbooks("swp_fwd.xlsm").Sheets("Sheet1").Range("$A$2:$A$5645"))
Workbooks("swap.xlsx").Activate
Workbooks("swp_fwd.xlsm").Activate
Workbooks("swp_fwd.xlsm").Sheets("Sheet2").Cells(1, 1).Value = Workbooks("swp_fwd.xlsm").Sheets("Sheet1").Cells(1, 1).Value
For i = 1 To h
For j = 1 To f
If Workbooks("swap.xlsx").Sheets("Sheet3").Cells(i, 2).Value = Workbooks("swp_fwd.xlsm").Sheets("Sheet1").Cells(j, 1).Value Then
For k = 1 To 40
Workbooks("swp_fwd.xlsm").Sheets("Sheet2").Cells(j, k).Value = Workbooks("swap.xlsx").Sheets("Sheet3").Cells(i, k)
Next k
End If
Next j
Next i
With Application
.ScreenUpdating = True
.DisplayStatusBar = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub
Технически, если вы ищете советы по улучшению рабочего кода, а не исправления ошибки, вы должны отправить код в [codereview.se], а не здесь; однако у вас есть три вложенных цикла, повторяющихся на больших диапазонах; маловероятно, что подход будет быстрым. – Dave
Возможно, вы могли бы опубликовать то, что вы сделали, чтобы ускорить этот код, и это значительно улучшит качество этого вопроса. –
Похоже, вы можете переписать это с помощью инструкции SQL. Это должно быть довольно быстро. –