You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:12:31