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

看板Visual_Basic作者 (㊣康少校是死到哪裡去了)時間10年前 (2013/08/16 15:35), 編輯推噓3(301)
留言4則, 4人參與, 最新討論串1/1
※ 引述《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

08/16 15:57, , 1F
剛入門的時候有這一篇該有多好 (淚奔...)
08/16 15:57, 1F

08/16 17:03, , 2F
我都習慣都Cells(r,c) 不用ij當變數 很難記
08/16 17:03, 2F

08/16 18:09, , 3F
(r, c)不錯,(i, j)純粹是以前唸書都這樣沒多想 :P
08/16 18:09, 3F

08/20 08:07, , 4F
這個實用
08/20 08:07, 4F
文章代碼(AID): #1I3TPBGI (Visual_Basic)