Google表格-查找范围/列之间的部分匹配

时间:2018-07-21 04:29:10

标签: google-sheets array-formulas

在Google表格上,给定两个范围/数据列,根据列B上的部分匹配来查找列A,如果没有匹配,则显示为空。
在我的情况下,特别是给定一个块列表和一个带有块前缀的房间列表,请为每个房间标识该块。

+--------+---------+------------------------+
| Block  |  Room   | Block of Room (Output) |
+--------+---------+------------------------+
| AD     | AD201   | AD                     |
| AE     | AD208/3 | AD                     |
| HG     | ADG07   | AD                     |
| HH     | ADUG8   | AD                     |
| HSH    | BY03    |                        |
|        | HG03    | HG                     |
|        | HGG01   | HG                     |
|        | 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), "")))

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

1 个答案:

答案 0 :(得分:2)

=ARRAYFORMULA(IFERROR(REGEXEXTRACT(B2:B,"^("&TEXTJOIN("|",1,A2:A)&")")))
  • JOIN用|(=或正则表达式)阻止
  • 使用该正则表达式从房间提取块
  • “ ^”代表字符串的开头

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

使用列B的LEFT中的两个字符在A中查找并返回结果。这应该比正则表达式更快,但准确性可能会稍差一些。