在 Google 表格上,给定两个数据范围/列,根据 A 列与 B 列的部分匹配查找 A 列,如果没有匹配则显示为空。
特别是在我的例子中,给定一个 block 列表和一个带有 block 前缀的房间列表,识别每个房间的 block 。
+--------+---------+------------------------+ | 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(搜索(索引($A$2:$A,MATCH(B2,$A$2:$A,1),1), B2), 索引($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), "")))
我想知道是否存在更优雅的方法来进行匹配。
最佳答案
=ARRAYFORMULA(IFERROR(REGEXEXTRACT(B2:B,"^("&TEXTJOIN("|",1,A2:A)&")")))
- 通过
|
(=或在正则表达式中)连接 block - 使用该正则表达式从房间中提取 block
- “^”代表字符串的开头
=ARRAYFORMULA(VLOOKUP(LEFT(B2:B10,2)&"*",A2:A10,1,0))
使用 B 列左侧的两个字符在 A 中查找并返回结果。这应该比正则表达式更快,但可能不太准确。
关于google-sheets - Google Sheet - 查找范围/列之间的部分匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51452825/