VBA内指定range(格位)的方法

楼主: MOONRAKER (㊣牛鹤鳗毛人)   2013-08-16 15:35:35
※ 引述《hank951 (法克)》之铭言:
: 像是以RANGE来说
: 假设有个x是变量
: range("A3:A7")
[中略]
: 像是今天又有什么 R[-1]:R[-12]
: 这是已知到-12的情况
: 我想用变量x来代替
[下略]
VBA内指定range的方法
(以前好像写过一次,但是现在找不到了。这应该列为FAQ的。)
(1) 单一格位,绝对座标,数字参数
cells(i, j)
其中 i 为列(Y轴),j 为栏(X轴),从 1 开始。
例如 cells(1, 1) 会参考到 A1 , cells(5, 3) 参考到 C5 。
(2) 选取区域,绝对座标,数字参数
range(cells(i1, j1), cells(i2, j2))
cells(i1, j1) 是选取区域的左上角,cells(i2, j2) 是右下角,
或者倒过来也可以-总之就是长方形对角线的两顶点。
例如 range(cells(2, 2), cells(6, 3)) 选取 B2:C6
range(cells(3, 8), cells(3, 1)) 选取 A3:H3
(3) 单一格位,绝对座标,字串参数
range("<col><row>")
用你在worksheet画面上看到的座标来选取格位,
例如 range("A5") range("CA10")
注意他的参数是一个字串,所以才会用到 & 来连接,
比如说 y=5, 那么 range("A" & y) 可以得到 A5。
但是这非常难用:如果改变的不是列数你要怎么办?
再弄一个变量 x 从 "A" 跑到 "Z" ? 老实说这还算简单,可是那 Z 以后呢?
所以请老实用cells(i, j)。
(4) 选取区域,绝对座标,字串参数
RANGE("<col1><row1>:<col2><row2>")
也是用跟worksheet内一样的格式来选取区域,
例如 range("B5:G8"), range("R2:D2")
他跟以上(3)有一样的问题,字串组合非常难弄
对新手而言拼一节字串就已经够惨了,
拼啥 x1 & y1 & ":J13" 这种的简直会死人。
而且不但很难弄,他也没有比以上(1)(2)的写法多出什么功能-
这才是致命伤。
既然这两种写法是等效的,就不要白费工夫在字串操作上面
尤其新手更不应该浪费这种时间。
(*) R<i>C<j>
R<i1>C<i1>:R<i2>C<j2>
R1C1这种写法只会出现在录下来的宏中的公式内
不能在range()内使用,比如说RANGE("R3C7")只会得到错误
可以学着看,比如说R1C7和G1等效,但是不要用。
(!) R[<di>]C[<dj>]
R[<di1>]C[<dj1>]:R[<di2>]C[<dj2>]
这个更整人,di, dj是相对位置,也是只出现在录下来的宏中的公式内。
比如说R[-2]C[-1]表示相对于目前selection上面两格,左边一格的地方。
或者像这个 ActiveCell.FormulaR1C1 = "=SUM(R[-8]C[-5]:R[-1]C[-4])"
计算以目前选取格的(-8, -5)格和(-1, -4)格构成的选取区的总和。
这几乎不可能自己操作,
实用上宁愿用 .offset(di, dj)函数来取得,或者根本不用。
对新手而言,记得(3)(4)和(1)(2)可以互换,这样就好了。
用到相对座标的宏,十之八九可以用绝对座标来达成,
可能不一定一步到位,但是至少每一步还在你的控制之下。
 
作者: Marty (DNA探针)   2013-08-16 15:57:00
刚入门的时候有这一篇该有多好 (泪奔...)
作者: tsongs (......)   2013-08-16 17:03:00
我都习惯都Cells(r,c) 不用ij当变量 很难记
楼主: MOONRAKER (㊣牛鹤鳗毛人)   2013-08-16 18:09:00
(r, c)不错,(i, j)纯粹是以前唸书都这样没多想 :P
作者: jianliung (Do ....Loop Until OOXX)   2013-08-20 08:07:00
这个实用

Links booklink

Contact Us: admin [ a t ] ucptt.com