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 结果。这应该比正则表达式更快,但可能不太准确。
在 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 结果。这应该比正则表达式更快,但可能不太准确。