Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4032|回复: 13

[已解决]请教老师有没有替换循环语句分配更快的语句,谢谢!

[复制链接]
发表于 2015-2-23 17:22 | 显示全部楼层 |阅读模式
本帖最后由 lsy1133 于 2015-2-23 17:36 编辑

见附件,假期费了老大劲编了一个底稿,但对于分配清单达到5000行以上时速度特别慢,请教老师有没有更好的语句使分配更快的方法?谢谢!
最佳答案
2015-2-27 09:07
lsy1133 发表于 2015-2-26 21:05
我试过了,并不能提高速度的!不过我自己改下代码,把成块区域判断出来并通过copy粘贴办法,速度 ...

可以改成:
Sheets(RngTJ.Offset(0, -3).Value).Range("B8").Resize(RngTJ).Value = Sheets("KM").Cells(StarKM, 3).Resize(RngTJ)

这样也会快一些。

财审底稿(国企版).rar

476.1 KB, 下载次数: 45

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-2-23 21:41 | 显示全部楼层
回复

使用道具 举报

发表于 2015-2-23 22:34 | 显示全部楼层
粗略看了一下代码,大量使用了单元格直接操作,所以会使速度变慢.
建议可以改用数组或字典操作,可以成倍提高速度和效率.
回复

使用道具 举报

 楼主| 发表于 2015-2-23 23:32 | 显示全部楼层
不会呀,数组和字典如何操作?
回复

使用道具 举报

发表于 2015-2-24 09:55 | 显示全部楼层
数组+字典,上万行都没问题。
回复

使用道具 举报

 楼主| 发表于 2015-2-24 16:51 | 显示全部楼层
孤单单 发表于 2015-2-24 09:55
数组+字典,上万行都没问题。

哪儿能找到用法呀?请教,或者帮我改下代码,可以吗?
回复

使用道具 举报

发表于 2015-2-25 16:37 | 显示全部楼层
其他不管,至少那么多   Sheets(RngTJ.Offset(0, -3).Value)可以用set sh=Sheets(RngTJ.Offset(0, -3).Value),然后引用sh。。。。。
回复

使用道具 举报

 楼主| 发表于 2015-2-26 21:05 | 显示全部楼层
本帖最后由 lsy1133 于 2015-2-26 21:13 编辑
grf1973 发表于 2015-2-25 16:37
其他不管,至少那么多   Sheets(RngTJ.Offset(0, -3).Value)可以用set sh=Sheets(RngTJ.Offset(0, -3).Valu ...


       我试过了,并不能提高速度的!不过我自己改下代码,把成块区域判断出来并通过copy粘贴办法,速度快多了,我测试下上万行大概50秒钟,原先一个个单元格找需要10多分钟也分不完。
      主要是这两句:
        Sheets("KM").Range("C" & StarKM & ":C" & StarKM + RngTJ - 1).Copy
        Sheets(RngTJ.Offset(0, -3).Value).Range("B8").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
      粘贴语句是通过录制宏获取的,不知还能否改进?
回复

使用道具 举报

发表于 2015-2-27 09:07 | 显示全部楼层    本楼为最佳答案   
lsy1133 发表于 2015-2-26 21:05
我试过了,并不能提高速度的!不过我自己改下代码,把成块区域判断出来并通过copy粘贴办法,速度 ...

可以改成:
Sheets(RngTJ.Offset(0, -3).Value).Range("B8").Resize(RngTJ).Value = Sheets("KM").Cells(StarKM, 3).Resize(RngTJ)

这样也会快一些。
回复

使用道具 举报

 楼主| 发表于 2015-2-28 04:28 | 显示全部楼层
香川群子 发表于 2015-2-27 09:07
可以改成:
Sheets(RngTJ.Offset(0, -3).Value).Range("B8").Resize(RngTJ).Value = Sheets("KM").Cells ...

非常简洁的语句,确实能提高速度,不过区域如何表达,如下:Sheets(RngTJ.Offset(0, -3).Value).Range(Mid(Bpd.Address(0, 0), 1, 1) & "8").Resize(RngTJ).Value = Sheets("KM").Cells(StarKM,4:StarKM,7).Value

即:想表达如sheet1表range(B8:C15)的值等于Sheets("KM").range(G10:H17)的值如何表达?
        
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 07:19 , Processed in 0.382789 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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