迭代VLOOKUP中的不同列索引号

时间:2015-03-28 10:25:13

标签: vba vlookup

我正在尝试编写一个使用VLOOKUP从表中提取数据的宏,但是对于每个列完成,我希望能够增加列索引号以获得下一批数据。到目前为止宏看起来像这样:

Sub ExtractAddress()

Dim RowNum As Integer
RowNum = 2
Dim FinalRow As Integer
FinalRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
Dim ColNum As Integer
ColNum = 10

    For RowNum = 2 To FinalRow
        For ColNum = 10 To 27
            Sheets("Sheet1").Cells(RowNum, ColNum).FormulaR1C1 = "=VLOOKUP(RC1,'[Address list.xlsx]Sheet1'!R1C1:R407C19,2,FALSE)"
        Next ColNum
    Next RowNum

End Sub

因此,对于通过ColNum的每个循环,我也希望增加列索引号,否则我最终会在每列中使用相同的数据。我尝试过使用变量J并在循环的每个循环后增加它但是它似乎不接受这个。

我是VBA的学习者,所以用简单的语言答案会非常有帮助。

谢谢大家!

1 个答案:

答案 0 :(得分:0)

解决方案

试试这个。我刚刚将ColNum添加到公式中:

Sheets("Sheet1").Cells(RowNum, ColNum).FormulaR1C1 = "=VLOOKUP(RC1,'[Address list.xlsx]Sheet1'!R1C1:R407C19," & ColNum - 8 &",FALSE)"


注意,有点偏离主题:

您不必逐个循环遍历所有单元格以应用公式,您可以用更少的步骤,更少的范围和“通用公式”来执行此操作,这意味着正确使用相对和绝对引用。

像这样(这是按列,我想不出一种方法可以立即将公式应用于整个范围)

Sub ExtractAddress()

    Dim RowNum As Integer
    Dim FinalRow As Integer
    Dim ColNum As Integer

    With Sheets("Sheet1")
        FinalRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For ColNum = 20 To 27
                .Range(.Cells(2, ColNum), .Cells(FinalRow, ColNum)).FormulaR1C1 = _
                "=VLOOKUP(R[0]C1,R1C1:R" & FinalRow & "C19," & ColNum - 18 & "  ,FALSE)"
        Next ColNum
    End With

End Sub