Страницы: 1
RSS
Оптимизация макроса, Необходимо оптимизировать последовательно выполняемые действия
 
Уважаемые форумчане, прошу вашей помощи!

Есть макрос, работает, как простая последовательность действий. Ранее, когда исходный массив данных и область отображения были идентичны по структуре, то прописать все в одну строку труда не составляло. Но теперь в области отображения данные идут через колонку, а в исходном массиве остались в колонках подряд. Из-за этого в координатах появилось смещение на 1. Как это прописать в макросе с какой-то условной формулой "предыдущие координаты -1" не знаю.
Надеюсь на вашу помощь. Сам макрос ниже. В таком виде файл работает, но медленно. Заранее благодарю!
   
Код
Range("C4").FormulaR1C1 = "=LOOKUP(RC[48],RC[48])"
    Range("C4").AutoFill Destination:=Range("C4:C45"), Type:=xlFillDefault
    
    Range("E4").FormulaR1C1 = "=LOOKUP(RC[47],RC[47])"
    Range("E4").AutoFill Destination:=Range("E4:E45"), Type:=xlFillDefault
    
    Range("G4").FormulaR1C1 = "=LOOKUP(RC[46],RC[46])"
    Range("G4").AutoFill Destination:=Range("G4:G45"), Type:=xlFillDefault
    
    Range("I4").FormulaR1C1 = "=LOOKUP(RC[45],RC[45])"
    Range("I4").AutoFill Destination:=Range("I4:I45"), Type:=xlFillDefault
    
    Range("K4").FormulaR1C1 = "=LOOKUP(RC[44],RC[44])"
    Range("K4").AutoFill Destination:=Range("K4:K45"), Type:=xlFillDefault
    
    Range("M4").FormulaR1C1 = "=LOOKUP(RC[43],RC[43])"
    Range("M4").AutoFill Destination:=Range("M4:M45"), Type:=xlFillDefault
    
    Range("O4").FormulaR1C1 = "=LOOKUP(RC[42],RC[42])"
    Range("O4").AutoFill Destination:=Range("O4:O45"), Type:=xlFillDefault
    
    Range("Q4").FormulaR1C1 = "=LOOKUP(RC[41],RC[41])"
    Range("Q4").AutoFill Destination:=Range("Q4:Q45"), Type:=xlFillDefault
    
    Range("S4").FormulaR1C1 = "=LOOKUP(RC[40],RC[40])"
    Range("S4").AutoFill Destination:=Range("S4:S45"), Type:=xlFillDefault
    
    Range("U4").FormulaR1C1 = "=LOOKUP(RC[39],RC[39])"
    Range("U4").AutoFill Destination:=Range("U4:U45"), Type:=xlFillDefault
    
    Range("U4").FormulaR1C1 = "=LOOKUP(RC[39],RC[39])"
    Range("U4").AutoFill Destination:=Range("U4:U45"), Type:=xlFillDefault
   
    Range("Y4").FormulaR1C1 = "=LOOKUP(R[46]C[26],R[46]C[26])"
    Range("Y4").AutoFill Destination:=Range("Y4:Y45"), Type:=xlFillDefault
    
    Range("AA4").FormulaR1C1 = "=LOOKUP(R[46]C[25],R[46]C[25])"
    Range("AA4").AutoFill Destination:=Range("AA4:AA45"), Type:=xlFillDefault
    
    Range("AC4").FormulaR1C1 = "=LOOKUP(R[46]C[24],R[46]C[24])"
    Range("AC4").AutoFill Destination:=Range("AC4:AC45"), Type:=xlFillDefault
    
    Range("AE4").FormulaR1C1 = "=LOOKUP(R[46]C[23],R[46]C[23])"
    Range("AE4").AutoFill Destination:=Range("AE4:AE45"), Type:=xlFillDefault
    
    Range("AG4").FormulaR1C1 = "=LOOKUP(R[46]C[22],R[46]C[22])"
    Range("AG4").AutoFill Destination:=Range("AG4:AG45"), Type:=xlFillDefault
    
    Range("AI4").FormulaR1C1 = "=LOOKUP(R[46]C[21],R[46]C[21])"
    Range("AI4").AutoFill Destination:=Range("AI4:AI45"), Type:=xlFillDefault
    
    Range("AK4").FormulaR1C1 = "=LOOKUP(R[46]C[20],R[46]C[20])"
    Range("AK4").AutoFill Destination:=Range("AK4:AK45"), Type:=xlFillDefault
    
    Range("AM4").FormulaR1C1 = "=LOOKUP(R[46]C[19],R[46]C[19])"
    Range("AM4").AutoFill Destination:=Range("AM4:AM45"), Type:=xlFillDefault
    
    Range("AO4").FormulaR1C1 = "=LOOKUP(R[46]C[18],R[46]C[18])"
    Range("AO4").AutoFill Destination:=Range("AO4:AO45"), Type:=xlFillDefault
    
    Range("AQ4").FormulaR1C1 = "=LOOKUP(R[46]C[17],R[46]C[17])"
    Range("AQ4").AutoFill Destination:=Range("AQ4:AQ45"), Type:=xlFillDefault

    Range("F4").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(RC[46]/R[92]C[46],RC[46]/100)"
    Range("F4").Select
    Selection.Style = "Percent"
    Range("F4").Select
    Selection.AutoFill Destination:=Range("F4:F45"), Type:=xlFillDefault
    Range("F4:F45").Select
    Selection.NumberFormat = "0%"
    Range("F4:F45").Select
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    Range("H4").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(RC[45]/R[92]C[45],RC[45]/100)"
    Range("H4").Select
    Selection.Style = "Percent"
    Range("H4").Select
    Selection.AutoFill Destination:=Range("H4:H45"), Type:=xlFillDefault
    Range("H4:H45").Select
    Selection.NumberFormat = "0%"
    Range("H4:H45").Select
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    Range("J4").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(RC[44]/R[92]C[44],RC[44]/100)"
    Range("J4").Select
    Selection.Style = "Percent"
    Range("J4").Select
    Selection.AutoFill Destination:=Range("J4:J45"), Type:=xlFillDefault
    Range("J4:J45").Select
    Selection.NumberFormat = "0%"
    Range("J4:J45").Select
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    Range("L4").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(RC[43]/R[92]C[43],RC[43]/100)"
    Range("L4").Select
    Selection.Style = "Percent"
    Range("L4").Select
    Selection.AutoFill Destination:=Range("L4:L45"), Type:=xlFillDefault
    Range("L4:L45").Select
    Selection.NumberFormat = "0%"
    Range("L4:L45").Select
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    Range("N4").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(RC[42]/R[92]C[42],RC[42]/100)"
    Range("N4").Select
    Selection.Style = "Percent"
    Range("N4").Select
    Selection.AutoFill Destination:=Range("N4:N45"), Type:=xlFillDefault
    Range("N4:N45").Select
    Selection.NumberFormat = "0%"
    Range("N4:N45").Select
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    Range("P4").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(RC[41]/R[92]C[41],RC[41]/100)"
    Range("P4").Select
    Selection.Style = "Percent"
    Range("P4").Select
    Selection.AutoFill Destination:=Range("P4:P45"), Type:=xlFillDefault
    Range("P4:P45").Select
    Selection.NumberFormat = "0%"
    Range("P4:P45").Select
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    Range("R4").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(RC[40]/R[92]C[40],RC[40]/100)"
    Range("R4").Select
    Selection.Style = "Percent"
    Range("R4").Select
    Selection.AutoFill Destination:=Range("R4:R45"), Type:=xlFillDefault
    Range("R4:R45").Select
    Selection.NumberFormat = "0%"
    Range("R4:R45").Select
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    Range("T4").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(RC[39]/R[92]C[39],RC[39]/100)"
    Range("T4").Select
    Selection.Style = "Percent"
    Range("T4").Select
    Selection.AutoFill Destination:=Range("T4:T45"), Type:=xlFillDefault
    Range("T4:T45").Select
    Selection.NumberFormat = "0%"
    Range("T4:T45").Select
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    Range("V4").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(RC[38]/R[92]C[38],RC[38]/100)"
    Range("V4").Select
    Selection.Style = "Percent"
    Range("V4").Select
    Selection.AutoFill Destination:=Range("V4:V45"), Type:=xlFillDefault
    Range("V4:V45").Select
    Selection.NumberFormat = "0%"
    Range("V4:V45").Select
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
         
Изменено: Murlif - 07.10.2022 06:44:11
 
Murlif, здравствуйте
Вам нужен принципиально другой макрос - гораздо быстрее, короче и понятнее. А для макроса нужен файл-пример.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
Murlif, здравствуйте
Вам нужен принципиально другой макрос - гораздо быстрее, короче и понятнее. А для макроса нужен файл-пример.
Спасибо за ответ. Как выглядело раньше, прикрепил внизу. По СБ не могу скинуть файл, в нем не удастся зачистить отношение инфы. Из выхода вижу только искусственную интеграцию доп колонки в исходный массив(((
   
Код
    Range("C4,D4,E4,F4,G4,H4,I4,J4,K4,L4").FormulaR1C1 = "=LOOKUP(RC[41],RC[41])"
    Range("C4:L4").AutoFill Destination:=Range("C4:L45"), Type:=xlFillDefault
    
    Range("O4,P4,Q4,R4,S4,T4,U4,V4,W4,X4").FormulaR1C1 = "=LOOKUP(R[46]C[29],R[46]C[29])"
    Range("O4:X4").AutoFill Destination:=Range("O4:X45"), Type:=xlFillDefault
      
    Range("C4:L45").Select
    Selection.Value = Selection.Value
      
    With Range("C4:L45,O4:X45")
    .Borders.LineStyle = False
    End With
    
    With Range("C4:C45,D4:D45,E4:E45,F4:F45,G4:G45,H4:H45,I4:I45,J4:J45,K4:K45,L4:L45,O4:O45,P4:P45,Q4:Q45,R4:R45,S4:S45,T4:T45,U4:U45,V4:V45,W4:W45,X4:X45")
        .Borders.Weight = xlMedium
        .Borders(xlInsideVertical).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
    End With

    Range("B4").Select
End Sub
Изменено: Murlif - 07.10.2022 06:43:52
 
Murlif,  код следует оформлять соответствующим тегом. Для этого существует кнопка <...>. Исправьте свои сообщения.
 
Вам, конечно, задачка такой не кажется, но она выглядит, как "поди туда, не знаю куда".
Тем не менее такой вариант.
Код
    Dim xx As Long
    Dim hh As Long
    hh = [AR4].Column
    For xx = [C4].Column To [V4].Column Step 2
        Cells(4, xx).FormulaR1C1 = "=LOOKUP(RC" & hh & ",RC" & hh & ")"
        hh = hh + 1
    Next
    'Range("C4,D4,E4,F4,G4,H4,I4,J4,K4,L4").FormulaR1C1 = "=LOOKUP(RC[41],RC[41])"
    Range("C4:V4").AutoFill Destination:=Range("C4:V45"), Type:=xlFillDefault
   
'    Range("O4,P4,Q4,R4,S4,T4,U4,V4,W4,X4").FormulaR1C1 = "=LOOKUP(R[46]C[29],R[46]C[29])"
'    Range("O4:X4").AutoFill Destination:=Range("O4:X45"), Type:=xlFillDefault
     
    Range("C4:V45").Select
    Selection.Value = Selection.Value
     
    With Range("C4:L45,O4:X45")
        .Borders.LineStyle = False
    End With
   
    With Range("C4:V45")
        .Borders.Weight = xlMedium
'        .Borders(xlInsideVertical).LineStyle = xlNone
'        .Borders(xlInsideHorizontal).LineStyle = xlNone
    End With

    Range("B4").Select
End Sub
Страницы: 1
Наверх