Excel公式求助:查找对应编码首个非空值的列标题日期
解决Excel提取首个非空值对应日期的问题
问题背景
原工作表Set Plan的表格结构如下:
| Jan-23 | Feb-23 | Mar-23 | Apr-23 | |
|---|---|---|---|---|
| ABC | 1 | |||
| DEF | 1 | |||
| GHI | 1 | 1 |
在另一工作表中,编码ABC、DEF、GHI垂直排列(假设放在J列,如J925为第一个编码),需要编写公式获取每个编码对应行首个非空值的列标题日期,输出格式为月/年(如2/2023)。
之前尝试的公式未生效:
=IFERROR(INDEX('Set Plan'!$P$3:$AY$3, XLOOKUP(1, ('Set Plan'!$P4:$AY282 > 0) * ('Set Plan'!$C$4:$C$282 = $J925), 'Set Plan'!$P$3:$AY$3, "", 0, 1)), "No Match Found")
问题原因
这个公式的核心问题是:
XLOOKUP的查找数组是多行列的布尔运算结果,返回数组却是单行的日期标题,二者维度不匹配- 没有先定位到目标编码对应的行,导致查找范围覆盖了多行,逻辑混乱
解决方案
方案1:适配Excel 365/2021(支持XLOOKUP)
直接在目标单元格输入以下公式,下拉填充即可:
=TEXT(INDEX('Set Plan'!$P$3:$AY$3,MATCH(TRUE,INDEX('Set Plan'!$P$4:$AY$282,MATCH($J925,'Set Plan'!$C$4:$C$282,0),0)<>"",0)),"m/yyyy")
拆解逻辑:
MATCH($J925,'Set Plan'!$C$4:$C$282,0):找到当前编码在Set Plan表C列的行号INDEX('Set Plan'!$P$4:$AY$282,...):提取该行从P到AY列的所有数据MATCH(TRUE,...<>""...):定位该行里第一个非空值的列位置INDEX('Set Plan'!$P$3:$AY$3,...):取出对应位置的日期标题TEXT(..., "m/yyyy"):把日期转成月/年的格式
方案2:兼容旧版Excel(无XLOOKUP)
如果用的是旧版Excel,换用OFFSET替代行提取逻辑:
=TEXT(INDEX('Set Plan'!$P$3:$AY$3,MATCH(TRUE,OFFSET('Set Plan'!$P$3,MATCH($J925,'Set Plan'!$C$4:$C$282,0),0,1,COLUMNS('Set Plan'!$P$3:$AY$3))<>"",0)),"m/yyyy")
加无匹配提示(可选)
如果需要处理编码不存在的情况,套上IFERROR:
=IFERROR(TEXT(INDEX('Set Plan'!$P$3:$AY$3,MATCH(TRUE,INDEX('Set Plan'!$P$4:$AY$282,MATCH($J925,'Set Plan'!$C$4:$C$282,0),0)<>"",0)),"m/yyyy"),"No Match Found")
内容的提问来源于stack exchange,提问作者Didier
相关产品推荐
相关产品推荐

