我最初的想法是:
=SUM(MIN (1,COUNTIFS(Sheet1!A1:A18,Sheet2!$A1,Sheet1!B1:B18,{"za","zc","zd"}))
但我无法测试 MIN 是否能正确应用于 COUNTIFS 结果数组。 ;-)
已编辑:MIN 函数占用 COUNTIFS 数组中的至少 1 个或所有项目,而不是 COUNTIFS 数组中的至少 1 个和每个项目,这是我所担心的。使用
=MIN(COUNTIFS(Sheet1!A$1:A$18,Sheet2!$A1,Sheet1!B$1:B$18,"za"),1)+MIN(COUNTIFS(Sheet1!A$1:A$18,Sheet2!$A1,Sheet1!B$1:B$18,"zc"),1)+MIN(COUNTIFS(Sheet1!A$1:A$18,Sheet2!$A1,Sheet1!B$1:B$18,"zd"),1)
将获得预期的结果。它有点笨拙,但比数组公式更简单。如果你想要一个数组公式,你可以使用:
=SUM(FREQUENCY(IFERROR(MATCH({"za","zc","zd"},(IF(Sheet1!$A$1:$A$18=$A5,Sheet1!$B$1:$B$18)),0),""),IFERROR(MATCH({"za","zc","zd"},(IF(Sheet1!$A$1:$A$18=$A5,Sheet1!$B$1:$B$18)),0),"")))
这使用 FREQUENCY 函数获取一组值,并查看另一组值中有多少项落在每个数据范围内。由于您需要文本而不是数字,因此我们使用 MATCH 函数来找出该值第一次出现在列表中的时间,如果没有,则使用 IFERROR 函数返回 ""。 (我们只需要第一次出现,因为您不想知道出现了多少次)。由于它是文本,我们对 FREQUENCY 的两个参数使用相同的输入。
因此,如果您需要更改要查找的值或要搜索的范围,请务必同时更改两者!或者,您可以在某处列出值,例如在 F1:F3 中,并为此创建一个命名范围,另一个用于 A1:A18,另一个用于 B1:B18。您的公式将如下所示:
=SUM(FREQUENCY(IFERROR(MATCH(SearchValues,(IF(colA=$A2,colB)),0),""),IFERROR(MATCH(SearchValues,(IF(colA=$A2,colB)),0),"")))
然后,您只需更改命名范围定义,您的公式就会更新。 :-)
注意:由于这是一个数组公式,因此您必须通过按 CTRL+SHIFT+ENTER 而不是仅按 ENTER 来关闭单元格。当您查看公式栏时,您应该会看到
{=SUM(FREQUENCY(IFERROR(MATCH(SearchValues,(IF(colA=$A2,colB)),0),""),IFERROR(MATCH(SearchValues,(IF(colA=$A2,colB)),0),"")))}
自己输入花括号是行不通的。 ;-)