Настройка смещений в диапазоне формул, чтобы избежать переопределения

Tourless спросил: 12 мая 2018 в 04:37 в: excel-vba

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

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 ответа

SJR ответил: 12 мая 2018 в 06:00

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

Sub x()Dim i As LongFor 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 iEnd Sub
Tourless ответил: 13 мая 2018 в 11:09
Нет кубиков. Он просто копирует те же данные. Но я думаю, что это может быть моей ошибкой в ​​моем объяснении того, что я пытаюсь выполнить ... каждая итерация должна выполнить две вещи. Vlookup должен смотреть на следующую строку (поэтому при первом запуске VLOOKUP(CustomerList!A1,Customers,1,FALSE)) следующий код VLOOKUP(CustomerList!A2,Customers,1,FALSE) и т. Д. Каждый запуск должен копироваться, как я указал в исходном сообщении Надеюсь, это поможет прояснить.
SJR ответил: 13 мая 2018 в 12:02
Я не изменил формулу. Вы имеете в виду, что формула в формате A4 должна быть VLOOKUP(CustomerList!A1,Customers,1,FALSE), а формула в A9 должна быть VLOOKUP(CustomerList!A2,Customers,1,FALSE)?
Tourless ответил: 13 мая 2018 в 02:17
ты прав. Я решил первую часть своей проблемы с автоматическим добавлением значения поиска, теперь мне нужно обернуть это в цикле, который будет выполнять 5 строк для каждого поиска.
Tourless ответил: 13 мая 2018 в 12:49

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

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 rowEnd Sub