Excel Vlookup与Autofill VBA

我试图制作一个看起来非常简单的macros,但事实certificate比我想象的要困难。 我开始使用“点击”方法,但没有像我想象的那样dynamic。 基本上我使用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&) 

find第一个数字后,我正在尝试自动填充剩下的数字。 它运行时,它运作,但我认为这是因为名称是为了。 但是,如果名称不正确,将无法find正确的数字,部分原因是R []和C []内部的所有数字随着行数的不同而不断变化。 我不认为这会工作,如果我添加更多的名单,这是我需要做的事情。 我把R []中的数字从93改成了200,因为我真的不知道如何把我之前做过的拉斯特罗对象合并到一起,而我不知道如何使这个dynamic变成另一种方式。 有一个更好的方法吗?

就像我在上面的评论中提到的,你不需要VBA。 您可以直接在Excel中input公式,然后执行手动自动填充。 话虽如此,如果你仍然想要做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