超200列二维数组中搜索文章ID,如何返回对应工作表名称?
解决多列数据下的文章ID归属工作表查询问题
针对你200+列的大规模数据集,这里提供两个可行的公式方案,替代逐个编写Filter的低效方式:
方案1(支持Excel 365/2021,逻辑更直观)
=TEXTJOIN(", ", TRUE, UNIQUE(FILTER(B19:B, BYCOL(C19:100, LAMBDA(col, COUNTIF(col, C3))>0))))
公式说明:
BYCOL(C19:100, LAMBDA(col, COUNTIF(col, C3))>0):遍历所有存放文章ID的列(C19到第100列),检查每一列是否包含C3的目标ID,返回对应B列行的布尔判断结果(有匹配则为TRUE)。FILTER(B19:B, ...):根据布尔结果筛选出对应的工作表名称。UNIQUE(...):避免同一工作表因多列匹配同一ID而重复显示。TEXTJOIN(", ", TRUE, ...):将筛选结果用逗号分隔合并成文本。
方案2(兼容旧版Excel)
如果你的Excel版本不支持LAMBDA函数,用MMULT实现行列匹配汇总:
=TEXTJOIN(", ", TRUE, FILTER(B19:B, MMULT(--(C19:100=C3), SEQUENCE(COLUMNS(C19:100),,1,0))>0))
公式说明:
--(C19:100=C3):将ID匹配的布尔结果转换为0/1的二维数组。MMULT(..., SEQUENCE(...)):通过矩阵乘法,把每一行的所有列匹配结果求和,得到每行是否存在匹配(和>0则表示该行有至少一列匹配目标ID)。- 后续的
FILTER和TEXTJOIN逻辑同方案1。
原公式报错原因
你之前的公式存在两个核心问题:
- 范围错误:
B19:A是无效的单元格区域,正确的工作表名称范围应为B19:B。 - 多列匹配处理不当:
C19:100=C3返回的是二维数组,而FILTER要求筛选条件是和目标范围行数一致的一维数组,直接使用会导致维度不匹配报错。
内容的提问来源于stack exchange,提问作者Isaac Whiteside
相关产品推荐
相关产品推荐

