求无VBA的Excel公式:按姓名和出生年份返回多地点
解决方案:多条件匹配返回所有结果的Excel公式
适用Excel 365/2021及以上版本(支持动态数组)
直接用FILTER+TEXTJOIN组合就能一次性返回所有匹配的地点,并用分隔符拼接成列表:
假设要匹配的姓名在单元格J2,出生年份在K2,在目标单元格输入:
=TEXTJOIN("、", TRUE, FILTER(F:F, (G:G=J2)*(H:H=K2), "无匹配结果"))
FILTER(F:F, (G:G=J2)*(H:H=K2), "无匹配结果"):筛选出G列等于J2且H列等于K2的所有F列数据,无匹配时返回指定提示文本TEXTJOIN("、", TRUE, ...):把筛选结果用顿号(可替换为逗号、空格等其他分隔符)拼接成字符串,TRUE参数用于忽略空值
如果需要将每个地点单独放在一个单元格(自动溢出填充),直接使用FILTER即可:
=FILTER(F:F, (G:G=J2)*(H:H=K2), "无匹配结果")
适用旧版Excel(不支持动态数组)
用数组公式结合INDEX+SMALL+IF,按顺序提取每个匹配结果:
从单元格L2开始输入公式,输入完成后按Ctrl+Shift+Enter(数组公式专用快捷键):
=IFERROR(INDEX(F:F, SMALL(IF((G:G=$J$2)*(H:H=$K$2), ROW(G:G)), ROW(A1))), "")
下拉填充公式直到出现空值:
IF((G:G=$J$2)*(H:H=$K$2), ROW(G:G)):生成所有满足条件的行号数组,不满足条件的返回FALSESMALL(..., ROW(A1)):依次提取第1、2、3...个符合条件的行号(下拉时ROW(A1)自动变为ROW(A2),以此类推)INDEX(F:F, ...):根据行号提取对应F列的地点IFERROR(..., ""):无更多匹配结果时返回空值,避免显示错误信息
注意事项
- 建议使用实际数据范围(如
F2:F1000)替代整列引用(F:F),提升公式运行效率 - 若姓名或出生年份存在多余空格,可先用
TRIM函数清洗数据,避免匹配失败
内容的提问来源于stack exchange,提问作者Simon.G
相关产品推荐
相关产品推荐

