问题:如图数据,要求统计统计当天消费的人次?
例如: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
解析: 关键语句中已经解析在程序中啦
最后的代码图片形式