ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] EXCEL VBA终极提速,超级公式,算法优化

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-25 20:41 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1,简化公式,200个字变成10个字
有很多公式写的很长,看不懂很难维护,如果改成VBA代码,简化成一个超级函数,方便维护,还可以给多个工程共用,实现模块化开发
2,计算提速。有些vba运算很慢,需要几分钟到几小时,用好的方法,运行速度可以减到1分钟以内甚至10秒以内。
这2天做了一个3万个左右的订单表和产品销售统计的算法。
原来的主人,运行后就卡死了,后面按10个产品去查找订单,需要1秒左右,那3万个产品就要3000秒,差不多一个小时才能完成。
后面采用了字典的方法代替每个单元格去循环对比,速度提高了100倍,只需要30秒左右。
再后来发现写入3万行2列数据也要10秒左右,采用变量绑定直接写入,只需要60毫秒。
经过终极优化,最终只需要200毫秒就完成了全部运算。
速度又提高了150倍,比最初的算法速度提高了1.5万倍。

如果还能采用多线程进行计算,估计还能提高不少。不过总体时间只有0.2秒了,没必要再折腾了。他的想法是30秒以内就很好了。



TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-25 20:43 | 显示全部楼层
2.3万个数据转成字典Key,不引用Dictionary,用时:5281毫秒
引用的话只要39毫秒,快了135倍

写入6.3万个excel单元格用时=2304毫秒
直接用数组方式改变一批单元格只要57毫秒,快了39倍
================
V12-引用Dictionary
数据行数=28627,条件末行=22943
条件转字典用时:39毫秒
取产品+数量+金额 数据用时:16毫秒
提取所有数据用时=67毫秒
统计用时=85毫秒
写入单元格(超级法)用时=57毫秒

【借方V12】 >用时209毫秒,约0.003分钟
-----------
'v12不引用Dictionary
数据行数=28627,条件末行=22943
条件转字典用时:5281毫秒
取产品+数量+金额 数据用时:20毫秒
提取所有数据用时=5310毫秒
统计用时=6588毫秒
写入单元格(超级法)用时=59毫秒
借方V12 >用时11957毫秒
==============
2.86万个订单,查找的产品2.29万个
不用字典,纯循环查找用时17.3秒
字典生成39毫秒,查找用时85毫秒

数据行数=28627,条件末行=22943
条件转字典用时:0毫秒
取产品+数量+金额 数据用时:16毫秒
提取所有数据用时=29毫秒
统计用时=17252毫秒
写入单元格(超级法)用时=62毫秒

【借方V12】 >用时17343毫秒,约0.289分钟

TA的精华主题

TA的得分主题

发表于 2024-5-25 21:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
“再后来发现写入3万行2列数据也要10秒左右,采用变量绑定直接写入,只需要60毫秒。”
请问变量绑定写入是怎么个绑定?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-25 21:55 | 显示全部楼层
arr=range("a1:b10")
arr()修改之后,再range("a1:b10")=ARR
就是把EXCEL表格的数据转换成数组,再把数组修改后写回到多个单元格。
我QQ:527524938

TA的精华主题

TA的得分主题

发表于 2024-6-3 07:21 来自手机 | 显示全部楼层
逍遥爱迪生 发表于 2024-5-25 21:55
arr=range("a1:b10")
arr()修改之后,再range("a1:b10")=ARR
就是把EXCEL表格的数据转换成数组,再把数 ...

在数组里操作修改,然后再写回单元格吗

TA的精华主题

TA的得分主题

发表于 2024-6-3 10:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用VBA处理大量规范数据,可以使用ADO连接excel,当成数据库数据用SQL语句做。直接输出想要的结果。或者通过记录集二次处理。也可以转到字典二次处理。这样30万行都信手拈来

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-3 21:38 来自手机 | 显示全部楼层
hhxq001 发表于 2024-6-3 07:21
在数组里操作修改,然后再写回单元格吗

是的,直接读写单元格操作也可以,用数据库也可以。

TA的精华主题

TA的得分主题

发表于 2024-6-3 22:06 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-6-17 14:19 , Processed in 0.040254 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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