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