Excel使用INDEX+SMALL组合公式无法提取合并单元格目标值,求适配公式
适配合并单元格场景的取值解决方案
方案1:Excel 365/2021及以上版本(支持动态数组)
核心逻辑是先为D列的合并单元格补全隐式存储值,再执行匹配查询,公式如下:
=IFERROR(INDEX(SCAN(,'General Journal'!D6:D11,LAMBDA(a,b,IF(b="",a,b))),SMALL(IF('General Journal'!C6:C11=B2,ROW('General Journal'!C6:C11)-5,""),ROW(A1))),"")
SCAN函数会遍历D6:D11区域,遇到空值就自动继承上一个非空值,刚好适配合并单元格仅首格存值的特性,补全所有值后再用INDEX取值就不会返回0。
注意:公式末尾的
ROW(A1)是动态序列参数,下拉时会自动变为ROW(A2)、ROW(A3),对应返回第2、第3个匹配结果,不要直接使用原公式中的ROW('General Journal'!C6:C11)-5参数。
方案2:旧版Excel(无LAMBDA函数支持)
利用LOOKUP的二分法特性补全合并单元格的隐式值,公式如下,输入完成后需要按Ctrl+Shift+Enter数组回车确认:
=IFERROR(INDEX(LOOKUP(ROW(6:11),IF('General Journal'!D6:D11<>"",ROW(6:11)),'General Journal'!D6:D11),SMALL(IF('General Journal'!C6:C11=B2,ROW('General Journal'!C6:C11)-5,""),ROW(A1))),"")
公式中LOOKUP部分的逻辑是先记录D列所有非空值的行号,再用当前行号匹配距离最近的非空值行号,取出对应值,实现和SCAN相同的合并单元格值补全效果。
长期优化方案
如果不需要严格保留表格的合并单元格格式,可先取消C、D列的合并单元格,再通过「开始选项卡→查找和选择→定位条件→空值→输入=上一单元格→按Ctrl+Enter批量填充」的方式把所有隐式值填实,之后你原来的公式即可正常运行,后续表格维护也更方便。
内容的提问来源于stack exchange,提问作者Dum Acco
相关产品推荐
相关产品推荐

