作者MOONRAKER (㊣康少校是死到哪里去了)
看板Visual_Basic
标题VBA内指定range(格位)的方法
时间Fri Aug 16 15:35:35 2013
※ 引述《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)可以互换,这样就好了。
用到相对座标的巨集,十之八九可以用绝对座标来达成,
可能不一定一步到位,但是至少每一步还在你的控制之下。
--
从前有个马铃薯王国 有个高贵伟大的国王
有的人尊敬他 有的人畏惧他 但有个人敢看不起他不只是一条龙
嘿呵 快出动 去征服 去摆平 嘿呵 快出征 去征服那条龙
嘿呵 快出动
(宰了它!轰了它!)嘿呵 快出征 去征服那条龙
:■ Potatoes and Dragons (C)Alphanim France 2004-05 :.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.163.12.174
1F:推 Marty:刚入门的时候有这一篇该有多好 (泪奔...) 08/16 15:57
2F:推 tsongs:我都习惯都Cells(r,c) 不用ij当变数 很难记 08/16 17:03
3F:→ MOONRAKER:(r, c)不错,(i, j)纯粹是以前念书都这样没多想 :P 08/16 18:09
4F:推 jianliung:这个实用 08/20 08:07