Процент изменения массива VBA - PullRequest
0 голосов
/ 16 февраля 2020

Хотя процентная разница работает, когда я запускаю ее построчно в режиме отладки, я испытываю ошибку времени выполнения 91 после вычисления 10 из возможных 44 отдельных листов. Прилагаются 2 снимка экрана для справки До & EndResult .

Я пытаюсь ускорить код и убедиться, что он работает без сбоев. Если я попытаюсь избавиться от функций активации и выбора, чтобы они работали быстрее, как я буду действовать дальше? Заранее спасибо за руководство. РЕДАКТИРОВАТЬ: диапазон не является динамическим c, так как каждый месяц будет автоматически вставляться новый столбец месяца с данными. Также я прикрепил этот код.

Sub PercentageCalc()

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.StatusBar = False

For i = 1 To Sheets.Count

pos = Sheets(i).Index
Sheets(pos).Activate
With ActiveSheet

If Len(Sheets(i).Name) < 5 Then


dcol = Cells(1, Columns.Count).End(xlToLeft).Column

    Columns(dcol).Select

    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

    Columns(dcol + 1).Select
    Selection.Copy

    Columns(dcol).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False


Cells.Find(What:="year", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
ActiveCell.Offset(2).Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-2]/RC[-12])-1,0)"
Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.End(xlDown))
ActiveCell.Offset(5).Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-2]/RC[-12])-1,0)"
Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.End(xlDown))


Cells.Find(What:="month", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
ActiveCell.Offset(2).Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-3]/RC[-4])-1,0)"
Selection.AutoFill Destination:=Range(ActiveCell, 
ActiveCell.End(xlDown))
ActiveCell.Offset(5).Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-3]/RC[-4])-1,0)"
Selection.AutoFill Destination:=Range(ActiveCell, 
ActiveCell.End(xlDown))

dcolvar = Cells(1, Columns.Count).End(xlToLeft).Column

    Cells.Find(What:="qtr", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate

If dcolvar Like "2" Or dcolvar Like "4" Or dcolvar Like "7" Or dcolvar Like "10" Then
    Cells.Find(What:="qtr", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
ActiveCell.Offset(2).Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-4]/RC[-5])-1,0)"
Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.End(xlDown))
ActiveCell.Offset(5).Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-4]/RC[-5])-1,0)"
Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.End(xlDown))

Else

If dcolvar Like "3" Or dcolvar Like "5" Or dcolvar Like "8" Or dcolvar Like "11" Then
Cells.Find(What:="qtr", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
ActiveCell.Offset(2).Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-4]/RC[-6])-1,0)"
Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.End(xlDown))
ActiveCell.Offset(5).Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-4]/RC[-6])-1,0)"
Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.End(xlDown))

Else

Cells.Find(What:="qtr", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
ActiveCell.Offset(2).Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-4]/RC[-7])-1,0)"
Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.End(xlDown))
ActiveCell.Offset(5).Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-4]/RC[-7])-1,0)"
Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.End(xlDown))

              End If            

           End If

      End If

End If

End With

Next i

Exit Sub

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
Application.StatusBar = True


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