Я написал макрос, который работает, но, учитывая большой объем данных, это занимает много времени. Интересно, есть ли способ ускорить его? Вот краткое изложение того, что он делает:
- На вкладке «Сводка (все)» у меня есть глобальный лист со всеми данными.
- У меня есть несколько вкладок, соответствующих каждому месяцу.
Я хочу, чтобы данные распределялись по этим вкладкам на основе значения в одном столбце (должно совпадать с именем вкладки).
Option Explicit
Sub CopyDataOutToSheets()
Dim sh As Worksheet
Dim SourceSh As Worksheet
Dim Last As Long
Dim shLast As Long
Dim CopyRng As Range
Dim StartRow As Long
Dim lrow As Long
Dim r As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set SourceSh = ActiveWorkbook.Worksheets("Summary (All)")
Application.DisplayAlerts = False
On Error Resume Next
On Error GoTo 0
For Each sh In ActiveWorkbook.Worksheets
If IsError(Application.Match(sh.Name, _
Array(SourceSh.Name, "List Data", "Lists", "Summary (Filtered)"), 0)) Then
lrow = lastRow(sh)
If lrow > 6 Then
sh.Rows("7:" & lrow).Delete
End If
If lastRow(SourceSh) < 7 Then
MsgBox ("Nothing to move")
Exit Sub
End If
For r = lastRow(SourceSh) To 7 Step -1
'Finding the first empty row in column A on destination worksheet
If SourceSh.Range("N" & r).Value = sh.Name Then
SourceSh.Rows(r).Copy Destination:=sh.Range("A" & lastRow(sh) + 1)
End If
Next r
End If
Next
ExitTheSub:
Application.Goto SourceSh.Cells(1)
Application.DisplayAlerts = True
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
На глобальной вкладке несколько тысяч строк, поэтому я ожидаю, что после распространения на каждой вкладке будет примерно 1000 строк. Не могли бы вы дать мне знать, что будет лучшим способом сделать это быстрее?