计算过滤表中的唯一值而不会造成波动

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

我需要计算 filtered 表的列中的唯一值。

公式必须位于仅一个单元格中(不得添加带有标志的列),并且必须是非易失性(例如无偏移)

到目前为止,我已经拥有了这只野兽:

=IF(COUNTA(A1:A3043) = SUBTOTAL(3, A1:A3043), SUMPRODUCT(1 * (A1:A3043 <> A2:A3044)),SUM(IF(FREQUENCY(IF(SUBTOTAL(3,OFFSET(A1,ROW(A1:A3043)-ROW(A1),0,1)),MATCH(A1:A3043,A1:A3043,0)),ROW(A1:A3043)-ROW(A1)+1)>0,1)))

但是由于其波动性,在过滤大表时非常慢。

需要明确的是,如果我在下表中过滤“购买的商品”,仅包含值 a,那么我的唯一客户计数将为 4(客户 ID 1、4、5、6):

提前致谢。

excel unique formula
4个回答
1
投票

要获取相应

Customer
的唯一
Item Purchased
的计数,请使用以下公式

=SUM(IF("a"=$B$2:$B$12, 1/(COUNTIFS($B$2:$B$12, "a", $A$2:$A$12, $A$2:$A$16)), 0))

=SUM(--(FREQUENCY(IF($B$2:$B$12="a",MATCH($A$2:$A$12,$A$2:$A$12,0)),ROW($A$2:$A$12)-ROW(A2)+1)>0))

其中,

A2:B12
是数据范围,并将
a
替换为购买的任何商品。这是一个数组公式,因此请按 Ctrl+Shift+Enter 提交。


要获取所有购买商品的唯一客户数量,请在

Cell D2

中输入以下公式
=IFERROR(INDEX($B$2:$B$16,MATCH(0,INDEX(COUNTIF($D$1:D1,$B$2:$B$16),0,0),0)),"")

根据需要向下拖动/复制。

然后在

Cell E2
中输入下面的数组公式

=SUM(--(FREQUENCY(IF($B$2:$B$16=D2,MATCH($A$2:$A$16,$A$2:$A$16,0)),ROW($A$2:$A$16)-ROW(A2)+1)>0))

=SUM(IF(D2=$B$2:$B$16, 1/(COUNTIFS($B$2:$B$16, D2, $A$2:$A$16, $A$2:$A$16)), 0))

根据需要向下拖动/复制。作为数组公式,请按 Ctrl+Shift+Enter 提交。请参阅图片以供参考。


0
投票

要计算filtered列中的唯一值,请使用此公式

=SUM(IF(FREQUENCY(IF(SUBTOTAL(3,OFFSET(A2,ROW(A2:A35)-ROW(A2),,1)),IF(A2:A35<>"",MATCH("~"&A2:A35,A2:A35&"",0))),ROW(A2:A35)-ROW(A2)+1),1))

如果您的数据位于

A:B
列中,请在单元格
D1
中输入此公式。输入时应按 CTRL+SHIFT+ENTER,因为这是数组公式。

我认为如果没有不稳定的偏移公式,你就无法实现这一目标,但这个公式可能会更快一点。


0
投票

你可以尝试使用

=SUMPRODUCT((($A$2:$A$12<>"")*SUBTOTAL(3,OFFSET($A$2,ROW($A$2:$A$12)-MIN(ROW($A$2:$A$12)),0)))/COUNTIFS(A2:A12,A2:A12,B2:B12,B2:B12))

这将计算过滤列表中的所有唯一值。您遇到的问题是您需要

OFFSET
才能使行可见。


0
投票

@Tom 的答案足够接近,但是当只显示一个项目时,它没有正确回答...如果我没有显示过滤器中的最后一项,它会有一些小数,所以这里是一个固定版本:

=SUMPRODUCT(((表13[人]<>"")*SUBTOTAL(3,OFFSET(表13[[#Headers],[人]],ROW(表13[人])-MIN(ROW(表13[人]) ))+1,0)))/COUNTIFS(表13[人],表13[人]))

注意加 1 来固定小数。 我也不知道他为什么看B栏。

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