B 列中针对用户 ID x 的唯一项目总数

B 列中针对用户 ID x 的唯一项目总数

尝试了我能想到的所有谷歌建议的方法,将复制并粘贴一些内容以供审查,但简单来说。我有一个文本字符串作为 ID,比如“id-1”,我试图计算某一行也具有此唯一 ID 的列中唯一项的数量

在下表中,我想说用户 id-1 基本上有 3 种水果类型。我给出的数据中也有空白,这似乎破坏了我在谷歌搜索中发现的很多建议。

ID 水果

id-1 苹果

id-1 苹果

id-1 香蕉

id-2 苹果

id-2 香蕉

id-2 苹果

id-1  

id-1  

id-1 梨

尝试过:

=SUMPRODUCT(--(P:P>="id-1"),--(P:P<="id-1"),N:N)

=ArrayFormula(SUM(IF("id-1"=$P:$P,1/(COUNTIFS($P:$P,"id-1",$N:$N<>"",$N:$N<>"")),0)))

=SUM(IF(FREQUENCY(IF(P:P="id=1",N:N),N:N)>0,1))

这不是我的专业领域,因此我非常感激任何指导。使用 Google Sheets,而不是 Excel。

答案1

这应该可行,但我想提醒大家不要使用整个列样式引用,因为数组公式计算需要大量处理。如果您知道要输入的数据范围,请将范围设置为数据的边界。

=ArrayFormula(SUM(IF(FREQUENCY(IF($A:$A="id-1",IF($B:$B<>"",MATCH($B:$B,$B:$B&"",0))),ROW($B:$B)-ROW($B$1)+1),1)))

如果您有大量要查找的 id,则需要更改“id-1”,您可以将这些唯一 ID 放在另一列中,引用该列而不是硬编码的“id-#”,然后保留 $ 锚点并复制公式。

它正在做什么:

IF($A:$A="id-1",

确定范围内的每一行是否与给定的字符串“id-1”匹配

IF($B:$B<>"",

如果是,则仅检查水果列中的非空白单元格

MATCH($B:$B,$B:$B&"",0)

并找到每个字符串第一次出现的行索引

FREQUENCY(IF($A:$A="id-1",IF($B:$B<>"",MATCH($B:$B,$B:$B&"",0))),ROW($B:$B)-ROW($B$1)+1

然后找出有多少种独特的水果

IF(FREQUENCY(IF($A:$A="id-1",IF($B:$B<>"",MATCH($B:$B,$B:$B&"",0))),ROW($B:$B)-ROW($B$1)+1),1)

并将唯一值与上面前三个代码片段中找到的值关联起来,以获得每个唯一值的总数,然后为每个找到的字符串分配一个 1 计数,以标记该字符串是针对当前 ID 找到的。

SUM(IF(FREQUENCY(IF($A:$A="id-1",IF($B:$B<>"",MATCH($B:$B,$B:$B&"",0))),ROW($B:$B)-ROW($B$1)+1),1))

最后,汇总该 ID 的所有找到的字符串

相关内容