|
本帖最后由 香川群子 于 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) 根据变量扩展区域。
以上。
看完以后,请自己研究解决问题。
|
|