我需要计算过滤表格列中的唯一值。
公式必须在仅一个单元格(没有添加带标记的列),并且必须非易失性(例如,没有OFFSET)
到目前为止,我有这头野兽:
=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)))
但是由于它的波动而过滤大表时速度非常慢。
要清楚,如果我过滤&#34;物品已购买&#34;在下表中,只包含值 a ,那么我的唯一客户数将是4(customerIDs 1,4,5,6):
提前致谢。
答案 0 :(得分:1)
要计算相应header=None
的唯一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
替换为购买的任何商品。这是一个数组公式,所以按 Ctrl + Shift + Enter 提交它。
要计算购买的所有商品的唯一身份客户数,请在a
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))
根据需要拖放/复制。作为数组公式,按 Ctrl + Shift + Enter 进行提交。见图片以供参考。
答案 1 :(得分:0)
要计算过滤列中的唯一值,请使用此公式
on_exception
如果您的数据位于=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
中输入此公式。输入时应按CTRL + SHIFT + ENTER,因为这是数组公式。
我认为你可以在没有不稳定的偏移公式的情况下实现这一点,但这个公式可能会更快一点。
答案 2 :(得分: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
才能看到行。