ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 挑战你的Excel知识,一起测验下 免费下载Excel行业应用视频
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
楼主: excelflower

[讨论] 老师给的大青枣烤蹄,现交作业。

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-12-9 21:02 | 显示全部楼层
本帖已被收录到知识树中,索引项:Range对象
原帖由 liuguansky 于 2010-12-9 20:44 发表
10万行0.8S左右
512内存838809

838810

多谢老师赐教!

我说为什么我在做字符串连接时,超过一定数量就出错,而且出错数量没明显的规律,原来是这个Len(str1) > 238!对不?老师......

[ 本帖最后由 excelflower 于 2010-12-9 21:03 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-12-9 22:51 | 显示全部楼层
原帖由 liuguansky 于 2010-12-9 20:44 发表
10万行0.8S左右
512内存838809

838810


80楼这种处理方法也很聪明,大大减少了Range的数量

如果跟Union结合,估计应该100万行也是1秒完成。

毕竟有两种耗时的操作

1 Range上色 ,如果要上色的Range太多,就慢 (当然,现在80楼的附件100万行才4秒,没什么必要再去优化了)
2 为了减少Range上色次数,没其它办法也只能用Union,但是Union次数太多也不行

我想最快速的方法应该是

100万行每100行 set 一个 Range,那么最多只有10000 Range

而Union已经证明合并10000 Range不到0.3秒

结论就是 100万行可望在1秒完成。而且最令人高兴的是,对于不相邻的单元格也一样可用,Yeah!

[ 本帖最后由 灰袍法师 于 2010-12-9 22:54 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-12-9 22:58 | 显示全部楼层
RANGE区域中的地址,字符限制好象是255!?加了判断又影响速度!老师看看怎么办?谢谢先!
  1. Sub MyColor()
  2.     Dim i#, n#, MyStrA$, MyStrB$, Arr, Rng, T As Date
  3.     T = Timer
  4.     Arr = Range("a1:a100000")
  5.     For i = 1 To 100000
  6.         If Arr(i, 1) < 60 Then
  7.             If Len(MyStrA) + Len(i) + 2 < 256 Then
  8.                 MyStrA = MyStrA & MyStrB & "," & "A" & i
  9.                 MyStrB = ""
  10.             Else
  11.                 MyStrB = "," & "A" & i
  12.                 Set Rng = Range(Mid(MyStrA, 2))
  13.                 Rng.Interior.ColorIndex = 3
  14.                 MyStrA = ""
  15.                 Set Rng = Nothing
  16.             End If
  17.         End If
  18.     Next i
  19.     MsgBox "运行时间:" & Format(Timer - T, "0.00") & "秒。"
  20. End Sub
复制代码

255填色测试.rar

658.99 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2010-12-10 02:27 | 显示全部楼层
哎呀

我现在才发现,楼上许多作弊的啊

把单元格字体改红色,要比单元格本身颜色改红色慢三倍

也就是说 .Interior.ColorIndex =3 比 .Font.Color = 255 要快得多

所以80楼如果也是字体改红色的话,100万行是15秒,不是5秒

不过用字符串去一次定义一个RANGE的确是好办法。

所以我也抄袭+作弊了,现在100万行是3.5秒,10万行0.45秒

Union函数连接大量单元格速度超慢,真是可惜了,不然900个Range只需合并31次吖,而不是上色900次啊

可惜这么一个大量减少操作的函数,被大量增加的函数运行时间完全抵消。。。。。。唉

我现在是生成单个字符串,然后每30个合并,这样的速度其实还不如下面的做法快

生成两个字符串,Set 的时候同时用Union连接两个Range(String),这样的Union是很快的。而且又可以少一半上色次数。

100万行只需3秒,嗯。。。。。。如果生成四个字符串。。。。。。值得思考

第10页第96楼是改进后的方法,每次只合并9个字符串RANGE,104万行2.5到2.7秒完成

本附件看不看都可以了

[ 本帖最后由 灰袍法师 于 2010-12-10 19:30 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-12-10 07:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-12-10 08:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-12-10 09:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-12-10 09:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-12-10 11:39 | 显示全部楼层
原帖由 excelflower 于 2010-12-9 21:02 发表

多谢老师赐教!

我说为什么我在做字符串连接时,超过一定数量就出错,而且出错数量没明显的规律,原来是这个Len(str1) > 238!对不?老师......

关于238的问题:
RANGE最大支持字符串是255
而最后一次连接的最大文本是",A99999:A100000"加一个预留位为16
可以用239判断,238只是为了吉利嘛。。

TA的精华主题

TA的得分主题

发表于 2010-12-10 11:43 | 显示全部楼层
原帖由 灰袍法师 于 2010-12-10 02:27 发表
哎呀

我现在才发现,楼上许多作弊的啊

把单元格字体改红色,要比单元格本身颜色改红色慢三倍

也就是说 .Interior.ColorIndex =3 比 .Font.Color = 255 要快得多

所以80楼如果也是字体改红色的话,100万行 ...

学习UNION用法了。这样又减少了单元格对象的调用。果然快了。不过分组判断更长了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,高效办公专列,每天发车

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

GMT+8, 2019-9-23 16:59 , Processed in 0.075044 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

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

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

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