今晚突然收到微信平台给予的原创声明功能,所以心血来潮,想试试这个新增加的功能!

今天我们来学学多条件汇总,为以后的字典嵌套和数组嵌套打下基础。先看数据:
要求:
求每个商圈、每个配送员所送外卖的菜品总价、折后总价以及折扣金额总和。
首先,我们来个数据透视表解法,直接上结果吧,这毕竟不是我要说的重点:
当然,这是一个表,用数据透视表来操作比较简单。如果多表呢?也许大家会说,多表也可以透视啊。那如果说有100张表、1000张表呢!!!

所以,还是老老实实地写代码吧。
为了方便大家复制代码,这次我将不使用截图,直接复制代码!
Sub 多条件汇总()
Dim arrData As Variant
Dim lLastrow As Long ‘数据多,所以用了长整型
Dim i As Long
Dim n As Integer '结果一般都不会多,所以用了短整型
Dim k As Integer
Dim arrResult(1 To 10000, 1 To 5) '定义一个你认为足够大的结果数组
Dim strNumber As String
Dim d As New Dictionary
Dim wbk As Workbook
'***** 开始 ****
lLastrow = Range("a" & Rows.Count).End(xlUp).Row
If lLastrow > 1 Then
arrData = Range("a2:e" & lLastrow).Value
For i = 1 To UBound(arrData)
strNumber = arrData(i, 1) & "|" & arrData(i, 2) '多条件之间用间隔符连接
If d.Exists(strNumber) = False Then
n = n + 1 '记录出现的第几个商圈&配送员---双条件
d(strNumber) = n
arrResult(n, 1) = arrData(i, 1) '商圈
arrResult(n, 2) = arrData(i, 2) '配送员
arrResult(n, 3) = arrData(i, 3) '菜品总价
arrResult(n, 4) = arrData(i, 4) '折后总价
arrResult(n, 5) = arrData(i, 5) '折扣金额
Else
k = d(strNumber) '取得出现的位置
arrResult(k, 3) = arrResult(k, 3) + arrData(i, 3) '菜品总价
arrResult(k, 4) = arrResult(k, 4) + arrData(i, 4) '折后总价
arrResult(k, 5) = arrResult(k, 5) + arrData(i, 5) '折扣金额
End If
Next i
Set wbk = Workbooks.Add
With wbk.ActiveSheet
.Range("a1:e1").Value = Array("商圈", "配送员", "菜品总价", "折后总价", "折扣金额")
.Range("a2").Resize(n, 5) = arrResult
End With
End If
End Sub
代码我就不解释了。大家复制下去按F8调试吧。学习VBA,只能是不断写,才能进步!
