Excel函数与VBA多条件统计不重复出现的次数

2022-10-25 15:12:43 浏览数 (1)

问题:如图数据,要求统计统计当天消费的人次?

例如:A00011在1日来消费,他只来消费了一次,他消费了两个产品,计1人次

函数方法

=SUM(IF(MATCH($B$2:$B$41&$A$2:$A$41,$B$2:$B$41&$A$2:$A$41,0)=ROW($A$1:$A$40),1,0)*($B$2:$B$41=G1))

数组公式

解析:

1.MATCH是查找B&A的那个数据在$B$2:$B$41&$A$2:$A$41列中首次出现的列数,

{1;1;3;3;5;5;7;7;9;9;11;11;13;13;15;15;17;17;19;19;21;21;23;23;25;25;27;27;29;29;31;31;33;33;35;35;37;37;39;39}

2. MATCH($B$2:$B$41&$A$2:$A$41,$B$2:$B$41&$A$2:$A$41,0)=ROW($A$1:$A$40)

如果出现的位置等于A1:A40的行数为True,否则为False

{TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE}

3. IF(MATCH($B$2:$B$41&$A$2:$A$41,$B$2:$B$41&$A$2:$A$41,0)=ROW($A$1:$A$40),1,0)

如果为True,取1,False取0

4.(前面的值)与($B$2:$B$41=G1)相乘,再Sum

VBA方法

Sub 多条件统计次数()

    Dim d As Object

    Set d = CreateObject("scripting.dictionary")

    Range("G12:L12").ClearContents

    arr = Range("G11:L12")

    brr = Range("A2:B" & Cells(Rows.Count, 1).End(xlUp).Row)

    For i = 1 To UBound(arr, 2)

        For j = 1 To UBound(brr)

            If brr(j, 2) = arr(1, i) And Not d.exists(brr(j, 1)) Then

'            如果等于日期并且不存在在字典中就增加进字典并且计数的 1

                     d(brr(j, 1)) = ""

                     arr(2, i) = arr(2, i) 1

            End If

        Next j

    Next i

    Range("G11").Resize(UBound(arr, 1), UBound(arr, 2)) = arr

End Sub

解析: 关键语句中已经解析在程序中啦

最后的代码图片形式

0 人点赞