Excel公式求助:提取行中最后一个非空且排除指定文本的对应值
Excel公式求助:提取行中最后一个非空且排除指定文本的对应值
我完全懂你这种差一点就摸到答案但就是不对的憋屈感!你要的是找到行里最后一个**既不是空值、也不是"ICU_Approval"**的单元格,然后返回同一列下方对应位置的数值对吧?看你举的例子,就是要定位到SI-003那列,然后返回7、16或者25这类值。
先帮你分析下之前的公式问题:
- 第一个用INDEX+MAX+IF的公式,你用了ROW(S1:AA1),但这个区域是同一行,ROW返回的行号都是1,所以MAX后得到1,自然只返回第一列的数值,这就是为啥出1的原因。
- 第二个LOOKUP公式,引用固定单元格$U$1的逻辑不够灵活,没法准确匹配所有排除条件。
给你两个靠谱的解决方案:
方案一:用XLOOKUP(365/2021及以上版本适用)
这个函数本身支持反向查找,用起来最直观:
=XLOOKUP(2,1/($S1:$AA1<>"")*($S1:$AA1<>"ICU_Approval"),$S9:$AA9,,,-1)
解释下逻辑:
1/($S1:$AA1<>"")*($S1:$AA1<>"ICU_Approval")会把符合条件的单元格转成1,不符合的转成错误值- 最后一个参数
-1表示从右往左查找,直接定位到最后一个符合条件的位置 - 找到后返回$S9:$AA9对应列的数值
方案二:兼容旧版Excel的INDEX+MAX+IF组合
把你之前的公式改改,用COLUMN代替ROW,因为我们是在同一行找列的位置:
=INDEX($S9:$AA9,MAX(IF(($S1:$AA1<>"")*($S1:$AA1<>"ICU_Approval"),COLUMN($S1:$AA1)-COLUMN($S1)+1)))
解释下:
COLUMN($S1:$AA1)-COLUMN($S1)+1是把列号转成从1开始的相对位置(比如S列是1,T列是2...)- MAX会找到最后一个符合条件的相对列数,再用INDEX从$S9:$AA9里取出对应值
测试下的话,这两个公式都能返回你要的7、16或者25这类结果,完美避开"ICU_Approval"和空值~
备注:内容来源于stack exchange,提问作者user1987243
相关产品推荐
相关产品推荐

