CountifS +多个标准+不同的计数

时间:2016-06-23 12:47:55

标签: excel excel-formula count distinct

我正在寻找一个公式计算:不同的计数+多个标准 Countifs()做到了,但不包括明显的计数...

这是一个例子。

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

Image description here

enter 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],标准A,[ColumnB],标准B)

COUNTIFS([ColumnA],> 2,[ColumnB],< 5)

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

如何根据项目列添加不同的计数功能?

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

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

第8行位于唯一商品XXX

返回Count = 3

我怎么算3?!

由于

您可以下载excel文件@ Excel file

3 个答案:

答案 0 :(得分:4)

丑陋的公式,但它有效。

=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的数组。对于你的例子,A​​RRAY = {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))

行(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以上的值添加了数组值]

(ARRAY)&gt; 0)* 1 = {0; 0; 1; 0; 1; 0; 0; 1; 0; 0}

SUM this = 3。

ctrl + shift + enter,因为它是一个数组公式。

cmd + shift +输入mac。

答案 1 :(得分:1)

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

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

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

screenshot1

然后,使用INDEX获取“项目”列:

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

screenshot2

下一步,过滤唯一条目:

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

screenshot3

最后,进行计数:

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

screenshot4

答案 2 :(得分:0)

你可以试试这个:

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

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

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