Excel - 如何计算列中具有指定条件的唯一记录?

241*_*git 2 excel excel-formula

我有一个如下表:

在此输入图像描述

我想统计每个商店购买了多少张单品?有多少人购买了 2 件及全套商品?结果应该如下所示

在此输入图像描述

在商店“m3”中,账单 300 购买了 2 件商品 C,但在最终结果中仅计为 1。这就是我遇到的问题,因为我尝试 COUNTIFS(A:A, "=m1", B:B, "=A")(然后添加 B 和 C 的计数)获取商店 m1 的单个商品,但无法弄清楚如何区分唯一的账单号码。

请不要介意询问是否需要更多说明,而且我确实更喜欢 Excel 内置函数而不是 VBA。

Sco*_*ner 5

使用 Office 365 公式,我们从基本公式开始查找单身人士:

=BYROW(E2:E4,
    LAMBDA(z,SUM(--(
        BYROW(--(COUNTIFS(A:A,z,C:C,UNIQUE($C$2:$C$8),B:B,{"A","B","C"})>0),
            LAMBDA(a,SUM(a)))=1))))
Run Code Online (Sandbox Code Playgroud)

这将为您提供单一结果:

在此输入图像描述

其他都是该公式的变体:

甲、乙

=BYROW(E2:E4,
    LAMBDA(z,SUM(--(
        BYROW(--(COUNTIFS(A:A,z,C:C,UNIQUE($C$2:$C$8),B:B,{"A","B"})>0),
            LAMBDA(a,SUM(a)))=2))))-J2#
Run Code Online (Sandbox Code Playgroud)

公元前

=BYROW(E2:E4,
    LAMBDA(z,SUM(--(
        BYROW(--(COUNTIFS(A:A,z,C:C,UNIQUE($C$2:$C$8),B:B,{"C","B"})>0),
            LAMBDA(a,SUM(a)))=2))))-J2#
Run Code Online (Sandbox Code Playgroud)

甲、丙

=BYROW(E2:E4,
    LAMBDA(z,SUM(--(
        BYROW(--(COUNTIFS(A:A,z,C:C,UNIQUE($C$2:$C$8),B:B,{"C","A"})>0),
            LAMBDA(a,SUM(a)))=2))))-J2#
Run Code Online (Sandbox Code Playgroud)

全部

=BYROW(E2:E4,
    LAMBDA(z,SUM(--(
        BYROW(--(COUNTIFS(A:A,z,C:C,UNIQUE($C$2:$C$8),B:B,{"A","B","C"})>0),
            LAMBDA(a,SUM(a)))=3))))
Run Code Online (Sandbox Code Playgroud)

我们必须将 添加-J2#到双打的末尾,以便在拥有全部三个时将其删除。它在两个地方都会计算在内。

在此输入图像描述

使用旧版本的 Excel,我们需要使用 SUMPRODUCT、MMULT、INDEX、MODE.MULT 等进行一些练习

=SUMPRODUCT(
    --(MMULT(
        --(COUNTIFS(A:A,E2,C:C,INDEX(C:C,N(IF({1},MODE.MULT(IF(MATCH($C$2:$C$8,C:C,0)=ROW($C$2:$C$8),ROW($C$2:$C$8)*{1,1}))))),B:B,{"A","B","C"})>0),
        {1;1;1})=1))
Run Code Online (Sandbox Code Playgroud)
=SUMPRODUCT(
    --(MMULT(
        --(COUNTIFS(A:A,E2,C:C,INDEX(C:C,N(IF({1},MODE.MULT(IF(MATCH($C$2:$C$8,C:C,0)=ROW($C$2:$C$8),ROW($C$2:$C$8)*{1,1}))))),B:B,{"A","B"})>0),
        {1;1})=2))-J2
Run Code Online (Sandbox Code Playgroud)
=SUMPRODUCT(
    --(MMULT(
        --(COUNTIFS(A:A,E2,C:C,INDEX(C:C,N(IF({1},MODE.MULT(IF(MATCH($C$2:$C$8,C:C,0)=ROW($C$2:$C$8),ROW($C$2:$C$8)*{1,1}))))),B:B,{"B","C"})>0),
        {1;1})=2))-J2
Run Code Online (Sandbox Code Playgroud)
=SUMPRODUCT(
    --(MMULT(
        --(COUNTIFS(A:A,E2,C:C,INDEX(C:C,N(IF({1},MODE.MULT(IF(MATCH($C$2:$C$8,C:C,0)=ROW($C$2:$C$8),ROW($C$2:$C$8)*{1,1}))))),B:B,{"A","C"})>0),
        {1;1})=2))-J2
Run Code Online (Sandbox Code Playgroud)
=SUMPRODUCT(
    --(MMULT(
        --(COUNTIFS(A:A,E2,C:C,INDEX(C:C,N(IF({1},MODE.MULT(IF(MATCH($C$2:$C$8,C:C,0)=ROW($C$2:$C$8),ROW($C$2:$C$8)*{1,1}))))),B:B,{"A","B","C"})>0),
        {1;1;1})=3))
Run Code Online (Sandbox Code Playgroud)

其中每一个都将放置在各自列的第一行中,并在退出编辑模式时使用 Ctrl-Shift-Enter 而不是 Enter 来确认为数组公式。

他们将被拖拽/复制到列中。