ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 开个贴讨论一下VBA怎样实现多核心处理大量数据(结论发表)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-7-10 16:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 chentx 于 2012-7-10 16:43 编辑

EXCEL本来就是设计用来处理小型数据的,你叫它去千万级的数据,不是不行,只是太勉为其难。
不要小看VBA也不要迷信VBA,知道什么地方用什么软件才是正道。
当然,楼主提的问题是如何多线程处理数据,后面的回复有点离题了。但是微软把VBA设计成不支持多线程也是有他的理由,毕竟安全、准确比快速更要占首位。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-10 17:30 | 显示全部楼层
星剑所指 发表于 2012-7-10 15:27
当然还有一个方法,就是把一个工作簿表分成10个簿,分到10电脑处理数据,处理完了再合并成一个

首先,感谢大家踊跃发言,各抒己见。

把工作簿分成几份,每份工作薄里都含VBA程序,然后手动或程序打开这几份工作表并执行之,
如果多核心的CPU就都全力运行,
这确实是一种方法!
当然,没必要去购买多台电脑了

TA的精华主题

TA的得分主题

发表于 2012-7-10 17:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
xiamen168 发表于 2012-7-10 17:30
首先,感谢大家踊跃发言,各抒己见。

把工作簿分成几份,每份工作薄里都含VBA程序,然后手动或程序打开 ...

这个方法应该是不行的
VBA的解释器依赖于Excel,而Excel任何时候只能有一个副本在运行,不信你自己试一下
我觉得唯一在一台电脑运行多个VBA的方法是:在虚拟机里面运行
当然,1000万数据也看是怎么处理,如果是排序,读取复制这些低端操作,根本不需要多线程,也就几分钟的事情。

TA的精华主题

TA的得分主题

发表于 2012-7-10 17:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
灰袍法师 发表于 2012-7-10 17:39
这个方法应该是不行的
VBA的解释器依赖于Excel,而Excel任何时候只能有一个副本在运行,不信你自己试一下 ...

可以开多个application吧

TA的精华主题

TA的得分主题

发表于 2012-7-10 18:01 | 显示全部楼层
liucqa 发表于 2012-7-10 17:43
可以开多个application吧

可以开多个excel,但是运行的只有一个,其它的都在后台挂起排队。
你可以搞两个不断改变单元格内容的VBA,就会发现只有一个单元格在变动。

TA的精华主题

TA的得分主题

发表于 2012-7-10 18:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
灰袍法师 发表于 2012-7-10 18:01
可以开多个excel,但是运行的只有一个,其它的都在后台挂起排队。
你可以搞两个不断改变单元格内容的VBA ...

是因为没加doevents导致独占吧

TA的精华主题

TA的得分主题

发表于 2012-7-10 18:52 | 显示全部楼层
liucqa 发表于 2012-7-10 18:09
是因为没加doevents导致独占吧

加 doevent 的话,速度暴降到1/10以下
结果十个同时运行的VBA,实际上速度还不如单独一个VBA,没有任何实用意义。

TA的精华主题

TA的得分主题

发表于 2012-7-10 18:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 liucqa 于 2012-7-10 18:55 编辑

一般多线程的场合比较适合异步提交网页,等待服务器返回数据。

计算什么的单线程和多线程差别确实不大。

TA的精华主题

TA的得分主题

发表于 2012-7-10 19:11 | 显示全部楼层
本帖最后由 灰袍法师 于 2012-7-10 19:24 编辑
liucqa 发表于 2012-7-10 18:55
一般多线程的场合比较适合异步提交网页,等待服务器返回数据。

计算什么的单线程和多线程差别确实不大。

是的,纯数值计算的话。
8核即使全部用上也就顶多8倍速度,没什么意义
改用VB编译出来就有5倍提速效果了
VB编译出DOS命令行程序,同时运行8个,Windows就自动帮你多进程,包管8核都是忙的。
我觉得这样比研究VBA如何实现多线程要简单安全高效得多。
不知道楼主的数据要怎么个处理法
不过一般的查询汇总之类,VBA对付千万级别是没问题的
我在这个帖的附件,就有这样的运行数据。对800万的字典进行1亿次查询,也就不到三分钟嘛。。。。。。
http://club.excelhome.net/thread-688274-1-1.html
耗时 =  149.5859秒
检测到连续可用内存 = 1216 MB
实际使用内存 = 946 MB
哈希表总记录数的峰值 = 8244965[/td] [/tr]
哈希表总查找次数 = 116166198[/td] [/tr]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-10 21:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
灰袍法师 发表于 2012-7-10 19:11
是的,纯数值计算的话。
8核即使全部用上也就顶多8倍速度,没什么意义
改用VB编译出来就有5倍提速效果了 ...

不错不错,不愧是法师呀!学习了!

不过,另外还有一种方法让VBA也能多核处理,您听说过吗?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-8 23:49 , Processed in 0.023765 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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