Excel跨工作簿VLOOKUP:如何动态引用最后有数据行?
解决动态行号的VLOOKUP引用问题
我懂你的烦恼——当数据源的行数随时变化时,固定死行号的引用肯定不好用,要么漏掉新增的数据,要么会引用到空行。咱们来调整你的代码,让它自动适配Daily_Report BOE.xlsx里Nocturne工作表的最后一行有效数据:
修改后的VBA代码
Dim lastRow As Long ' 激活目标工作簿 Windows("Sales wk02.xlsx").Activate Range("C2").Select ' 获取数据源工作表的最后一行数据行号 lastRow = Workbooks("Daily_Report BOE.xlsx").Worksheets("Nocturne").Cells(Rows.Count, 1).End(xlUp).Row ' 设置动态范围的VLOOKUP公式 ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC[-2],'[Daily_Report BOE.xlsx]Nocturne'!R4C1:R" & lastRow & "C13,13,0)"
关键逻辑说明
lastRow变量用来存储数据源的最后一行行号,核心语句Cells(Rows.Count, 1).End(xlUp).Row是从第1列的最底部往上查找,精准定位到最后一个有数据的单元格所在行,完美适配动态变化的行数。- 把原来固定的
R105替换成拼接的R" & lastRow & ",这样公式的引用区域就会自动跟着数据源的行数同步更新。
额外给个优化建议:尽量避免使用Activate和Select,可以让代码运行更高效稳定,比如改成下面这样:
Dim lastRow As Long Dim targetWs As Worksheet Dim sourceWs As Worksheet Set targetWs = Workbooks("Sales wk02.xlsx").ActiveSheet Set sourceWs = Workbooks("Daily_Report BOE.xlsx").Worksheets("Nocturne") lastRow = sourceWs.Cells(sourceWs.Rows.Count, 1).End(xlUp).Row targetWs.Range("C2").FormulaR1C1 = _ "=VLOOKUP(RC[-2],'" & sourceWs.Parent.Name & "]" & sourceWs.Name & "'!R4C1:R" & lastRow & "C13,13,0)"
这个版本不需要手动激活工作簿或选择单元格,运行起来更流畅。
内容的提问来源于stack exchange,提问作者Jagadish
相关产品推荐
相关产品推荐

