使用自动填充VBA的Excel Vlookup

时间:2013-09-13 19:22:11

标签: excel vba vlookup autofill

我正在尝试制作一个看似非常简单的宏,但事实证明它比我想象的要难。我开始使用“点击”方法制作它,但它没有像我想象的那样动态。基本上我使用vlookup从另一个工作表中查找单元格A2中的名称,然后将D列中的数字复制到当前工作表。查看代码时,这部分看起来像这样:

Range("D2").Select
ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-3],'Downstairs'!R[-1]C[-3]:R[200]C[14],4,0)"

Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D" & lastrow&)

找到第一个号码后,我正在尝试自动填充其余的号码。它运行时它可以工作,但我认为这只是因为名称是有序的。但是,如果名称不按顺序排列,则无法找到正确的数字,部分原因是因为沿着行向下,R []和C []内的所有数字都会不断变化。如果我在列表中添加更多名称,我认为它不会起作用,这是我需要它做的事情。我将R []内的数字从93改为200,因为我真的不知道如何合并之前制作的拉斯特罗对象,而且我不知道另一种方法可以让它变得动态。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

就像我在上面的评论中提到的那样,你不需要VBA。您可以直接在Excel中键入公式并执行手动自动填充。话虽如此,如果您仍想要VBA,那么只需使用此代码,您就不需要使用自动填充功能。此代码将使用公式填充所有相关单元格。

你的公式也没有给你正确的结果,因为你的表数组不是常数,并且当你向下移动时它正在改变。为防止这种情况发生,只需使用$符号。

另一个提示:R1C1格式如果你不擅长它会非常混乱。坚持正常的A1格式。

这是实现您想要的最简单的方法。请修改代码以满足您的需求

Sub Sample()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim lastrow  As Long

    '~~> Change this to the releavnt sheet name
    '~~> This is the sheet where the formula will go
    Set ws1 = ThisWorkbook.Sheets("Sheet1")

    Set ws2 = ThisWorkbook.Sheets("Downstairs")

    With ws1
        '~~> Get the last row
        lastrow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Fill formula in all the relevant cells in one go
        '~~> replace my formula within quotes with your formula
        '~~> Do not forget to put the $ sign like I have done
        .Range("D1:D" & lastrow).Formula = "=VLOOKUP(A1,Downstairs!$C$1:$N$200,4,0)"
    End With
End Sub