如何用Excel INDEX MATCH函数返回最近日期对应的目标值?
解决INDEX MATCH返回最近日期对应值的问题
核心需求是:根据指定匹配值(H4),找到对应行中最近日期所在的行,再返回目标表头(I3)对应列的值。
正确公式(Excel 365/2021 或兼容动态数组版本)
=INDEX($B$3:$E$11, MATCH(1,($B$3:$B$11=H4)*($C$3:$C$11=MAXIFS($C$3:$C$11,$B$3:$B$11,H4)),0), MATCH(I$3,$B$3:$E$3,0))
- 直接回车即可生效,无需数组输入
兼容旧版Excel的数组公式
如果使用Excel 2019及更早版本,需按 Ctrl+Shift+Enter 输入以下公式:
=INDEX($B$3:$E$11, MATCH(1,($B$3:$B$11=H4)*($C$3:$C$11=MAX(IF($B$3:$B$11=H4,$C$3:$C$11))),0), MATCH(I$3,$B$3:$E$3,0))
公式逻辑拆解
- 获取最近日期:
- 新版用
MAXIFS($C$3:$C$11,$B$3:$B$11,H4):筛选B列等于H4的所有行,提取C列日期中的最大值(最近日期) - 旧版用
MAX(IF($B$3:$B$11=H4,$C$3:$C$11)):通过IF数组筛选匹配行的日期,再取最大值
- 新版用
- 定位目标行:
($B$3:$B$11=H4)*($C$3:$C$11=最近日期)生成一个数组,同时满足两个条件的位置会返回1,其他为0;再用MATCH找到这个1对应的行号 - 定位目标列:
MATCH(I$3,$B$3:$E$3,0)找到I3表头在数据区域首行的列号 - 返回结果:INDEX根据行号和列号返回交叉单元格的值
你之前公式的问题
- MAXIFS语法错误:正确格式是
MAXIFS(数值范围,条件范围1,条件1),你写的MAXIFS(C3:C11,H4=B3:B11)不符合规范 - AGGREGATE用法错误:公式中AGGREGATE参数不完整,且未和匹配条件正确结合
- 括号配对错误:两个公式都存在括号不匹配的问题,导致无法计算
内容的提问来源于stack exchange,提问作者Florentine
相关产品推荐
相关产品推荐

