在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), "")))
我想知道是否存在更优雅的匹配方法。
答案 0 :(得分:2)
=ARRAYFORMULA(IFERROR(REGEXEXTRACT(B2:B,"^("&TEXTJOIN("|",1,A2:A)&")")))
|
(=或正则表达式)阻止=ARRAYFORMULA(VLOOKUP(LEFT(B2:B10,2)&"*",A2:A10,1,0))
使用列B的LEFT中的两个字符在A中查找并返回结果。这应该比正则表达式更快,但准确性可能会稍差一些。