Excel 检查是否找到列表中的每个匹配项

Excel check if every occurrence in list is found

我在 Excel 文件中有一个测试列表

List of Tests
   Test A
   Test B
   Test C
   Test D

在另一个文件中,我有一个 ID 列表以及哪些测试与 ID 相关联

ID  Test
25  Test A
25  Test B
25  Test B
25  Test C
25  Test D
26  Test A
26  Test B
26  Test C
26  Test D
27  Test A
27  Test A
27  Test B
27  Test C
28  Test A
28  Test B
28  Test C
28  Test D

我需要创建一个查找,检查 ID 是否包含列表中的每个测试,return如果为真则为 1,否则为 0。

ID  Result
25  1
26  1
27  0
28  1
29  0

我试过了

=SUMPRODUCT( -- ISNUMBER(SEARCH(List,IDs)))=COUNTA(List) 但如果找到任何匹配项,这将 return 为真。

不是最优雅的解决方案,但它有效:

=IF(AND(COUNTIFS(A:A,G2,B:B,K)>0,COUNTIFS(A:A,G2,B:B,K)>0,COUNTIFS(A:A,G2,B:B,K)>0,COUNTIFS(A:A,G2,B:B,K)>0),1,0)

并向下填充

Column A 包含 ID(您的第二个 table) Column B 包含测试(你的第二个 table) Column G 包含唯一 ID 列表(您的第三个 table) Column H 包含上面的公式 Column K 包含测试列表(您的第一个 table)

这是我的解决方案(诚然,我不擅长数组公式,所以...):

使用Ctrl+Shift+Enter输入G25并向下填充

假设数据设置如下:

在单元格 G2 中向下复制的是这个 数组公式:

=--AND(COUNTIFS(A:A,F2,B:B,$D:$D)>0)

数组公式必须用 CtrlShiftEnter 而不是 输入.

公式解释:

数组公式单独而不是共同计算参数。因此,在这种情况下,它正在执行 countifs 以检查列 A = [一个 ID] (F2) 以及列 B 是否是测试列表(D2、D3、D4 和 D5)中的每一个。它分别检查每个 D 单元格,然后 returns 结果的数组(这就是它们被称为数组公式的原因)。如果所有测试都存在,那么您将得到 {TRUE,TRUE,TRUE,TRUE} 并且 AND 语句将 return TRUE。如果任何测试不存在(例如,ID 27 将 return {TRUE,TRUE,TRUE,FALSE} 因为 ID 27 不存在测试 D),那么 AND 将看到 false 和 return 错误的结果。 --(可以读作负负数,官方称为双一元,用于将非数值转换为数字)将AND语句的TRUE/FALSE结果分别转换为1/0。