Range(レンジ)オブジェクト
Range【レンジ】は、範囲と訳されます。セルは、Cell【セル】オブジェクトではなく、Range【レンジ】オブジェクトで表現します。Cellオブジェクトというオブジェクトはありません。
Range【レンジ】オブジェクトは、Workbook【ワークブック】オブジェクトやWorksheet【ワークシート】オブジェクトとは、大きく異なる点があります。
ブックの場合、単体であれば、Workbookオブジェクトとして扱いその集合体であれば、Workbooksコレクションとして扱います。ワークシートの場合も、同じように、オブジェクトとコレクションが存在します。
しかし、セルの場合は、単体のセルはもちろんですが、複数のセル範囲であってもRange【レンジ】オブジェクトとして扱われます。つまり、Rangeコレクションは存在しないのです。
セルを選択する
VBAでセルを操れるようになるためには、Range【レンジ】プロパティとCells【セルズ】プロパティの特性を理解することです。
どちらも一長一短がありますが、中でもRangeプロパティはVBAの基本中の基本です。Excelの本質がセルであるように、VBAの本質はRangeプロパティになります。
Rangeプロパティでセルを選択する方法
セル番地でセルを選択する
- 単体のセル選択 A1セルを選択
Range(“A1”).Select
- 複数セル範囲選択 A1セルからC3セル範囲選択
Range(“A1:C3”).Select
Range(“A1″,”C3”).Slect 【上記が一般的】
- 非連続の複数セル選択
Range(“A1,A3,B2,B4”).Select 【A1セルA3セルB2セルB4セル選択】
Range(“A1:A2″,”B3:B4”).Select【 A1~A2セルB3~B4セル選択】
- 定義された名前付きセルを選択
Range(“detabase”).Select 【detabaseと名前が定義されたセル選択】
- 行、列全体を選択
Range(“1:1”).Select 【1行目選択】
Range(“1:3”).Select 【1~3行目選択】
Range(“A:A”).Select 【A列選択】
Range(“A:C”).Select 【A列~C列選択】
Range(“1:3″,”5:5”).Select 【1~3行目と5行目選択】
Range(“A:C”,”E:E”).Select 【A~C列選択とE列選択】
- Rangeプロパティのショートカット
Range(“A1:C3”).Select→[A1:C3].Select
※あまり一般的ではないようですが、
省略して記述もできます。
Cells(セルズ)プロパティでセルを選択する方法
セルはCellsプロパティを使っても選択することができます。
Cellsプロパティの書式は
Cells(行,列)
の形式で表記します。
- 一つのセルを選択する
Cells(1,1).Select 【A1セルを選択】
Cells(1,”A”).Select 【上記が一般的】
- セル全体の選択
Cells.Select 【全セル選択】
Cellsプロパティの制限
Cellsプロパティが参照できるのは、「一つのセル」か「全セル」のどちらかです。
Rangeプロパティのように、自由に複数のセル範囲を参照することはできません。
Cellsプロパティでセル範囲を参照するときは、Rangeプロパティと組み合わせて使います。
- Cellsプロパティでセル範囲を選択する
Range(Cells(1,1),Cells(3,3)).Select 【A1セル~C3セル範囲選択】
RangeプロパティとCellsプロパティに使い分け
ここまでの解説では、Cellsプロパティは
- 表記がわかりずらい
- 単体ではセル範囲の参照ができない
- 名前の定義されたセルを参照できない
など、デメリットが目立ちますが、Cellsプロパティにもメリットがあるからこそプロパティとして登録されています。
その、大きなメリットとしてあげられるのが、引数に数値変数を使用できることです。
A1セルからA100セルに整数を代入するコード例
Sub sample() Dim i As Integer For i = 1 To 100 Cells(i,1) = i Next i End Sub
このように変数やFor文による繰り返し処理のときにCellsプロパティは重宝します。
セルの値を取得する
セルの値を取得するには、Value(バリュー)プロパティを使用します。
A1セルに入力されている値をメッセージボックスに表示するコード
Sub sample() MsgBox = Range("A1").Value End Sub
MsgBox関数に関してははこちらをご覧下さい。
セルに値を設定する
A1セルに123と設定しA2セルにABCを設定するコード
Sub sample() Range("A1").Value = 123 Range("A2").Value = "ABC" End Sub
文字列を代入するときはその値を”ダブルクォーテーション”で囲みます。
セルの値の取得や設定にはValueプロパティを使用することがわかりましたが、実は、Valueプロパティは省略しても、Valueプロパティが設定されたものとして処理されます。
Valueプロパティを省略して値をセルに設定するコード
Sub sample() Range("A1") = 123 Range("A2") = "ABC" End Sub
セルに数式を設定する・取得する
セルのデータには、「値」と「数式」があります。セルの値を扱うには、Valueプロパティを使用しました。
セルの数式を扱うには Formula(フォーミュラ)プロパティを使います。Formula(フォーミュラ)は式という意味があります。
Formulaを使用した数式をセルに設定するコード例
Sub Sample() Range("A1:A10").Formula = "=1+2" Range("A11").Formula = "=SUM(A1:A10)" End Sub
上記のコードはA1セル~A10セルに数式で1+2を設定して、A11セルにSUM(サム)関数でA1セル~A10セルの合計を計算しています。結果はA1セル~A10セルに3が表示されA11セルがその合計の30が表示されます。
実は、Valueプロパティでも同じ結果が得られるのですが、数式を取得するときにValueプロパティの場合数式ではなく値が取得されてしまうので、数式を扱うときはFormulaプロパティを使用したほうが間違いありません。
数式取得のコード例
Sub Sample1() Range("A1").Formula = "=1+2" Range("B1").Formula = Range("A1").Formula End Sub
Sub Sample2() Range("A1").value = "=1+2" Range("B1").value = Range("A1").Value End Sub
上記の2種類のコードはいずれも、A1セルに設定した数式1+2をB1セルで取得しています。
表面上はA1セルB1セルともに3が表示されますが、上記のsample1のFormulaを使った方は、B1セルに1⁺2の数式も代入されますが、sample2のValueプロパティの方は、B1セルに数式は代入されず値の3が代入されます。
以上でセル操作についての解説を終了しますが、セルの操作に関しては下記の情報もご覧ください。
OffsetとResizeを使いこなそう
セルの値だけコピーして貼り付ける方法