You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel中基于国家与对应多邮编匹配返回行号的实现求助

嘿,我太懂你这种找不到现成案例的憋屈了——同一行里存多个对应值的匹配,确实比单单元格匹配要绕个弯儿。不过咱可以用几个函数组合轻松搞定,分两种情况给你说:

方法1:适合所有Excel版本(包括旧版)

假设你的国家数据在A列,邮编从B列开始往后延伸,要查询的国家放在单元格D1,邮编放在E1,用下面的数组公式(输入完按Ctrl+Shift+Enter确认,旧版Excel需要这个操作,新版可自动识别):

=IFERROR(MATCH(TRUE, (A:A=D1)*(MMULT(--(B:Z=E1),ROW(INDIRECT("1:"&COLUMNS(B:Z)))^0)>0), 0), "无匹配")

给你拆解下逻辑:

  • (A:A=D1):先锁定目标国家所在的行,符合条件的行返回TRUE(即1),不符合返回FALSE(即0)
  • MMULT(--(B:Z=E1),ROW(INDIRECT("1:"&COLUMNS(B:Z)))^0):把每行的邮编列里是否匹配目标邮编转成1/0,再通过矩阵求和判断该行有没有至少一个匹配的邮编(结果>0就说明有)
  • 两个条件相乘后,只有同时满足「国家匹配+该行有对应邮编」的行才会得到1,MATCH找到这个行的位置,IFERROR处理无匹配的情况,返回“无匹配”

小贴士:别用整列B:Z,换成你实际的邮编列范围(比如B1:D4),这样计算更快哦。

方法2:适合Excel 365/2021(动态数组版本)

如果你的Excel支持动态数组函数,那可以用更简洁的写法,逻辑更直观:

=XLOOKUP(TRUE, BYROW(A1:D4, LAMBDA(row, INDEX(row,1)=D1 AND COUNTIF(row,E1)>0)), ROW(A1:D4), "无匹配")

解释下:

  • BYROW(A1:D4, LAMBDA(row, ...)):遍历数据区域的每一行,对每一行执行后面的判断
  • INDEX(row,1)=D1 AND COUNTIF(row,E1)>0:判断当前行的第一列(国家)是否等于目标国家,同时该行是否包含目标邮编
  • XLOOKUP找到第一个满足条件的行号,没找到就返回“无匹配”

测试一下你的例子:

  • 丹麦&3700:会返回行号2
  • 丹麦&17191:返回“无匹配”
  • 法国&17191:返回行号3

完美贴合你的需求~

内容的提问来源于stack exchange,提问作者Danny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:59:21