ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 灰袍法师

[分享] 用VB编译一模一样的VBA代码,速度马上快五倍。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-6-1 16:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:排序
这个题目把我吸引来了,
先收下,以后慢慢消化

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-1 16:35 | 显示全部楼层
原帖由 Zamyi 于 2011-6-1 11:36 发表
哈哈,如果你用汇编语言做,也许会更快。


VBA代码无须修改可以直接编译运行,换成汇编代码还得自己重写一遍整个程序。

TA的精华主题

TA的得分主题

发表于 2011-6-1 16:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我猜想VBA和VB编译的差异和下面两段程序的道理是一样的,就是说没有编译要多花时间去找程序的入口,因为它是一个递归过程:
With Workbooks(1).Worksheets(1).Range("A1")
  For i = 1 To 1000000
    a = .Value
  Next
End With

For i = 1 To 1000000
  a = Workbooks(1).Worksheets(1).Range("A1").Value
Next

TA的精华主题

TA的得分主题

发表于 2011-6-1 17:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
要好好学习,先留个脚印。

TA的精华主题

TA的得分主题

发表于 2011-6-1 21:48 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-1 22:19 | 显示全部楼层
原帖由 Zamyi 于 2011-6-1 16:59 发表
我猜想VBA和VB编译的差异和下面两段程序的道理是一样的,就是说没有编译要多花时间去找程序的入口,因为它是一个递归过程:
With Workbooks(1).Worksheets(1).Range("A1")
  For i = 1 To 1000000
    a = .Value ...


15楼说的应该是对的

不管什么语言,最后肯定是要变成机器指令才能执行

VBA,Ruby这样的解释型语言估计是执行的时候才编译,然后执行,所以实际的运行时间 = 编译时间 + 运行时间

而且VBA编译器生成的机器指令,其效率肯定也不如VS2010。

当然,Ruby的核心方法肯定是已经编译好的指令

据说c编译器,不同版本生成的机器指令,其效率都相差好几倍,有时候与其优化程序,还不如换个编译器算了。

TA的精华主题

TA的得分主题

发表于 2011-6-1 22:58 | 显示全部楼层
看不懂啊!
请法师把那个不要钱的东东也传上来?
最关心的就是.能否将现在的VBA代码全部转化为你说的东东?

那样会不会使VBA的速度来一个突破?

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-2 00:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 sunsoncheng 于 2011-6-1 22:58 发表
看不懂啊!
请法师把那个不要钱的东东也传上来?
最关心的就是.能否将现在的VBA代码全部转化为你说的东东?
那样会不会使VBA的速度来一个突破?


那个不要钱的东东 安装文件1.75GB, 怎么可能传上来???

现有的VBA代码全部转化为VB代码,编译为exe执行,当然是可以的。

不过绝对不是所有VBA代码都能转换,也不是所有VBA代码都能提速6倍就是了

简单的 i=i+1 这样的数值计算语句,可以提速六倍。

但是 [a1].value = i 这样的语句,就根本无法转换了,VB编程环境里面根本就不存在Excel工作表,访问Excel工作表的方法自然也跟VBA不一样。

TA的精华主题

TA的得分主题

发表于 2011-6-2 14:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 灰袍法师 于 2011-6-1 22:19 发表


15楼说的应该是对的

不管什么语言,最后肯定是要变成机器指令才能执行

VBA,Ruby这样的解释型语言估计是执行的时候才编译,然后执行,所以实际的运行时间 = 编译时间 + 运行时间

而且VBA编译器生成的 ...

我反对这种说法,按说100W相差5-6秒,编译也不须这么长时间,因为编译已经把代码翻译后放入内存,而访问翻译后的代码要通过VBA这个类,象100W估计需要500-600W次吧,试试附件中,进入QuickSort就把其改名,此后的CALL QuickSort也就找不到了,可是程序仍可以完成,可以编译一次已把代码调入内存,并不因为是递归就需要多次编译。而编译一次根本不需要几秒的时间。注意,附件只能运行一次,如须再运行必须把QuickSort2改回。

Book1.rar

10.42 KB, 下载次数: 44

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-2 15:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
VBA不仅是运行时编译,还加上编译出来的指令效率也低。

[ 本帖最后由 灰袍法师 于 2011-6-2 15:26 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 01:08 , Processed in 0.037530 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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