INDEX(FILTER(SORT))函数失效,求Google Sheets数据匹配替代方案
解决方案
问题分析
你原公式的问题在于直接过滤掉了C列为空的记录,无法实现“先取最新条目,若C列空则回溯最近非空值”的逻辑——它会跳过所有空值直接找最新的非空记录,但实际需要从最新记录开始依次检查,找到第一个非空的C值。
修正公式
使用以下公式可以实现需求:
=IFERROR(INDEX(FILTER(SORT('VISIT LOG'!A:C, 'VISIT LOG'!B:B, FALSE), 'VISIT LOG'!A:A=A2), XMATCH(TRUE, INDEX(FILTER(SORT('VISIT LOG'!A:C, 'VISIT LOG'!B:B, FALSE), 'VISIT LOG'!A:A=A2),,3)<>"", 0), 3), "")
公式拆解
SORT('VISIT LOG'!A:C, 'VISIT LOG'!B:B, FALSE):将「VISIT LOG」的A-C列按B列日期降序排序,确保最新记录排在最前面。FILTER(..., 'VISIT LOG'!A:A=A2):筛选出与当前行A列值匹配的所有记录,保留日期从新到旧的顺序。INDEX(...,3)<>"":提取筛选结果中的C列,判断是否非空。XMATCH(TRUE, ..., 0):找到筛选后C列中第一个非空值的位置。INDEX(..., 3):根据找到的位置,提取对应的C列值。IFERROR(..., ""):如果所有匹配记录的C列都为空,返回空值(可自行修改为提示文本)。
简化版公式(适用于Excel 365/2021)
利用动态数组特性,还可以用更简洁的写法:
=IFERROR(TAKE(FILTER(SORT('VISIT LOG'!C:C, 'VISIT LOG'!B:B, FALSE), 'VISIT LOG'!A:A=A2, ""), XMATCH(TRUE, FILTER(SORT('VISIT LOG'!C:C, 'VISIT LOG'!B:B, FALSE), 'VISIT LOG'!A:A=A2, "")<>"", 0)), "")
内容的提问来源于stack exchange,提问作者Meir
相关产品推荐
相关产品推荐

