Excel公式求助:动态引用上方表格数据至列内下一空白单元格
解决方法
方法1:动态定位第一个表格的边界
利用MATCH找到两个表格之间的空白行,自动确定第一个表格的范围,不用硬编码行号。
把第二个表格里的公式改成这样:
=INDEX(C$2:INDEX(C:C,MATCH("",A:A,0)-1),MATCH($A7,A$2:INDEX(A:A,MATCH("",A:A,0)-1),0))
原理:
MATCH("",A:A,0)会找到A列里第一个空白单元格的行号(也就是两个表格之间的分隔空白行)- 用这个行号减1,就是第一个表格数据的最后一行,再用
INDEX定位到对应列的这个位置,就得到了第一个表格的动态范围 - 不管你给第一个表格加多少行,只要中间的分隔空白行还在,公式都会自动适配新的范围
如果两个表格之间可能有不止一个空白行,就换成XLOOKUP精准定位最后一个有效数据行:
=INDEX(C$2:INDEX(C:C,XLOOKUP(TRUE,A:A="",ROW(A:A),,-1)-1),MATCH($A7,A$2:INDEX(A:A,XLOOKUP(TRUE,A:A="",ROW(A:A),,-1)-1),0))
方法2:定义动态名称范围
给第一个表格的关键列定义动态名称,公式里直接用名称,更简洁好维护:
- 点「公式」选项卡 → 「定义名称」
- 给姓名列建名称:
- 名称:
FirstTable_Names - 引用位置:
=OFFSET(Sheet1!$A$2,0,0,MATCH("",Sheet1!$A:$A,0)-2,1)
- 名称:
- 给Year 1金额列建名称:
- 名称:
FirstTable_Year1Dollars - 引用位置:
=OFFSET(Sheet1!$C$2,0,0,MATCH("",Sheet1!$A:$A,0)-2,1)
- 名称:
- 然后第二个表格的公式直接写:
=INDEX(FirstTable_Year1Dollars,MATCH($A7,FirstTable_Names,0))
以后添加新姓名,名称会自动更新范围,不用改公式。
方法3:把第一个表格转成Excel正式表格(最省心)
这是长期来看最靠谱的方案,Excel的正式表格会自动扩展范围:
- 选中第一个表格的任意单元格,按
Ctrl+T(或者点「插入」→「表格」) - 勾选「我的表格有标题」,确定后表格会变成带筛选框的样式
- 假设表格默认名称是
Table1,第二个表格的公式直接用:
=XLOOKUP($A7,Table1[姓名],Table1[Year 1 Dollars])
或者用你原来的INDEX+MATCH写法:
=INDEX(Table1[Year 1 Dollars],MATCH($A7,Table1[姓名],0))
以后在第一个表格末尾直接输入新的姓名和数据,表格会自动把新行包含进去,公式引用的范围也会同步更新,完全不用手动调整。
内容的提问来源于stack exchange,提问作者Claycrusher
相关产品推荐
相关产品推荐

