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

Google sheets Google Sheet-查找范围/列之间的部分匹配,google-sheets,array-formulas,Google Sheets,Array Formulas,在Google工作表上,给定两个数据范围/列,根据B列上的部分匹配查找A列,如果不匹配,则显示为空。 特别是在我的例子中,给定一个块列表和一个带有块前缀的房间列表,为每个房间标识块 +--------+---------+------------------------+ | Block | Room | Block of Room (Output) | +--------+---------+------------------------+ | AD | AD201 |

在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 | +--------+---------+------------------------+ +--------+---------+------------------------+ |区块|房间|房间区块(输出)| +--------+---------+------------------------+ |公元|公元201年|公元| |AE | AD208/3 | AD| |HG | ADG07 | AD| |公元八世纪| |HSH | BY03 || || HG03 | HG| || HGG01 | HG| || HSH01 | HSH| || HSHG5 | HSH| +--------+---------+------------------------+ 我修改了
search()
index()
match()
如下:
=IFERROR(如果(搜索(索引($A$2:$A,匹配(B2,$A$2:$A,1),1),B2),索引($A$2:$A,匹配(B2,$A$2:$A,1),1),”)

但是它在
arrayformula()
中不起作用

最后我想出了这样一个解决方案
=ARRAYFORMULA(iError(如果(搜索)(VLOOKUP(B2:B,A2:A,1),B2:B),VLOOKUP(B2:B,A2:A,1),”))

我想知道是否有更优雅的方式来匹配

=ARRAYFORMULA(IFERROR(REGEXEXTRACT(B2:B,"^("&TEXTJOIN("|",1,A2:A)&")")))
  • 通过
    |
    (=或在正则表达式中)连接块
  • 使用该正则表达式从房间中提取块
  • “^”表示字符串的开头


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

太棒了!我就是不知道怎么做。但是我可以建议一个小的修改=ARRAYFORMULA(REGEXEXTRACT(B2:B,TEXTJOIN(“|”),1,“^”&A2:a)),因为它必须从第一个字符开始匹配(例如HXHG不应该匹配HG)?@Tom谢谢。补充。还有另一个公式
=ARRAYFORMULA(VLOOKUP(LEFT(B2:B10,2)&"*",A2:A10,1,0))