Google Sheets中匹配列特定值时获取目标列末值的公式优化
Google Sheets条件提取最后一条匹配值公式优化
需求说明
- 业务逻辑:针对
Blockchains工作表,以E列的值匹配目标值VALUEA,提取对应F列中符合匹配条件的最后一条数据 - 当前在用公式:
=INDEX(filter(Blockchains!F$2:F,Blockchains!E$2:E=VALUEA),ROWS(filter(Blockchains!F$2:F,Blockchains!E$2:E=VALUEA)),1)
- 现有公式问题:两次执行相同逻辑的
FILTER运算,存在计算冗余,数据量较大时会降低表格计算效率,公式写法也偏冗长。
更优实现方案
方案1:LOOKUP写法(效率最高,全版本兼容)
=LOOKUP(1,0/(Blockchains!E$2:E=VALUEA),Blockchains!F$2:F)
逻辑说明:
- 表达式
0/(Blockchains!E$2:E=VALUEA)会将符合匹配条件的行转换为数值0,不符合条件的行转换为错误值 LOOKUP查找数值1时会自动忽略所有错误值,直接定位到最后一个符合条件的0值位置,返回对应F列的内容,全程仅做一次条件判断,计算量比原公式减少一半,万行以上数据场景下性能优势明显。
方案2:TAKE+FILTER写法(逻辑直观,适配新版Google Sheets)
=TAKE(FILTER(Blockchains!F$2:F,Blockchains!E$2:E=VALUEA),-1)
逻辑说明:
- 和原公式思路一致,仅执行一次
FILTER筛选出所有符合条件的F列值,再通过TAKE(..., -1)直接提取筛选结果的最后一行,写法比原公式简洁很多,也避免了重复计算。
补充说明
- 若存在无匹配结果的场景,可以在外层套
IFERROR做兜底处理,例如:
=IFERROR(LOOKUP(1,0/(Blockchains!E$2:E=VALUEA),Blockchains!F$2:F),"无匹配数据")
- 不建议在数组公式中重复执行逻辑完全相同的筛选/判断运算,会不必要地占用表格计算资源。
内容的提问来源于stack exchange,提问作者Luis Miguel Delgado
相关产品推荐
相关产品推荐

