Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: lsy1133

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

[复制链接]
发表于 2015-2-28 08:52 | 显示全部楼层
本帖最后由 香川群子 于 2015-2-28 09:00 编辑
lsy1133 发表于 2015-2-28 04:28
非常简洁的语句,确实能提高速度,不过区域如何表达,如下:Sheets(RngTJ.Offset(0, -3).Value).Range(Mi ...

授人以鱼不如授人以渔……

告诉你单元格赋值的秘密:

一、基本语句:
  Range([范围1]).Value = Range([范围2]).Value

效果,直接把右边单元格区域中的内容(不含公式和格式)赋值给左边区域。
左边第一个.Value不能省,右边的则有时可以省去。如保险,则都不要省。

这么做,由于省去了Select选择范围、Copy To Memory的操作,所以速度效率是最高的。

注意事项:
① 左右两边【区域范围】要同等大小
可以使用 Range([范围左上起始位置).Resize([行数],[列数]) 来调整或统一大小。

② 如果Range([范围])都是本工作表内区域,则无需多余地使用Sheet前缀。
如果一个是本工作表内区域、另一个是跨工作表区域,则仅仅跨工作表区域需要Sheet前缀。
两个都使用会降低效率。

二、 单元格位置、或单元格范围引用方法:
① Range("字符串地址")  如: Range("A1")、 Range("A1:D10")
    行数可以是变量、 如:Range("A1:D" & m)、Range("A" & r1 & ":D" & r2)

好处是列标签比较明显、易理解。坏处是表达式繁琐,编写、修改时容易错。

② Cells(i,j) 指定第 i 行 第 j 列位置。

好处是非常简单,如行、列都为变量则非常方便。
坏处是列数不如列标签字符容易理解。比如,第10列 = J列

但如果列位置固定,也可使用 Cells(i,"J") 这样的方式来指定位置也就可以了。

但Cells(i,j)仅能指定单个单元格,不能直接指定单元格区域,
需要使用 Cells(i,j).Resize(m,n)方式来扩展、指定矩形局域。


③ 偷懒但好用的直接指定方式:[a1:d10]
[ ] 这样一对中括号,其实是VBA中的自动执行中括号[]中字符表达式的命令。
其中的字符表达式无需用" "区分,但却不作为变量名使用。
(注意 a1 = 10 就是把"a1"作为变量名使用了,而 t = [a1] 时,其中的a1是得到Range("a1")的效果,而不是变量a1)

由于[ ] 中内容都将作为字符串使用,所以[ ]中不能使用字母字符串作为活动变量。
所以,仅当起始单元格位置固定时,可以这么用。
可以扩展区域,成为: [a1].CurrentRegion 即A1当前区域,或 [a1].Resize(m,n) 根据变量扩展区域。


以上。

看完以后,请自己研究解决问题。





excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2015-2-28 09:07 | 显示全部楼层
补充:
Range([范围1]).Value = Range([范围2]).Value

① 左右两边【区域范围】要同等大小

其实是这样子:
① 如果左边范围<右边范围,那么左边范围会被右边范围对应位置(都以左上角为起始位置)覆盖。
② 如果左边范围=右边范围,那么正好覆盖。
③ 如果左边范围>右边范围,那么左边范围多出部分会被 #N/A 错误值覆盖。

呵呵。
因此,一般说需要② 同等大小。
回复

使用道具 举报

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

这个语句果然提速,把所有循环语句都替换掉,速度由原先10多分钟居然缩短到6秒,太感谢你了!
回复

使用道具 举报

 楼主| 发表于 2015-3-1 09:07 | 显示全部楼层
香川群子 发表于 2015-2-28 09:07
补充:
Range([范围1]).Value = Range([范围2]).Value

我试过这种方法,和Copy方法速度差不多,还是用Resize这个方法速度最快,快的惊人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 13:31 , Processed in 0.199062 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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