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

标签 google-sheets array-formulas

在 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/

相关文章:

javascript - 找不到方法格式日期((类),字符串,对象)。 (第 54 行,文件 "Code")

google-apps-script - 使用 Google Apps 脚本将图像作为 BlobSource 插入工作表

javascript - Google 表格中的 Unpivot - 多个标题列和行

Apache POI 和 SUMPRODUCT 公式评估

google-sheets - Google 表格公式匹配多个条件

excel - 条件总和

javascript - Google 表格将一个单元格更改为另一个单元格

laravel - 无法让 Laravel Sheets 扩展工作

sorting - Google 表格,根据单列中的唯一值对表格进行排序

regex - 谷歌表格正则提取每个单词的第一个字母