如何在Google Sheets/Excel中用城市列表过滤含指定城市的地址?
筛选包含B列任意城市的A列地址
问题描述
需要从A列的地址数据中,筛选出包含B列任意一个城市名称的地址。示例数据如下:
| 地址(A列) | 城市(B列) |
|---|---|
| 900 Rancho Diego Pkwy, Buellton, CA 92028 | Ventura |
| 3850, Toepperwein Rd, Antonio, TX 78264 | San Antonio |
| 3250 El Camino Real, Atascadero, CA 93444 | Buellton |
| 2340 Palma Dr, Ventura, CA 93090 | New York |
| Valley Rd, Santa Maria, CA 93420 |
预期输出:
900 Rancho Diego Pkwy, Buellton, CA 92028
2340 Palma Dr, Ventura, CA 93090
现有公式失效原因
你尝试的几个公式逻辑均不符合需求:
=FILTER(A2:A, REGEXMATCH(A2:A, B2:B)):该公式是逐行配对检查(A2对应B2,A3对应B3),而非检查A列地址是否包含B列所有城市中的任意一个,无法匹配跨行的城市与地址。=FILTER(A2:A, MATCH(A2:A, B2:B,0))和=FILTER(A2:A, COUNTIF(B2:B, A2:A)):这两个函数都是精确匹配,要求A列地址与B列城市完全一致,但你的需求是地址中包含城市名称(模糊匹配),因此不适用。
正确解法
Google Sheets 公式
=FILTER(A2:A, REGEXMATCH(A2:A, TEXTJOIN("|", TRUE, B2:B)))
逻辑说明:
TEXTJOIN("|", TRUE, B2:B):将B列非空的城市名称用|拼接成正则表达式的OR模式(例如Ventura|San Antonio|Buellton|New York),TRUE参数会自动忽略B列的空单元格。REGEXMATCH(A2:A, ...):检查A列每个地址是否包含拼接后的任意一个城市名称。FILTER(A2:A, ...):返回所有符合匹配条件的地址。
Excel 365 公式
Excel中无REGEXMATCH函数,可使用SEARCH结合ISNUMBER实现:
=FILTER(A2:A, ISNUMBER(SEARCH(TEXTJOIN("|", TRUE, B2:B), A2:A)))
内容的提问来源于stack exchange,提问作者EagleEye
相关产品推荐
相关产品推荐

