ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请老师帮忙用VBA,现在数据多函数运行很慢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-5-18 16:18 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 shenzhenyang 于 2021-5-18 16:30 编辑

QQ截图20210518161057.jpg QQ截图20210518161114.jpg

数据源都是从入库明细表和出库明细表汇取

根基P4:Q4的月份日期计算和E列物品名称判断,从入库明细表和出库明细表求出数据
H列是计算出上个月末的库存数,比如现在是4月,就是求出3月末的库存数量。
I列和J列就是这个月的进和出。
K列就是求出这个月的库存数,

L列和M列,就是求出总的进出,

现在都是用公式,打开运行慢,动下单元格就等表格运算1圈,请老师帮忙用VBA代码求出


谢谢您们。

求助.rar

230.67 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2021-5-18 18:18 | 显示全部楼层
使用字典和ADO组合查询汇总

求助.rar

150.74 KB, 下载次数: 5

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-5-18 18:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Range("B5:M65536").ClearContents
    Dim r1!, i!, arr, crr(), drr()
    Dim k, t
    Dim d As Object
    r1 = Sheet3.Range("A65536").End(3).Row
    Set d = CreateObject("Scripting.DictionAry")
    arr = Sheet3.Range("B2:E" & r1)
    For i = 1 To UBound(arr)
        If arr(i, 2) <> "" Then
            d(arr(i, 2)) = arr(i, 1) & "," & arr(i, 3) & "," & arr(i, 4)
        End If
    Next i
    k = d.keys
    t = d.items
    s = d.Count
    Range("E5").Resize(s, 1) = Application.WorksheetFunction.Transpose(k)
    ReDim crr(1 To s, 1 To 1)
    ReDim drr(1 To s, 1 To 2)
    For i = 0 To s - 1
        crr(i + 1, 1) = Split(t(i), ",")(0)
        drr(i + 1, 1) = Split(t(i), ",")(1)
        drr(i + 1, 2) = Split(t(i), ",")(2)
    Next i
    Range("B5").Resize(UBound(crr), 1) = crr
    Range("F5").Resize(UBound(drr), 2) = drr
    r = Range("E65536").End(3).Row
    d.RemoveAll
    '-------------------使用ADO查询-------------------------------------------------------------------------------
    Set cn = CreateObject("ADODB.ConneCtion")  '创建excel数据库连接
    Set rs = CreateObject("ADODB.Recordset")  '创建excel数据库连接
    cn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
    r1 = Sheet1.Range("B65536").End(3).Row
    r2 = Sheet2.Range("B65536").End(3).Row
    For i = 5 To r
        Cells(i, "I").CopyFromRecordset cn.Execute("Select sum(数量) from [入库明细$B4:L" & r1 & "] where 类别='" & Cells(i, "B") & "' and 物品名称='" & Cells(i, "E") & "' and year(入库时间)=" & Year([P4]) & " and month(入库时间)=" & Month([P4]))
        Cells(i, "J").CopyFromRecordset cn.Execute("Select sum(数量) from [出库明细$B4:L" & r2 & "] where 类别='" & Cells(i, "B") & "' and 物品名称='" & Cells(i, "E") & "' and year(出库时间)=" & Year([P4]) & " and month(出库时间)=" & Month([P4]))
        Cells(i, "L").CopyFromRecordset cn.Execute("Select sum(数量) from [入库明细$B4:L" & r1 & "] where 类别='" & Cells(i, "B") & "' and 物品名称='" & Cells(i, "E") & "'")
        Cells(i, "M").CopyFromRecordset cn.Execute("Select sum(数量) from [出库明细$B4:L" & r2 & "] where 类别='" & Cells(i, "B") & "' and 物品名称='" & Cells(i, "E") & "'")
    Next i
    '--------------------------------------------------------------------------------------------------------------
    DateUp = DateAdd("d", -1, [P4])
    Range("K5:K" & r) = "=L5-M5"
    Range("H5:H" & r) = "=(L5-I5)-(M5-J5)"
    Range("E" & r + 1) = "合计"
    Range("H" & r + 1 & ":M" & r + 1) = "=SUM(H5:H" & r & ")"
    Range("B5:M" & r + 1).Borders.LineStyle = 1

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-5-18 18:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
前提条件:入库明细表和出库明细表的表头行的字符不能改变,否则SQL查询就会出错

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-18 18:28 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-5-18 18:28 | 显示全部楼层
累计入库/出库查询数据有误,重新上传附件,以此为准,仅供参考

求助.rar

150.93 KB, 下载次数: 9

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-18 18:31 | 显示全部楼层
ahaoge 发表于 2021-5-18 18:28
累计入库/出库查询数据有误,重新上传附件,以此为准,仅供参考

重新下载了,还是一样出现图片错误

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-18 19:10 | 显示全部楼层
ahaoge 发表于 2021-5-18 18:28
累计入库/出库查询数据有误,重新上传附件,以此为准,仅供参考

老师,不用ADODB行不行,估计是我版本问题我是office2016   64位

TA的精华主题

TA的得分主题

发表于 2021-5-18 19:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shenzhenyang 发表于 2021-5-18 19:10
老师,不用ADODB行不行,估计是我版本问题我是office2016   64位

改一下就行了

求助.zip

164.8 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2021-5-18 20:16 | 显示全部楼层
由于Excel版本不同,需要修改数据库连接引擎代码,我用的是2007版本
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-19 17:57 , Processed in 0.053167 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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