当前位置: 首页 > news >正文

EXCEL 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秒以内就很好了。

2.3万个数据转成字典Key,不引用Dictionary,用时:5281毫秒
引用的话只要39毫秒,快了135倍

写入6.3万个excel单元格用时=2304毫秒
直接用数组方式改变一批单元格只要57毫秒,快了39倍

2.86万个订单,查找的产品2.29万个
不用字典,纯循环查找用时17.3秒
字典生成39毫秒,查找用时85毫秒

================
V12-引用Dictionary 字典法强制声明最快
 数据行数=28627,条件末行=22943
 条件转字典用时:39毫秒
 取产品+数量+金额 数据用时:16毫秒
提取所有数据用时=67毫秒
统计用时=85毫秒
写入单元格(超级法)用时=57毫秒

【借方V12】 >用时209毫秒,约0.003分钟
-----------
'v12不引用Dictionary 字典法,后期绑定,不声明从0.2秒变成了12秒
 条件转字典用时:5281毫秒
 取产品+数量+金额 数据用时:20毫秒
提取所有数据用时=5310毫秒
统计用时=6588毫秒
写入单元格(超级法)用时=59毫秒
借方V12 >用时11957毫秒
============== 纯数组方式循环几万*几万次的查找,用时17秒,最古老的方法,慢

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

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

相关文章:

  • Oracle EBS API创建AP发票报错:ZX_TAX_STATUS_NOT_EFFECTIVE和ZX_REGIME_NOT_EFF_IN_SUBSCR-
  • AIGC(人工智能生成内容)行业现在适合进入吗
  • ARM鲲鹏920-oe2309-caffe
  • 多模态中的模态有哪些
  • c# mysql 加锁解锁
  • HBase分布式数据库入门到精通
  • Spring MVC+mybatis 项目入门:旅游网(二) dispatcher与controller与Spring MVC
  • 豆瓣电影后端设计
  • 四川汇聚荣聚荣科技有限公司好不好?
  • 六(1)、RTKLIB源码解析 — rnx2rtkp.c
  • 全球首个AI代理驱动的元宇宙生态Wondra,让Web3再次伟大
  • AI生成视频解决方案,降低成本,提高效率
  • 第四十一天 | 62.不同路径 63.不同路径|| 343.整数拆分 96.不同的二叉搜索树
  • 算法打卡 Day13(栈与队列)-滑动窗口最大值 + 前 K 个高频元素 + 总结
  • 页面导出PDF,非可视区域如何解决
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • C++类中的特殊成员函数
  • canvas 五子棋游戏
  • iOS编译提示和导航提示
  • JS题目及答案整理
  • Python打包系统简单入门
  • Spark学习笔记之相关记录
  • vuex 学习笔记 01
  • 力扣(LeetCode)357
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 用jQuery怎么做到前后端分离
  • Python 之网络式编程
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​ArcGIS Pro 如何批量删除字段
  • ​渐进式Web应用PWA的未来
  • #define用法
  • #etcd#安装时出错
  • #FPGA(基础知识)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $jQuery 重写Alert样式方法
  • (1)Android开发优化---------UI优化
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (不用互三)AI绘画工具应该如何选择
  • (动态规划)5. 最长回文子串 java解决
  • (二)fiber的基本认识
  • (二)linux使用docker容器运行mysql
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 简单实现MD5
  • .NET 中的轻量级线程安全
  • .NET6实现破解Modbus poll点表配置文件
  • .net反混淆脱壳工具de4dot的使用