Макрос для распределения данных внутри листов по названию вкладок - PullRequest
0 голосов
/ 02 января 2019

Я написал макрос, который работает, но, учитывая большой объем данных, это занимает много времени. Интересно, есть ли способ ускорить его? Вот краткое изложение того, что он делает:

  1. На вкладке «Сводка (все)» у меня есть глобальный лист со всеми данными.
  2. У меня есть несколько вкладок, соответствующих каждому месяцу.
  3. Я хочу, чтобы данные распределялись по этим вкладкам на основе значения в одном столбце (должно совпадать с именем вкладки).

    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 строк. Не могли бы вы дать мне знать, что будет лучшим способом сделать это быстрее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...