|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 xiangbaoan 于 2018-8-22 07:22 编辑
Sub test()
Dim ar, r&, i%, st$, d As Object, t, n#, sum#
Set d = CreateObject("scripting.dictionary")
ar = Sheet7.[b4].CurrentRegion '单元格区域装入数组,你选择b4按ctrl+a看是哪些区域
For r = 2 To UBound(ar) - 1
st = ar(r, 1)
If Len(st) Then '判断是否为空,等同于if st<>"" then
d(st) = r '将大项位置装入字典
ar(r, 6) = "" '清空合计,表中黄色单元格,这里可写可不写,写了更严谨些吧
Else
ar(r, 6) = ar(r, 4) * ar(r, 5) '若为空则算出每个小项的乘积
End If
Next
'说明,for r = 2 to 10 ……………… next 循环完后r的值是11,此为特别强调
d(r) = r '记录下最后一行位置,也就是总计,等同于d(UBound(ar)) = r
t = d.items '字典items装入数组
Set d = Nothing '释放对象
For r = 0 To UBound(t) - 1 '在数组中循环,此数组记录着每个大项的位置
n = 0 '此变量将存放每大项的合计
For i = t(r) + 1 To t(r + 1) - 1 '在小项中循环
n = n + ar(i, 6) '累加
Next
ar(t(r), 6) = n '将结果写入
sum = sum + n '各大项累加
Next
ar(UBound(ar), 6) = sum '总计结果写入
Sheet7.[k4].Resize(UBound(ar), UBound(ar, 2)) = ar '数组写入单元格区域
End Sub
|
|