【问题标题】:Google Sheet - Find partial match between ranges / columnsGoogle Sheet - 查找范围/列之间的部分匹配
【发布时间】:2018-07-21 04:29:09
【问题描述】:

在 Google 表格中,给定两个范围/列的数据,根据列 B 的部分匹配查找列 A,如果不匹配则显示为空。
特别是在我的情况下,给定一个街区列表和一个带有街区前缀的房间列表,确定每个房间的街区。

+--------+---------+------------------------+
|块 |房间 |房间(输出) |
+--------+---------+------------+
|广告 | AD201 |广告 |
|自动曝光 | AD208/3 |广告 |
|汞 | ADG07 |广告 |
| HH | ADUG8 |广告 |
| HSH | BY03 | |
| | HG03 |汞 |
| | HGG01 |汞 |
| | HSH01 | HSH |
| | HSHG5 | HSH |
+--------+---------+------------+

我修改了search()index()match(),如下所示: =IFERROR(if(search(index($A$2:$A,MATCH(B2,$A$2:$A,1),1), B2), index($A$2:$A,MATCH(B2,$A$2:$A,1),1), ""))
但它不适用于arrayformula()

最后我想出了这样的解决方案
=ARRAYFORMULA( iferror(IF(SEARCH( VLOOKUP(B2:B,A2:A,1), B2:B), VLOOKUP(B2:B,A2:A,1), "")))

我想知道是否存在更优雅的匹配方式。

【问题讨论】:

    标签: google-sheets array-formulas


    【解决方案1】:
    =ARRAYFORMULA(IFERROR(REGEXEXTRACT(B2:B,"^("&TEXTJOIN("|",1,A2:A)&")")))
    
    • 通过|(= 或正则表达式) 加入块
    • 使用该正则表达式从房间中提取块
    • “^”表示字符串的开始

    =ARRAYFORMULA(VLOOKUP(LEFT(B2:B10,2)&"*",A2:A10,1,0))
    

    使用 Col B 的 LEFT 中的两个字符在 A 中查找并返回结果。这应该比正则表达式更快,但可能不太准确。

    【讨论】:

    • 太棒了!我只是不知道该怎么做。但是我可以建议一个小的修改 =ARRAYFORMULA(REGEXEXTRACT(B2:B,TEXTJOIN("|",1,"^"&A2:A))) 因为它必须从第一个字符开始匹配(例如 HXHG 不应该匹配HG)?
    • @Tom 谢谢。添加。连同另一个公式
    猜你喜欢
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多