【问题标题】:Excel check if every occurrence in list is foundExcel检查是否找到列表中的每个匹配项
【发布时间】:2019-01-09 20:55:37
【问题描述】:

我有一个 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 是否在列表中包含每个测试,如果为真则返回 1,否则返回 0。

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

我试过了

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

【问题讨论】:

  • 可以为给定的 ID 重复给定的测试吗?如果否,那么它只是 countif([id here]) = counta([list of tests])
  • 是的。我会编辑显示这个,谢谢。

标签: excel list lookup


【解决方案1】:

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

=IF(AND(COUNTIFS(A$2:A$18,G2,B$2:B$18,K$2)>0,COUNTIFS(A$2:A$18,G2,B$2:B$18,K$3)>0,COUNTIFS(A$2:A$18,G2,B$2:B$18,K$4)>0,COUNTIFS(A$2:A$18,G2,B$2:B$18,K$5)>0),1,0)

然后向下填充

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

【讨论】:

    【解决方案2】:

    假设数据设置如下:

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

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

    数组公式必须用 CtrlShiftEnter 而不是 Enter 来确认。

    公式解释:

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

    【讨论】:

    • 干得好,谢谢!你介意解释一下这个公式吗?我不熟悉数组公式。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多