Google 工作表:COUNTIF 在多列中,但如果同一行中超过 1 个,则只有一次

Google Sheets: COUNTIF in multiple columns but only ONCE if more than 1 in same row

ColA            ColB            ColC            ColD            ColE
DATE            COUNTRY 1       COUNTRY 2       COUNTRY 3       COUNTRY 4
01/xx/2017      INDONESIA       GERMANY         PHILIPPINES     PAKISTAN
01/xx/2017      MOROCCO         MOROCCO         MOROCCO         ITALY
23/xx/2017      USA             UK              NETHERLANDS     MOROCCO
23/xx/2017      MOROCCO         TANZANIA        AUSTRALIA       SWEDEN

我可以使用什么公式来计算一个国家(比如 Morocco)在 ColB:ColE 中出现的次数,但如果在同一行中出现不止一次,则只计算一次?在这种情况下,例如结果应该是 3.

试试这个:

=ArrayFormula(COUNTIF(MMULT(--(B2:E5="MOROCCO"),TRANSPOSE(COLUMN(B2:E5)^0)),">0"))

顺便说一句,可以使用任何逻辑表达式代替 --(B2:E5="MOROCCO")


工作原理

第一步是得到 truefalse 数组:ArrayFormula(B2:E5="MOROCCO")

输出是这样的

true    false    false    false 
true    true     true     false
false   false    false    true
false   false    false    false

然后我们需要将它转换成1 / 0数组。简单的数学运算就可以做到:

ArrayFormula(--(B2:E5="MOROCCO"))

现在的输出是:

    1       0       0       0 
    1       1       1       0
    0       0       0       1
    0       0       0       0

现在我们可以按行添加它们:使用mmult函数。但首先我们需要一列 1 ,其中元素数 = 数组中的列数。要获得它,请使用公式: =ArrayFormula(TRANSPOSE(COLUMN(B2:E6)^0))

结果是:

    1    
    1    
    1    
    1 

最后使用 mmult:=ArrayFormula(MMULT(--(B2:E6="MOROCCO"),TRANSPOSE(COLUMN(B2:E6)^0)))

结果是:

    1    
    3    
    1    
    0

我真的不知道,为什么会这样。就用这个。

最后一步是计算所有 > 0 = 3