ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 272|回复: 18

[求助] 求老师帮忙写个SUMIF函数的VBA自动更新总档库存

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-16 18:35 | 显示全部楼层 |阅读模式
本帖最后由 yysfcq1 于 2024-6-16 19:18 编辑

把物料清单A列的SUMIF函数用VBA来写,函数太卡了
image.png

库存表.zip

604.96 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2024-6-16 19:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
没看明白。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-16 19:17 | 显示全部楼层

老师你好,就是把物料清单A列的SUMIF函数用VBA来写,函数太卡了。

TA的精华主题

TA的得分主题

发表于 2024-6-16 19:23 | 显示全部楼层
yysfcq1 发表于 2024-6-16 19:17
老师你好,就是把物料清单A列的SUMIF函数用VBA来写,函数太卡了。

你确定是A列 数据也没有 叫别人怎么猜?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-16 19:26 | 显示全部楼层
wang-way 发表于 2024-6-16 19:23
你确定是A列 数据也没有 叫别人怎么猜?

老师你好,物料清单A列有公式,我想把公式换成VBA这样会快很多。

TA的精华主题

TA的得分主题

发表于 2024-6-16 19:34 | 显示全部楼层
yysfcq1 发表于 2024-6-16 19:17
老师你好,就是把物料清单A列的SUMIF函数用VBA来写,函数太卡了。

明白了,附件供参考。

库存表.zip

408.91 KB, 下载次数: 15

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-16 19:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Rem 过程开始 X改为你想要的名字
  2. Public Sub X()
  3.     Rem 代码从这里开始写
  4.     Rem 声明工作簿变量wb和工作表变量sht
  5.     Dim wb As Workbook, sht As Worksheet
  6.     Rem 声明工作表对象变量oSht
  7.     Dim oSht As Worksheet
  8.     Rem 设置wb为当前工作簿
  9.     Set wb = Application.ThisWorkbook
  10.     Rem 设置sht为指定名称的工作表,引号内填写工作表名称
  11.     Set sht = wb.Worksheets("总档")
  12.     Rem 设置osht为工作表,在引号内填写工作表名称
  13.     Set oSht = wb.Worksheets("物料清单")
  14.                         
  15.     Rem 创建一个字典dic
  16.     Set dic = CreateObject("Scripting.Dictionary")
  17.                         
  18.                                     
  19.     Rem 使用With语句,方便对工作表Sht进行多次操作
  20.     With sht
  21.         '.Usedrange.Offset(1).clear
  22.         Rem 获取列A中最大数据行的行号
  23.         eRow = .Cells(.Rows.count, 2).End(xlUp).Row
  24.         For i = 3 To eRow Step 1
  25.             Key = .Cells(i, 2).Value
  26.             Item = .Cells(i, 8).Value
  27.             dic(Key) = dic(Key) + Item
  28.         Next
  29.     End With
  30.                     
  31.     With oSht
  32.         Rem 设置范围为A2单元格
  33.         Set rng = .Range("A2")
  34.         Rem 调整范围Rng的大小,行数为字典键值对数量dic.Count,列数为2
  35.         Set rng = rng.Resize(dic.count, 1)
  36.                
  37.         Rem 如果字典有元素,则将字典的项目转置后输出到指定范围Rng
  38.         rng.Value = WorksheetFunction.Transpose(dic.items)
  39.                                 
  40.     End With

  41. End Sub
  42. Rem 过程结束
复制代码

TA的精华主题

TA的得分主题

发表于 2024-6-16 19:34 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()   '//2024.6.16
  2.     Dim arr, d
  3.     Application.ScreenUpdating = False
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     With Sheets("总档")
  6.         r = .Cells(Rows.count, "b").End(xlUp).Row
  7.         arr = .[a1].Resize(r, 8)
  8.     End With
  9.     For i = 3 To UBound(arr)
  10.         s = arr(i, 2)
  11.         d(s) = d(s) + arr(i, 8)
  12.     Next
  13.     With Sheets("物料清单")
  14.         r = .Cells(.Rows.count, "b").End(xlUp).Row
  15.         arr = .[a1].Resize(r, 2)
  16.         For i = 2 To UBound(arr)
  17.             s = arr(i, 2)
  18.             If d.Exists(s) Then
  19.                 arr(i, 1) = d(s)
  20.             End If
  21.         Next
  22.         .[a1].Resize(r, 2) = arr
  23.     End With
  24.     Set d = Nothing
  25.     Application.ScreenUpdating = True
  26.     MsgBox "OK!"
  27. End Sub

复制代码


评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-16 19:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-16 19:51 | 显示全部楼层
  1. Sub 测试()
  2.     Dim i%, arr
  3.     Dim dic As Object, key
  4.     Set dic = CreateObject("scripting.dictionary")
  5.     arr = Sheet1.Range("B2:H" & Sheet1.Cells(Rows.count, "B").End(xlUp).Row)
  6.     For i = 2 To UBound(arr)
  7.         key = arr(i, 1)
  8.         dic(key) = dic(key) + arr(i, 8)
  9.     Next
  10.     Sheet4.Activate
  11.     For i = 2 To Sheet4.Cells(Rows.count, "B").End(xlUp).Row
  12.         key = Sheet4.Cells(i, 2)
  13.         Sheet4.Cells(i, 1) = dic(key)
  14.     Next
  15. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-25 14:59 , Processed in 0.052007 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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