CountifS + 多个条件 + 不同计数

问题描述 投票:0回答:4

我正在寻找一个计算公式:不同计数+多个条件 Countifs() 可以做到这一点,但不包括不同的计数...

这是一个例子。

我有一个表,我想计算满足 A 列和 B 列多个条件的不同项目(列项目)的数量:A>2 和 B<5.

Image description here

Line  Item  ColA  ColB
1     QQQ    3     4
2     QQQ    3     3
3     QQQ    5     4
4     TTT    4     4
5     TTT    2     3
6     TTT    0     1
7     XXX    1     2
8     XXX    5     3
9     zzz    1     9

Countifs 的工作方式如下:COUNTIFS([ColumnA], criteria A, [ColumnB], criteria B)

COUNTIFS([列 A], > 2 , [列 B], < 5)

返回:第 1,2,4,5,8 行 => 计数 = 5

如何根据 Item Column 添加重复计数功能? :

第 1,2 行是在一个独特的项目 QQQ 上

第 4,5 行位于一个独特的项目 TTT

第 8 行位于一个独特的项目 XXX 上

返回计数 = 3

我怎么数到3?!

谢谢

您可以下载Excel文件@ Excel文件

excel excel-formula count distinct
4个回答
10
投票

较新版本的 Excel 允许以(相对)更简单的方式解决此问题。从概念上讲,它当然更容易遵循和理解。

首先,根据多个条件过滤表格(用 * 连接多个):

=FILTER(Table,(Table[Column A]>2)*(Table[Column B]<5))

然后,使用 INDEX 抓取“Item”列:

=INDEX(FILTER(Table,(Table[Column A]>2)*(Table[Column B]<5)),,2)

接下来,过滤唯一条目:

=UNIQUE(INDEX(FILTER(Table,(Table[Column A]>2)*(Table[Column B]<5)),,2))

最后,进行计数:

=COUNTA(UNIQUE(INDEX(FILTER(Table,(Table[Column A]>2)*(Table[Column B]<5)),,2)))


6
投票

丑陋的公式,但它有效。

=SUM(((FREQUENCY(IF(C2:C10>2,1,0)*IF(D2:D10<5,1,0)*(COUNTIF(B2:B10,">"&B2:B10)+1),ROW(B2:B10)-ROW(B2)))*(ROW(B2:B11)-ROW(B2))>0)*1)

我将从 IFS 标准开始:

IF(C2:C10>2,1,0)*IF(D2:D10<5,1,0)

为满足这两个条件的行提供一个由 1 和 0 组成的数组。例如,ARRAY = {1;1;1;1;0;0;0;1;0}。

其中B2:B10为Item列,countif公式:

COUNTIF(B2:B10,">"&B2:B10)

返回 {6;6;6;3;3;3;1;1;0},其中数字等于 B2:B10 中按字母顺序排列的项目值的数量小于测试项目值的数量。

  • QQQ 转到 6 [3"TTT", 2"XXX", 1"zzz"]
  • TTT 转到 3 [2"XXX", 1"zzz"]
  • XXX 转到 1 [1"zzz"]
  • zzz 变为 0 [0 小于“zzz”]

需要向该数组添加 1 以确保没有 0 值: {7;7;7;4;4;4;2;2;1}.

因此,当将条件和 countif 语句相乘时:

(IF(C2:C10>2,1,0)*IF(D2:D10<5,1,0)*(COUNTIF(B2:B10,">"&B2:B10)+1)

您得到 ARRAY = {7;7;7;4;0;0;0;2;0}。

FREQUENCY(ARRAY,ROW(B2:B10)-ROW(B2))

ROW(B2:B10)-ROW(B2) 将频率仓设置为 {0;1;2;3;4;5;6;7;8}。因此,频率公式的输出为 {4;0;1;0;1;0;0;3;0;0},其中最后一个 0 代表所有大于 8 的值。

((ROW(B2:B11)-ROW(B2)>0)*1) 等于 {0;1;1;1;1;1;1;1;1;1}。将 ARRAY 乘以该值会删除开头的 0 计数:ARRAY = {0;0;1;0;1;0;0;3;0;0}。 [注意:B11 是最低项列单元格+1,因为从频率公式中添加了超过 8 的值的数组值]

(数组)>0)*1 = {0;0;1;0;1;0;0;1;0;0}

求和 = 3。

ctrl + shift + Enter,因为它是数组公式。

对于 Mac,cmd + Shift + Enter。


0
投票

你可以试试这个:

=SUMPRODUCT(1/COUNTIF(B2:B10,B2:B10))

信用到期,但是......我在这里找到了它:

https://exceljet.net/formula/count-unique-values-in-a-range-with-countif


0
投票

如何在过滤器或索引阶段添加 iferror

=COUNTA(UNIQUE(INDEX(FILTER(表,(表[A列]>2)*(表[B列]<5)),,2)))

=IFERROR(INDEX(FILTER(TableABC, (TableABC[ID]=xxx)*(TableABC[日期]=ddd)),,2), "")

© www.soinside.com 2019 - 2024. All rights reserved.