Для L oop Оптимизация скорости VBA - PullRequest
0 голосов
/ 04 августа 2020

У меня есть этот небольшой код, который в основном делает oop через таблицу, go имя по имени, фильтрует данные по этому c имени и подсчитывает, сколько раз человек достиг цели. Но имен мало (104) и на это уходит много времени. Я хотел бы знать, есть ли способ ускорить этот процесс.

Вот код:

lastrow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

 
For i = 2 To Worksheets("Sheet1").UsedRange.Columns.Count Step 2
On Error Resume Next
 Worksheets("Data").ShowAllData
 
 Worksheets("Sheet1").Activate
    For x = 4 To lastrow
    Worksheets("Data").ShowAllData
       name = Worksheets("Sheet1").Cells(x, 1)
       month = Worksheets("Sheet1").Cells(3, i)
        Worksheets("Data").Activate
        Range("AD1").AutoFilter Field:=30, Criteria1:=month
       Range("B1").AutoFilter Field:=2, Criteria1:=name
       
        countrows = Worksheets("Data").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
       If (countrows <= 1) Then GoTo Nextx
       
       
       datalast = Worksheets("Data").Cells(Rows.Count, 1).End(xlUp).Offset(2).Row
      
       Set rn = Range("Z2")
       Set rn = Range(rn, rn.End(xlDown)).SpecialCells(xlCellTypeVisible)
       For Each cell In rn
           If cell.Value > 0.9 Then ppercount = ppercount + 1
            Next cell
       
            
       
       Worksheets("Data").ShowAllData
       Worksheets("Sheet1").Cells(x, i).Value = ppercount
       Worksheets("Sheet1").Activate
       ppercount = 0
Nextx:
    Next x
    
Nexti:
    Next i



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