【问题标题】:Count rows containing specific value based on multiple criteria根据多个条件计算包含特定值的行
【发布时间】:2015-08-16 13:05:32
【问题描述】:

我正在寻找一种更好的方法来完成以下任务。 我有 2 张桌子。表 1 包含我要查找以计算行数的值:

      A
 1    ID    
 2    a
 3    b
 4    c
 5    d
 6    e
 7    f

表2包含按行排列的数据:

       A       B     C     D     E     F     G
 1   FileNo Data1 Data2 Data3 Data4 Data5 Data6
 2    w1       a     b     a     b     a     b
 3    w1       a     b     a     b     e     f
 4    w2       c     d     c     d     e     f
 5    w1       c     d     c     d     a     b
 6    w1       b     c     b     c     e     f
 7    w2       a     b     a     d     a     b
 8    w3       c     d     c     d     e     f

我需要计算以“w1”开头并包含值“a”的行数(然后是“b”和“c”等,然后对于以“w2”开头的行也是如此)。 蛮力的方式,我如何看待它,是在每一行中使用 COUNTIF 根据行中值的存在来获得 1 或 0。然后使用 SUMPRODUCT 根据 FileNo 标准和那些 1/0 来计算行数。问题是上面只是一个例子。实际上,表 1 中有大约 40 个值,表 2 中有数千个值。在数千行中使用 40 列和 COUNTIF 看起来很庞大。我相信有更优雅的方法来解决这个问题。

【问题讨论】:

标签: excel-formula


【解决方案1】:

您将不得不求助于 volatile OFFSET¹ function 来遍历行以查找是否存在 wsx 值以及至少出现一次 a、b、c , d, ef.

      

J2中的数组公式是,

=SUM(IF($A$2:$A$9999=J$1, SIGN(COUNTIFS(OFFSET($A$2, ROW($1:$9998)-1, 1, 1, 6), $I2))))

数组公式需要用 Ctrl+Shift+Enter↵ 完成。一旦正确输入第一个单元格,它们就可以像任何其他公式一样被填充或向下或向右复制。将 J2 向右填充到 L2,然后将 J2:L2 向下填充到 J7:L7。

在为您自己的目的转录此公式时,请注意虽然A2:9999ROW(1:9998) 由一行交错,但它们的大小相同,这一点很重要。 ROW(...) 应始终从 1 开始,但行数与 A 列中的范围相同。您正在寻找 A2:A9999 内的位置,而不是工作表上的物理行号。

我已尝试对来自 ws1 的结果进行颜色匹配,以便您可以轻松地从该标准对中识别工作结果。

¹OFFSET 被认为是一个 volatile 函数,每当工作簿中的任何内容发生变化时都会重新计算。

【讨论】:

  • @Abyrvalg - 顺便说一句,我很抱歉。我今天早些时候回答了一个几乎相同的问题,该问题依赖于单一标准,最初将您的问题标记为潜在重复。第二个标准的添加使这个问题变得非常不同,足以保证自己发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 2021-08-24
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多