Excel精英培训网

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

[已解决]求助VBA代码

[复制链接]
发表于 2024-2-21 09:49 | 显示全部楼层 |阅读模式
统计表公式过多,会出现变慢的情况。能不能做个VBA代码,把销售记录表的‘箱数’统计到这个表格来
最佳答案
2024-2-22 21:42
点了N次才上传上来 ,我也是醉了
  1. Option Explicit

  2. Sub 汇总(shName$)
  3.     Dim arr, brr, i&, j&, dic As Object, num%, tempStr$, crr
  4.     Set dic = VBA.CreateObject("scripting.dictionary")
  5.     Sheets(shName).Range("h6:p18").ClearContents
  6.     arr = Sheets(shName).Range("G4").CurrentRegion.Value
  7.     num = UBound(arr, 2)
  8.     For i = 5 To UBound(arr) - 2
  9.         If arr(i, num) = "" Then arr(i, num) = Val(arr(i - 1, num)) & "年" & arr(i, 1)
  10.         For j = 2 To UBound(arr, 2) - 2
  11.             tempStr = Application.Clean(arr(i, num) & "" & arr(4, j))
  12.             dic(tempStr) = i & "," & j
  13.         Next j
  14.     Next i
  15.     tempStr = Empty
  16.     brr = Sheets("销售记录表").Range("A2").CurrentRegion.Value
  17.     For i = 3 To UBound(brr)
  18.         tempStr = VBA.Format(brr(i, 6), "yyyy年m月份") & "" & Application.Clean(brr(i, 8))
  19.         If dic.exists(tempStr) Then
  20.             crr = Split(dic(tempStr), ",")
  21.             arr(crr(0) * 1, crr(1) * 1) = arr(crr(0) * 1, crr(1) * 1) + brr(i, 13)
  22.         End If
  23.     Next i
  24.     For i = 5 To UBound(arr) - 2
  25.         For j = 2 To UBound(arr, 2) - 2
  26.             arr(i, num - 1) = arr(i, num - 1) + arr(i, j)
  27.         Next j
  28.     Next i
  29.     Sheets(shName).Range("G2").Resize(UBound(arr), UBound(arr, 2)) = arr
  30.     MsgBox "汇总完成 !"
  31. End Sub
  32. Sub 直口()
  33.     Call 汇总("直口统计表")
  34. End Sub

  35. Sub 螺口()
  36.     Call 汇总("螺口统计表")
  37. End Sub
复制代码

求助VBA代码.zip

42.7 KB, 下载次数: 3

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2024-2-22 21:41 | 显示全部楼层
……

求助VBA代码.zip

27.19 KB, 下载次数: 4

回复

使用道具 举报

发表于 2024-2-22 21:42 | 显示全部楼层    本楼为最佳答案   
点了N次才上传上来 ,我也是醉了
  1. Option Explicit

  2. Sub 汇总(shName$)
  3.     Dim arr, brr, i&, j&, dic As Object, num%, tempStr$, crr
  4.     Set dic = VBA.CreateObject("scripting.dictionary")
  5.     Sheets(shName).Range("h6:p18").ClearContents
  6.     arr = Sheets(shName).Range("G4").CurrentRegion.Value
  7.     num = UBound(arr, 2)
  8.     For i = 5 To UBound(arr) - 2
  9.         If arr(i, num) = "" Then arr(i, num) = Val(arr(i - 1, num)) & "年" & arr(i, 1)
  10.         For j = 2 To UBound(arr, 2) - 2
  11.             tempStr = Application.Clean(arr(i, num) & "" & arr(4, j))
  12.             dic(tempStr) = i & "," & j
  13.         Next j
  14.     Next i
  15.     tempStr = Empty
  16.     brr = Sheets("销售记录表").Range("A2").CurrentRegion.Value
  17.     For i = 3 To UBound(brr)
  18.         tempStr = VBA.Format(brr(i, 6), "yyyy年m月份") & "" & Application.Clean(brr(i, 8))
  19.         If dic.exists(tempStr) Then
  20.             crr = Split(dic(tempStr), ",")
  21.             arr(crr(0) * 1, crr(1) * 1) = arr(crr(0) * 1, crr(1) * 1) + brr(i, 13)
  22.         End If
  23.     Next i
  24.     For i = 5 To UBound(arr) - 2
  25.         For j = 2 To UBound(arr, 2) - 2
  26.             arr(i, num - 1) = arr(i, num - 1) + arr(i, j)
  27.         Next j
  28.     Next i
  29.     Sheets(shName).Range("G2").Resize(UBound(arr), UBound(arr, 2)) = arr
  30.     MsgBox "汇总完成 !"
  31. End Sub
  32. Sub 直口()
  33.     Call 汇总("直口统计表")
  34. End Sub

  35. Sub 螺口()
  36.     Call 汇总("螺口统计表")
  37. End Sub
复制代码

评分

参与人数 1学分 +2 收起 理由
zjdh + 2 赞一个

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2024-2-23 19:07 | 显示全部楼层
真好,真厉害,不是一般的厉害,是大大的厉害
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 19:50 , Processed in 0.286962 second(s), 17 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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