установка смещений в диапазоне формул, чтобы избежать перерасчета - PullRequest
0 голосов
/ 05 июня 2018

Я хочу взять следующий код и структурировать его таким образом, чтобы он зацикливался на всех элементах списка и создавал новый раздел для каждой итерации, пропуская строку.

For Each row In rng.Rows
        wsCustomerReportCard.Range("A4").Formula = "=VLOOKUP(CustomerList!A1,Customers,1,FALSE)"
        wsCustomerReportCard.Range("A5").Formula = "=VLOOKUP(CustomerList!A1,Customers,2,FALSE)"
        wsCustomerReportCard.Range("A6").Formula = "=VLOOKUP(CustomerList!A1,Customers,3,FALSE)"
        wsCustomerReportCard.Range("A7").Formula = "=CONCATENATE(VLOOKUP(CustomerList!A1,Customers,4,FALSE)&"", ""&VLOOKUP(CustomerList!A1,Customers,5,FALSE)&"" ""&VLOOKUP(CustomerList!A1,Customers,6,FALSE))"
        wsCustomerReportCard.Range("C4").Formula = "=VLOOKUP(CustomerList!A1,Customers,7,FALSE)"
        wsCustomerReportCard.Range("C5").Formula = "=VLOOKUP(CustomerList!A1,Customers,8,FALSE)"
        wsCustomerReportCard.Range("C6").Formula = "=VLOOKUP(CustomerList!A1,Customers,9,FALSE)"
    Next row

Итаквместо копирования поверх A4-C6 (как определено), он создаст следующий набор A9-C11, затем A14-C16 и т. д.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Я понял это ...

Sub Report()
    Dim rng As Range
    Dim row As Range
    Dim j As Long

    Set rng = wsCustomerList.Range("A1:A" & LastRow(wsCustomerList))
    j = 1
    For Each row In rng.Rows
            wsCustomerReportCard.Range("A4").FormulaR1C1 = "=VLOOKUP(CustomerList!R" & j & "C1,Customers,1,FALSE)"
            wsCustomerReportCard.Range("A5").FormulaR1C1 = "=VLOOKUP(CustomerList!R" & j & "C1,Customers,2,FALSE)"
            wsCustomerReportCard.Range("A6").FormulaR1C1 = "=VLOOKUP(CustomerList!R" & j & "C1,Customers,3,FALSE)"
            wsCustomerReportCard.Range("A7").FormulaR1C1 = "=CONCATENATE(VLOOKUP(CustomerList!R" & j & "C1,Customers,4,FALSE)&"", ""&VLOOKUP(CustomerList!R" & j & "C1,Customers,5,FALSE)&"" ""&VLOOKUP(CustomerList!R" & j & "C1,Customers,6,FALSE))"
            wsCustomerReportCard.Range("E4").FormulaR1C1 = "=VLOOKUP(CustomerList!R" & j & "C1,Customers,7,FALSE)"
            wsCustomerReportCard.Range("E5").FormulaR1C1 = "=VLOOKUP(CustomerList!R" & j & "C1,Customers,8,FALSE)"
            wsCustomerReportCard.Range("E6").FormulaR1C1 = "=VLOOKUP(CustomerList!R" & j & "C1,Customers,9,FALSE)"
            j = j + 1
        Next row

End Sub
0 голосов
/ 05 июня 2018

Вот подход, я только что сделал первый

Sub x()

Dim i As Long

For i = 0 To 50 Step 5 'change upper limit as applicable
    For Each Row In Rng.Rows
        wsCustomerReportCard.Range("A4").Offset(i).Formula = "=VLOOKUP(CustomerList!A1,Customers,1,FALSE)"
        'etc
    Next Row
Next i

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