如何用ARRAYFORMULA+VLOOKUP返回匹配指定Program Key的所有值?
Google Sheets 批量匹配返回所有匹配值的解决方法
你原来用=ARRAYFORMULA(VLOOKUP(dts_program_key,{'CMT Upload'!AF2:AF,'CMT Upload'!A2:A},2,0))只能得到单个结果,是因为VLOOKUP本身只会返回第一个匹配项,哪怕套了ARRAYFORMULA也没法改变这个特性。要返回所有匹配值且无空行间隔,试试下面几个实用方法:
方法1:用FILTER函数(最简单直接)
FILTER是专门用来筛选符合条件数据的函数,自动剔除空行,公式如下:
=FILTER('CMT Upload'!A2:A, 'CMT Upload'!AF2:AF = dts_program_key)
- 第一个参数
'CMT Upload'!A2:A:指定要返回的目标列(Contract Lane Key所在的A列) - 第二个参数
'CMT Upload'!AF2:AF = dts_program_key:设置筛选条件,匹配AF列中等于dts_program_key的行
输入后直接返回所有符合条件的结果,没有空行。
方法2:用QUERY函数(适合复杂筛选场景)
QUERY支持类SQL语句,灵活性更高,公式如下:
=QUERY('CMT Upload'!A2:AF, "SELECT A WHERE AF = '"&dts_program_key&"'", 0)
"SELECT A WHERE AF = '"&dts_program_key&"':SQL逻辑,选择A列中AF列等于目标key的行,注意字符串类型的key需要用单引号包裹- 最后一个参数
0:表示数据区域没有表头,直接返回结果
如果后续需要加更多筛选条件,直接修改QUERY里的语句就行。
方法3:用INDEX+SMALL组合(兼容旧版或特定需求)
如果需要结合ARRAYFORMULA使用,或者适配一些特殊场景,可以用这个组合公式:
=ARRAYFORMULA(IFERROR(INDEX('CMT Upload'!A2:A, SMALL(IF('CMT Upload'!AF2:AF = dts_program_key, ROW('CMT Upload'!AF2:AF)-ROW('CMT Upload'!AF2)+1), ROWS(A$2:A2)))))
IF('CMT Upload'!AF2:AF = dts_program_key, ...):找出所有符合条件的行号SMALL(..., ROWS(A$2:A2)):按顺序提取符合条件的行号INDEX(...):根据行号返回A列对应的值IFERROR:处理超出匹配数量的情况,避免显示错误值
输入公式后下拉,或者直接用ARRAYFORMULA自动填充所有结果。
内容的提问来源于stack exchange,提问作者rod.hoda
相关产品推荐
相关产品推荐

