Excel的VBA代码解读

Public Sub AA()
Dim e, gr, dr
Set e = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
Application.Calculation = xlManual
gr = Sheet5.Range("a1").CurrentRegion
Sheet6.[d2:ag500].ClearContents
dr = Sheet6.Range("a1:ag" & Sheet6.[a65536].End(3).Row)
For i = 2 To UBound(gr)
For j = 4 To UBound(gr, 2)
e(gr(i, 1) & gr(i, 2) & gr(i, 3) & gr(1, j)) = e(gr(i, 1) & gr(i, 2) & gr(1, j) & gr(i, 3)) + gr(i, j)
Next
Next
For i = 2 To UBound(dr)
For j = 4 To UBound(dr, 2)
dr(i, j) = e(dr(i, 1) & dr(i, 2) & dr(i, 3) & dr(1, j))
Next
Next
Sheet6.Range("A1:ag" & Sheet6.[a65536].End(3).Row) = dr
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub
请帮忙解读一下这段VBA代码的意思,诚恳得到您的回答,谢谢!

这个类似透视表,
sheet6的 D2:G 列最后一行的范围 内 做统计
统计 规则是 Sheet5内的 ABC 3列+ 第一行 4个条件 进行求和,
求和结果放到Sheet6, 采用的 是字典和数组,
Sheet6 的A:C 是 去除重复项 后的结果追问

如果统计规则是(sheet5内的ABC 3列+第一行4个条件进行求和)+(sheet2内的ABC 3列+第一行4个条件进行求和),求和结果放到sheet6,采用的是字典和数据。这个怎么写那,谢谢。

追答

加一段
gr = Sheet2.Range("a1").CurrentRegion
For i = 2 To UBound(gr)
For j = 4 To UBound(gr, 2)
e(gr(i, 1) & gr(i, 2) & gr(i, 3) & gr(1, j)) = e(gr(i, 1) & gr(i, 2) & gr(1, j) & gr(i, 3)) + gr(i, j)
Next
Next

追问

sheet2和sheet5中A1所在的区域都付给GR一个变量吗,改了为什么显示不正确那

追答

推荐了无法继续回答,写在前面2个next之后

你取消推荐

追问

我是在前面两个next之后加的,比方说sheet2和sheet5两个表中都有个叫“ABC”的人,sheet2中她的数据是200,sheet5中的数据是100,我想要的结果是把300放到sheet6中,它现在显示的是200

追答

代码:

Public Sub AA()
Dim e, gr, dr
Set e = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
Application.Calculation = xlManual
gr = Sheet5.Range("a1").CurrentRegion
Sheet6.[d2:ag500].ClearContents
dr = Sheet6.Range("a1:ag" & Sheet6.[a65536].End(3).Row)
For i = 2 To UBound(gr)
For j = 4 To UBound(gr, 2)
e(gr(i, 1) & gr(i, 2) & gr(i, 3) & gr(1, j)) = e(gr(i, 1) & gr(i, 2) & gr(1, j) & gr(i, 3)) + gr(i, j)
Next
Next
gr = Sheet2.Range("a1").CurrentRegion
For i = 2 To UBound(gr)
For j = 4 To UBound(gr, 2)
e(gr(i, 1) & gr(i, 2) & gr(i, 3) & gr(1, j)) = e(gr(i, 1) & gr(i, 2) & gr(1, j) & gr(i, 3)) + gr(i, j)
Next
Next

For i = 2 To UBound(dr)
For j = 4 To UBound(dr, 2)
dr(i, j) = e(dr(i, 1) & dr(i, 2) & dr(i, 3) & dr(1, j))
Next
Next
Sheet6.Range("A1:ag" & Sheet6.[a65536].End(3).Row) = dr
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub

追问

我把代码复制过去,如果sheet2和sheet5不出现重名,结果是对的。比方说:sheet2中“快”的工资是3333.33,sheet5中“快的工资是20000”,我想要的是sheet2和sheet5中的数据相加23333.33的结果,现在只显示sheet2中的结果。

追答

效果就是 求和的,有可能你Sheet2 不是 Sheet2
gr = Sheet2.Range("a1").CurrentRegion 改成
gr = sheets("Sheet2").Range("a1").CurrentRegion

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网