Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2263|回复: 1

[已解决]各位大师,当增加列数时,自动求和又如何修改代码

[复制链接]
发表于 2015-3-19 18:18 | 显示全部楼层 |阅读模式
本帖最后由 旺小东 于 2015-3-20 10:34 编辑

各位大师,当增加列数时,用各位的方法又如何修改代码。(最好是每录入一个数量完成时,自动求和)
最佳答案
2015-3-20 09:07
  1. Sub Macro1()
  2.     Dim arr, i&, d
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Set d1 = CreateObject("scripting.dictionary")
  5.     [i1:k10000] = ""
  6.     arr = Range("a1:h" & [a65536].End(3).Row)
  7.     ReDim brr(1 To UBound(arr), 1 To 3)
  8.     For i = UBound(arr) To 3 Step -1
  9.         x = CStr(arr(i, 1))
  10.         If InStr(x, "部分") = 0 Then
  11.             If d.exists(x) Then brr(i, 1) = d(x)
  12.             If d1.exists(x) Then brr(i, 2) = d1(x)
  13.             If Len(arr(i, 6)) Then
  14.                 brr(i, 1) = arr(i, 6) * arr(i, 7): s = s + brr(i, 1)
  15.                 brr(i, 2) = arr(i, 6) * arr(i, 8): s1 = s1 + brr(i, 2)
  16.             End If
  17.             If Len(x) > 2 Then       '长度大于2,上一级自动汇总
  18.                 yrr = Split(x, "."): xl = Len(yrr(UBound(yrr))) '最后一部分长度
  19.                 y = Left(x, Len(x) - xl - 1)    '去掉最后一部分,到上一级
  20.                 d(y) = d(y) + brr(i, 1)
  21.                 d1(y) = d1(y) + brr(i, 2)
  22.             End If
  23.         Else
  24.             d.RemoveAll: d1.RemoveAll
  25.             brr(i, 1) = s: brr(i, 2) = s1
  26.             zs = zs + s: s = 0
  27.             zs1 = zs1 + s1: s1 = 0
  28.         End If
  29.         brr(i, 3) = brr(i, 1) + brr(i, 2)
  30.     Next
  31.     brr(2, 1) = zs: brr(2, 2) = zs1: brr(2, 3) = zs + zs1
  32.     Range("i1").Resize(UBound(arr), 3) = brr
  33.     Range("i1").Resize(1, 3) = Array("工程费(元)", "设备费(元)", "合计(元)")
  34. End Sub
复制代码

用VBA自动求和(工程).rar

22.98 KB, 下载次数: 7

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-3-20 09:07 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2.     Dim arr, i&, d
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Set d1 = CreateObject("scripting.dictionary")
  5.     [i1:k10000] = ""
  6.     arr = Range("a1:h" & [a65536].End(3).Row)
  7.     ReDim brr(1 To UBound(arr), 1 To 3)
  8.     For i = UBound(arr) To 3 Step -1
  9.         x = CStr(arr(i, 1))
  10.         If InStr(x, "部分") = 0 Then
  11.             If d.exists(x) Then brr(i, 1) = d(x)
  12.             If d1.exists(x) Then brr(i, 2) = d1(x)
  13.             If Len(arr(i, 6)) Then
  14.                 brr(i, 1) = arr(i, 6) * arr(i, 7): s = s + brr(i, 1)
  15.                 brr(i, 2) = arr(i, 6) * arr(i, 8): s1 = s1 + brr(i, 2)
  16.             End If
  17.             If Len(x) > 2 Then       '长度大于2,上一级自动汇总
  18.                 yrr = Split(x, "."): xl = Len(yrr(UBound(yrr))) '最后一部分长度
  19.                 y = Left(x, Len(x) - xl - 1)    '去掉最后一部分,到上一级
  20.                 d(y) = d(y) + brr(i, 1)
  21.                 d1(y) = d1(y) + brr(i, 2)
  22.             End If
  23.         Else
  24.             d.RemoveAll: d1.RemoveAll
  25.             brr(i, 1) = s: brr(i, 2) = s1
  26.             zs = zs + s: s = 0
  27.             zs1 = zs1 + s1: s1 = 0
  28.         End If
  29.         brr(i, 3) = brr(i, 1) + brr(i, 2)
  30.     Next
  31.     brr(2, 1) = zs: brr(2, 2) = zs1: brr(2, 3) = zs + zs1
  32.     Range("i1").Resize(UBound(arr), 3) = brr
  33.     Range("i1").Resize(1, 3) = Array("工程费(元)", "设备费(元)", "合计(元)")
  34. End Sub
复制代码

用VBA自动求和(工程).rar

23.58 KB, 下载次数: 11

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 12:54 , Processed in 0.467657 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表