|
- Sub teset2()
- Dim arr, temp()
- Dim arr2, lRow As Long, lCol As Long
- Dim dicName As Object
- Dim dic As Object
- Dim i As Long
- Set dic = CreateObject("scripting.dictionary")
- Set dicName = CreateObject("scripting.dictionary")
- arr = Sheets("sheet1").Range("a6:m" & Sheet1.[a65536].End(xlUp).Row)
- For i = 1 To UBound(arr, 1)
- If Not dicName.exists(arr(i, 2)) Then
- '数组扩容,3列一组
- ReDim Preserve temp(1 To UBound(arr), 1 To (dicName.Count + 1) * 3)
- dicName.Add arr(i, 2), Array(dicName.Count + 1, 0)
- '列号:数量
- End If
- lCol = (dicName(arr(i, 2))(0)) * 3 - 2
- If Not dic.exists(arr(i, 2) & "#" & arr(i, 1)) Then
- dic.Add arr(i, 2) & "#" & arr(i, 1), dicName(arr(i, 2))(1) + 1
- '姓名#日期,行号
- arr2 = dicName(arr(i, 2))
- arr2(1) = arr2(1) + 1
- dicName(arr(i, 2)) = arr2
- End If
- lRow = dicName(arr(i, 2))(1)
- temp(lRow, lCol) = arr(i, 1)
- temp(lRow, lCol + 1) = temp(lRow, lCol + 1) + arr(i, 12)
- temp(lRow, lCol + 2) = temp(lRow, lCol + 2) + arr(i, 13)
- Next
- Application.ScreenUpdating = False
-
- ActiveSheet.UsedRange.ClearContents
- Range("a4").Resize(UBound(arr), UBound(temp, 2)).Value = temp
- ReDim temp(1 To 2, 1 To dicName.Count * 3)
- arr2 = dicName.keys
- For i = 1 To dicName.Count
- temp(2, i * 3 - 2) = "日期"
- temp(2, i * 3 - 1) = "销售额"
- temp(2, i * 3) = "已收"
- Next
- lCol = 0
- For i = 2 To dicName.Count * 3 Step 3
- temp(1, i) = arr2(lCol)
- lCol = lCol + 1
- Next
- Range("a2").Resize(UBound(temp), UBound(temp, 2)).Value = temp
- Application.ScreenUpdating = True
- Set dicName = Nothing
- Set dic = Nothing
- MsgBox "统计完成"
- End Sub
复制代码 用的字典装数组的方法,复杂了,如果同一个人没有日期重复的记录,代码可以更少。
|
|