含空值返回公式时,如何用INDEX定位最后有效内容单元格
找到B列最后一个有效内容的公式解决方案
嘿,我明白你的问题了——原来的公式是找最后一个真正空白的单元格,但你的B列单元格用=IF(AND(B50>=$G$4,B50<=$G$5),B50,"")返回的是空文本""(不是Excel认定的“空白”),所以原公式会把这些空文本当成有内容的,自然定位不到最后一个有效数值。
下面分两种Excel版本给你对应的解决办法:
如果你用的是Excel 365/2021(支持动态数组)
直接用这个简洁的公式就行,不需要按组合键:
=TAKE(FILTER(B4:B55,B4:B55<>""),-1)
- 先通过
FILTER把B4到B55里所有不是空文本的有效内容筛出来 - 再用
TAKE(..., -1)直接取筛选结果的最后一行,就是你要的最后一个有效内容
如果你用的是旧版Excel(不支持动态数组)
需要用数组公式,输入完之后一定要按Ctrl+Shift+Enter确认(不是直接回车):
=INDEX(B4:B55,MAX((B4:B55<>"")*ROW(B4:B55))-ROW(B4)+1)
给你拆解下这个公式的逻辑:
(B4:B55<>""):逐个检查单元格是不是有效内容(不等于空文本),得到一串TRUE/FALSE*ROW(B4:B55):把TRUE转换成对应的行号,FALSE转换成0,这样就得到了一个只有有效内容行号和0的数组MAX(...):从这个数组里挑最大的数,也就是最后一个有效内容所在的行号-ROW(B4)+1:把绝对行号转换成B4:B55范围内的相对位置,这样INDEX就能准确找到对应的值
要是你想保留“如果没有有效内容就返回空”的逻辑,就把上面的公式套进IF里:
=IF(MAX((B4:B55<>"")*ROW(B4:B55))=0,"",INDEX(B4:B55,MAX((B4:B55<>"")*ROW(B4:B55))-ROW(B4)+1))
这个版本会在B4到B55全是空文本的时候返回空,否则返回最后一个有效内容。
顺便说下原公式失效的原因:
原公式里的ISBLANK(A55)只能识别真正的空白单元格,但你的单元格是返回"",ISBLANK会返回FALSE;而且原公式的INDEX参数也有问题——第三个参数应该是列数(单列的话填1),你填了A55,这也会导致逻辑出错。换成上面的公式就没问题啦。
内容的提问来源于stack exchange,提问作者vgosselin
相关产品推荐
相关产品推荐

