如何用Excel表格结构化引用按Column3值获取Column2对应最后单元格?
解决方案
一、用结构化引用获取Column3指定值对应的Column2最后一行值
针对你的需求,推荐两种基于结构化引用的公式方案,无需依赖基础数组公式:
- LOOKUP函数方案(简洁高效)
直接使用LOOKUP匹配最后一个符合条件的行,结构化引用自动适配表格扩展:
=LOOKUP(2,1/(Table1[Column3]="A"),Table1[Column2])
- 原理:
1/(Table1[Column3]="A")会生成由1和#DIV/0!组成的数组,LOOKUP会忽略错误值,找到最后一个1对应的Column2值。 - 替换公式中的
"A"为目标值,即可匹配不同的Column3内容。
- INDEX+SUMPRODUCT方案(精准控制行号)
如果需要明确计算相对行号,可使用此方案:
=INDEX(Table1[Column2],SUMPRODUCT(MAX((Table1[Column3]="A")*ROW(Table1[Column3]))-ROW(Table1[#Headers])))
- 原理:
MAX((Table1[Column3]="A")*ROW(Table1[Column3]))获取Column3值为"A"的最后一行绝对行号;减去表头行号ROW(Table1[#Headers])得到表格内的相对行号,再用INDEX提取对应Column2的值。
二、创建随Column3值更新的动态命名范围
要生成随Column3指定值最后一行变化的动态范围(如示例中的A1:B5),可通过Excel名称管理器实现,推荐使用非易失性的INDEX函数构建:
- 打开Excel的「公式」选项卡,点击「名称管理器」;
- 点击「新建」,输入名称(如
DynamicRange); - 在「引用位置」中粘贴以下公式:
=Table1[#All]:INDEX(Table1[#All],SUMPRODUCT(MAX((Table1[Column3]="A")*ROW(Table1[Column3]))-ROW(Table1[#All])+1,COLUMNS(Table1[#All])))
- 原理:
Table1[#All]代表整个表格的区域(含表头);SUMPRODUCT(...)计算Column3值为"A"的最后一行在表格内的相对行数;- INDEX定位到目标行的最后一列,结合起始区域形成动态范围,当表格扩展或Column3的匹配行变化时,范围会自动更新。
如果偏好使用OFFSET(易失性函数,注意性能影响),可使用:
=OFFSET(Table1[#All],0,0,SUMPRODUCT(MAX((Table1[Column3]="A")*ROW(Table1[Column3]))-ROW(Table1[#All])+1,COLUMNS(Table1[#All])))
内容的提问来源于stack exchange,提问作者Ravenerabnorm
相关产品推荐
相关产品推荐

