ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] vba测试公式自动重算时长的代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-8-21 16:47 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Private Sub CommandButton1_Click()
  2. Dim f$, i&, t#
  3. f = [b1].Formula
  4. Application.Calculation = xlManual
  5. For i = 1 To 65536
  6.     Cells(i, 2).Formula = f
  7.     Cells(i, 3).Formula = f
  8.     Cells(i, 4).Formula = f
  9.     Cells(i, 5).Formula = f
  10. Next
  11. [f1] = 0
  12. t = Timer
  13. Calculate
  14. t = Timer - t
  15. MsgBox t & "秒"
  16. [f1] = 100
  17. Application.Calculation = xlAutomatic
  18. End Sub
复制代码
      为了对比相同任务下公式的计算效率,设计了一段vba代码。
       为了防止测试时间为0,在26万个单元格输入相同公式来延长计算时间,便于实测。思路如下:
1.首先关闭自动重算,先输入公式(故意在公式中加f1,初始值100),然后把0赋值给f1——并不影响公式的实际运算结果
2.记录初始时间t
3.发出重算指令Calculate(由于处于手动重算状态,f1得到0之后,当时并没有重算关联的那26万个单元格)
4.记录当前时间,得自动重算时差
5.f1赋初始值100,程序退出前,重启自动重算


TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-21 16:52 | 显示全部楼层
本帖最后由 hhjjpp 于 2016-8-21 16:53 编辑

QQ截图20160821164819.jpg


实测结果如上,但是偶尔监测结果与上述数据有所出入,会出现0.078125秒、0.046875秒,而且不会一边倒,两种公式都可能出现上述时差。
从监测公式运行时间角度讲,上述代码有什么问题,有什么需要改进和完善的地方,请大家不吝赐教!
谢谢啦!

20160612-h.rar

4.28 KB, 下载次数: 3

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-21 17:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-8-21 19:07 | 显示全部楼层
电脑同时运行着很多进程。
打开Windows任务管理器,你会发现CPU使用率在不断地变化着。

这些都在影响着VBA返回的测算结果。
或许是不可能得到“精确”结果的,即使在同一台电脑上。
所以,不要追求太精确的结果,

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-21 20:40 | 显示全部楼层
ZhouFfett 发表于 2016-8-21 19:07
电脑同时运行着很多进程。
打开Windows任务管理器,你会发现CPU使用率在不断地变化着。

3楼是在断网,退出qq、杀软等,以及其他尽可能退出的进程后的测试结果!
只是我没来及说而已!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-21 21:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 hhjjpp 于 2016-8-21 21:07 编辑

以及浏览器、任何在线运行软件、常驻内存的非系统软件(含附加安全进程)

TA的精华主题

TA的得分主题

发表于 2016-8-21 21:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
太多因素在影响在系统时间。
操作系统有很多监控模块在确保自身的安全;
Excel运行过程,有时从磁盘上调用自己模块(有些模块是需要执行的时候才调用);
磁盘不停地在旋转着,读写时间会有少少偏差;
电压电流的不稳定……

以上是我猜想的(纯属胡猜,不一定正确!),大概会造成电脑的0.0几秒的时间差。

大致上,半秒以内的时间差,大概人是感觉不出来的吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-22 08:44 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2. Dim f$, i&, t#
  3. f = [b1].Formula
  4. Application.Calculation = xlManual
  5. [b2].Formula = f
  6. [b2].Copy [b3:e65536]
  7. [b2].Copy [c1:e2]
  8. [f1] = 0
  9. t = Timer
  10. Calculate
  11. t = Timer - t
  12. MsgBox t & "秒"
  13. [f1] = 100
  14. Application.Calculation = xlAutomatic
  15. End Sub
复制代码

发现vba的公式赋值代码运行时间要远超过复制粘贴代码!这样就有可能省出精力来进行大规模测试!

test-h2.rar

1.67 MB, 下载次数: 6

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-22 11:08 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2. Dim f$, i&, t#, d, data, arr
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set data = CreateObject("Scripting.Dictionary")
  5. Application.Calculation = xlManual
  6. For i = 7 To 8
  7.     f = Cells(2, i).Formula
  8.     Cells(i + 8, "g") = "'" & f
  9.     [b1].Formula = f
  10.     [b1].Copy [b2:e65536]
  11.     [b1].Copy [c1:e1]
  12.     Set d(i) = CreateObject("Scripting.Dictionary")
  13.     For j = 1 To 1000                   '检测
  14.         [f1] = 0
  15.         t = Timer
  16.         Calculate
  17.         t = Timer - t
  18.         d(i)(t) = d(i)(t) + 1
  19.         If Not data.exists(t) Then
  20.            data(t) = ""
  21.         End If
  22.         [f1] = 100
  23.     Next
  24. Next
  25. arr = data.keys
  26. n = data.Count
  27. ReDim brr(1 To 2, 1 To n)
  28. For j = 0 To n - 1                       '统计频次
  29.     For i = 7 To 8
  30.         brr(i - 6, j + 1) = d(i)(arr(j))
  31.     Next
  32. Next
  33. [h14].Resize(1, n) = arr
  34. [h15].Resize(2, n) = brr
  35. Set d = Nothing
  36. Set data = Nothing
  37. Application.Calculation = xlAutomatic
  38. End Sub
复制代码

自动检测并输出统计结果

test-h3.rar

1.67 MB, 下载次数: 6

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-22 14:45 | 显示全部楼层
退出其他任何无关应用程序(包括所有打开的窗口、插件),并断网,能够强行退出的进程均全部退出,检测结果如下
QQ截图20160822142900.jpg

公式计算时长vba测试-复制公式-自记录-h.rar

1.67 MB, 下载次数: 11

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-24 16:06 , Processed in 0.053004 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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