VBAではセルを指定する方法として「Range」と「Cells」の二種類があります、
どちらもRangeオブジェクトでセルを指定するものです。
下記にコードの記載方法をRange、Cellそれぞれサンプルで記載します。
Rangeの書き方
'■単独セル Range("C1") '■複数セル Range("A1:D10") '■複数行 (1行目から3行目すべて) Range("1:3") '■複数列 (A列からC列すべて) Range("A:C")
“C1″や”A1:D10″のようなエクセルの表現(A1形式)の為、馴染みがあり理解しやすいです。
Cellsの書き方
'■単独セル セル10行目、3列目→セル「C10」 Cells(10, 3) '■単独セル セル10行目、C列→セル「C10」 Cells(10, "C") '■複数セルはRangeで表現必要。例はA1~A5 Range(Cells(1, 1),Cells(5,1)) Range(Cells(1, "A"),Cells(5,"A"))
(10,”C”)はまだしも、(10,3)のような表現は通常エクセルでは表現されないR1C1形式です。
VBAを学び始めたばかりだと、この部分が理解しずらい概念だと思います。
しかし、VBAマクロで優先的に覚えてもらいたいのはこちらの「Cells」です。
Rangeは基本使わない!Cellsを使う
プログラムは変数で処理をする場合、Rangeだと使いづらいです。
VBA初心者だとエクセルのように使えるRangeを使いがちですが、
メンテナンスを考えるとCellsで記載すべきです。
下記例の場合、Range、CellsどちらもA1~A10に1~10の数値を入れています。
Dim i as long For i = 1 To 10 '■Rangeで設定したセルにiを入れていく。 Range("A" & i) = i '■Cellsで設定したセルにiを入れていく。 Cells(i, 1) = i Next i
上記だけ見るとRange(“A” & i) のがわかりやすいのでは?と思いがちですが、
メンテナンスがしずらいプログラムの為、避けるべきです。
実は上記のCells(i,1)の記載方法も、メンテナンスがしずらいコードの為、上記だけであればCellsを優先的に覚える必要はありません。Cellsを有効にするには定数をうまく使う事が大事です。
Cellsと定数を上手に使う
下記例の場合、定数を使用していない・使用しているパターン共にA1~A10に1~10の数値を入れています。
Dim i as long Const COL_NUMBER As Long = 1 '■定数宣言 For i = 1 To 10 '■Cellsで設定したセルにiを入れていく。 Cells(i, 1) = i '■Cellsで設定したセルにiを入れていく。 (定数を使用) Cells(i, COL_NUMBER) = i Next i
Cells(i, 1)では何をしているかコードだけでは判断できませんでしたが、
Cells(i, COL_NUMBER)の表記で、ナンバーの列に1~10の値を入れていると判断が出来るようになりました。
上記のように、Cellsの概念と定数を上手に使用する事が、マクロを自由に使う第一歩です。
Rangeを使うケース
下記のように名前定義をしているセルを参照する際は、Rangeでないとエラーになります。
マクロの組み方にもよるので、積極的に使う必要性はないと考えています。
※実際には「合計数値」の名称も定数化が望ましいですね。
Range("A100").CurrentRegion.Name = "合計数値" Range("合計数値").Select End Sub
コメント