在公式范围内设置偏移以避免过度矫正

时间:2018-06-05 18:17:40

标签: excel-vba vba excel

我想采用以下代码并以这样的方式构造它,它将循环遍历列表中的所有项目,并为每次迭代创建一个新的部分,跳过一行。

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 :(得分:0)

这是一种方法,我刚刚完成了第一次

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

答案 1 :(得分:0)

我明白了......

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