首页 > 解决方案 > Google表格:检查每一行的另一列中是否存在任何值

问题描述

我有一个“优先”客户的列列表:

优先事项
一种
C
D

另外,我有一系列不同客户购买的产品。

产品 评估 客户 1 客户 2 ... 客户 n
真的 C 小号 ...
错误的 ü ... Z
喇叭 真的 一种 ...

我想使用ArrayFormula来计算列“评估”,该列检查客户 1 - 客户 n 范围内的每一行是否存在“优先级”列中的客户。

目前,我正在为每个客户的每一行使用 SEARCH:

=IF(A2="","",IF(IFERROR(search('Priority'!$A$2,G2),0)
+IFERROR(search('Priority'!$A$3,G2),0)
+IFERROR(search('Priority'!$A$4,G2),0)
+IFERROR(search('Priority'!$A$5,G2),0)
...

其中 G2 是我的产品表的一行中的单个单元格,客户(A、T、U...)的逗号分隔值和 $A$3、$A$4、$A$5... 是我的优先客户在单独的列中。我将这个公式向下拖动以评估每一行。我想帮助提出一个更有效的公式,不需要拖到底部(arrayformula 是理想的)。

希望这很清楚 - 谢谢!

标签: google-sheetsarray-formulas

解决方案


试试这个(假设您的优先级列在工作表优先级!A:A):

=arrayformula({"Evaluate";if(A2:A<>"",regexmatch(query(Priority!A2:A,"",9^9),regexreplace(trim(flatten(query(transpose(C2:E),"",9^9)))," ","|")),)})

在此处输入图像描述

D2:F根据您拥有的客户列数增加范围。

可能是您的客户名称带有空格,因此为避免部分正则表达式匹配,您可以尝试:

=arrayformula({"Evaluate";if(A2:A<>"",regexmatch(char(9998)&regexreplace(regexreplace(trim(query(regexreplace(Priority!A2:A," ",char(9999)),"",9^9))," ",char(9998)),char(9999)," ")&char(9998),char(9998)&regexreplace(regexreplace(trim(flatten(query(transpose(regexreplace(C2:E," ",char(9999))),"",9^9)))," ",char(9998)&"|"&char(9998)),char(9999)," ")&char(9998)),)})

在此处输入图像描述


推荐阅读