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

Google Sheet - Find partial match between ranges / columns

在 Google Sheet 上,给定两个数据范围/列,根据 A 列与 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:$A,MATCH(B2,$A:$A,1),1), B2), index($A:$A,MATCH(B2,$A:$A,1),1), ""))
但它不适用于 arrayformula().

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

我想知道是否有更优雅的方法来进行匹配。

=ARRAYFORMULA(IFERROR(REGEXEXTRACT(B2:B,"^("&TEXTJOIN("|",1,A2:A)&")")))
  • JOIN 块 |(= 或在正则表达式中)
  • 使用正则表达式从房间中提取方块
  • "^" 表示字符串的开始

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

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