Vin*_*ent 5 excel count distinct excel-formula
我正在寻找一个计算公式:不同的计数 + 多个标准 Countifs() 这样做但不包括不同的计数...
这是一个例子。
我有一个表格,我想在上面计算满足多个条件的不同项目(列项目)的数量,一列 A 和 B :A>2 和 B<5。
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
Run Code Online (Sandbox Code Playgroud)
Countifs 以这种方式工作: COUNTIFS([ColumnA], criteria A, [ColumnB], criteria B)
COUNTIFS([ColumnA], > 2 , [ColumnB], < 5)
返回:第 1、2、4、5、8 行 => 计数 = 5
如何添加基于 Item Column 的不同计数函数?:
第 1,2 行在一个独特的项目 QQQ 上
第 4,5 行在一个独特的项目上 TTT
第 8 行是一个独特的项目 XXX
返回计数 = 3
我怎么能数到3?!
谢谢
你可以下载excel文件@Excel文件
丑陋的公式,但它有效。
=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)
Run Code Online (Sandbox Code Playgroud)
我将从标准 IFS 开始:
IF(C2:C10>2,1,0)*IF(D2:D10<5,1,0)
Run Code Online (Sandbox Code Playgroud)
为满足这两个条件的行提供一个由 1 和 0 组成的数组。ARRAY = {1;1;1;1;0;0;0;1;0} 例如。
其中 B2:B10 是 Item 列,countif 公式:
COUNTIF(B2:B10,">"&B2:B10)
Run Code Online (Sandbox Code Playgroud)
返回 {6;6;6;3;3;3;1;1;0},其中数字等于 B2:B10 中按字母顺序小于测试项目值的项目值的数量。
需要向该数组添加 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)
Run Code Online (Sandbox Code Playgroud)
你得到数组 = {7;7;7;4;0;0;0;2;0}。
FREQUENCY(ARRAY,ROW(B2:B10)-ROW(B2))
Run Code Online (Sandbox Code Playgroud)
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,因为它是一个数组公式。
cmd + shift + enter for Mac。
小智 5
较新版本的 Excel 允许以(相对)更简单的方式解决此问题。从概念上讲,它当然更容易遵循和理解。
首先,根据多个条件过滤表(用 * 连接多个):
=FILTER(Table,(Table[Column A]>2)*(Table[Column B]<5))
Run Code Online (Sandbox Code Playgroud)
然后,使用 INDEX 抓取“Item”列:
=INDEX(FILTER(Table,(Table[Column A]>2)*(Table[Column B]<5)),,2)
Run Code Online (Sandbox Code Playgroud)
接下来,过滤唯一条目:
=UNIQUE(INDEX(FILTER(Table,(Table[Column A]>2)*(Table[Column B]<5)),,2))
Run Code Online (Sandbox Code Playgroud)
最后,执行计数:
=COUNTA(UNIQUE(INDEX(FILTER(Table,(Table[Column A]>2)*(Table[Column B]<5)),,2)))
Run Code Online (Sandbox Code Playgroud)
你可以试试这个:
=SUMPRODUCT(1/COUNTIF(B2:B10,B2:B10))
然而,信用到期的信用......我在这里找到了它:
https://exceljet.net/formula/count-unique-values-in-a-range-with-countif
| 归档时间: |
|
| 查看次数: |
24431 次 |
| 最近记录: |