首页 > 解决方案 > 如何在 Google 表格的过滤器中使用 REGEXMATCH 和 SPLIT?

问题描述

我有两个数据集:

这两组之间的共同元素是发票 ID列(数据集 1 中的列 A 和数据集 2 中的列 E)。但是,在数据集 1 中,此数据存储为数组,而在数据集 2 中,数组的每个值都显示在自己的行中。

目标

我希望能够使用来自数据集 1 的数据来丰富数据集 2(cols F 和 G),但是,我无法完成这项工作。我试过使用=FILTER(A3:A7, REGEXMATCH(TEXT(E3, "0"), TEXT(ARRAYFORMULA(SPLIT(A3:A7, ",")), "0"))),但这给了我以下错误:“过滤器范围必须是单行或单列。”。我知道这是由于该SPLIT功能而发生的,但我不知道该怎么做。

该表可以在这里找到。

任何帮助都非常感谢。

标签: google-sheetsspreadsheetarray-formulas

解决方案


我在您的示例电子表格中添加了一个新工作表(“Erik 帮助”)。以下单个公式将产生 F3:G 的所有结果 ...

=ArrayFormula(IF(E3:E="",,VLOOKUP("*"&"%"&E3:E&"%"&"*",{REGEXREPLACE("%"&A3:A&"%","[,\s]","%"),B3:C},{2,3},FALSE)))

%符号仅用于将 Col A 和 Col E 中的每个元素“填充”为独特的东西,以区分搜索词1,例如14(即,VLOOKUP将搜索%1%而不是 just 1,不会在 中找到%14%,等等。 ) 该%符号无特殊含义;它可能是我们确信通常不会出现在 Col A 或 Col E 中的任何独特角色。

REGEXREPLACE%除了前面和后面的位置,用这个特殊字符替换所有逗号和空格。1, 14因此,此时工作表会看到类似的 Col-A 列表为%1%%14%.

The*是一个通配符,附加在搜索词的前后,这将允许在包含列表的 Col A 的元素中找到它。

{2,3}返回来自虚拟数组的第二列和第三列(例如)的结果。


推荐阅读