|
参考
Sub 双字典汇统计()
Dim arr, brr
Set d = CreateObject("scripting.dictionary")
Set d1 = CreateObject("scripting.dictionary")
arr = Sheet21.Range("a3").CurrentRegion '数据装入数组
For i = 4 To UBound(arr)
tjz = arr(i, 10) '条件
If d.Exists(tjz) Then '字典里存在的时候
brr = d(tjz) '字典关键字对应的条目的值装入结果数组(可以为数组)
If Not d1.Exists(arr(i, 2) & tjz) Then '结果条件
brr(2) = brr(2) & "/" & arr(i, 2) '要汇总的列
d1(arr(i, 2) & tjz) = "" '结果去重字典
End If
If Not d1.Exists(arr(i, 3) & tjz) Then '结果条件
brr(5) = brr(5) & "/" & arr(i, 3) '要汇总的列
d1(arr(i, 3) & tjz) = "" '结果去重字典
End If
If Not d1.Exists(arr(i, 6) & tjz) Then '结果条件
brr(4) = brr(4) & "/" & arr(i, 6) '要汇总的列
d1(arr(i, 6) & tjz) = "" '结果去重字典
End If
If Not d1.Exists(arr(i, 7) & tjz) Then '结果条件
brr(6) = brr(6) & "/" & arr(i, 7) '要汇总的列
d1(arr(i, 7) & tjz) = "" '结果去重字典
End If
If Not d1.Exists(arr(i, 11) & tjz) Then '结果条件
brr(9) = brr(9) & "/" & arr(i, 11) '要汇总的列
d1(arr(i, 11) & tjz) = "" '结果去重字典
End If
If Not d1.Exists(arr(i, 14) & tjz) Then '结果条件
brr(12) = brr(12) & "/" & arr(i, 14) '要汇总的列
d1(arr(i, 14) & tjz) = "" '结果去重字典
End If
brr(7) = brr(7) + arr(i, 8)
brr(8) = brr(7) + arr(i, 9)
brr(10) = brr(10) + arr(i, 12)
brr(11) = brr(11) + arr(i, 13)
Else
ReDim brr(1 To 12) '声明动态数组 装符合条件的每列数据
m = m + 1
brr(1) = m ' 读取分公司对应的条目 即区域写入数组第一列
brr(2) = arr(i, 2)
brr(3) = arr(i, 10)
brr(4) = arr(i, 6)
brr(5) = arr(i, 3)
brr(6) = arr(i, 7)
brr(7) = arr(i, 8)
brr(8) = arr(i, 9)
brr(9) = arr(i, 11)
brr(10) = arr(i, 12)
brr(11) = arr(i, 13)
brr(12) = arr(i, 14)
d1(arr(i, 2) & tjz) = ""
d1(arr(i, 3) & tjz) = ""
d1(arr(i, 6) & tjz) = ""
d1(arr(i, 7) & tjz) = ""
d1(arr(i, 11) & tjz) = ""
d1(arr(i, 14) & tjz) = ""
End If
d(tjz) = brr '更新字典条目中的值
Next
If d.Count Then
Sheet1.Range("a2").CurrentRegion.Offset(2).ClearContents '清除结果区的原有数据
brr = WorksheetFunction.Transpose(WorksheetFunction.Transpose(d.Items)) '数组装置
Sheet1.Range("a3").Resize(d.Count, UBound(brr, 2)) = brr '赋值
Else
MsgBox "无符合条件的数据"
End If
End Sub
|
|