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。
我在 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。