VBAでは、セルを「Rangeオブジェクト」と表現する(Cellオブジェクトではない!)。
セルを指定するには2通りの方法がある。
セルは、Rangeプロパティを使って選択するのが一般的である。
【ケース1】1つのセルを選択する
Sub RageSel1()
Range("C5").Select
End Sub
【ケース2】連続するセル範囲を選択する。
Sub RageSel2()
Range("B2:D4").Select
End Sub
Rangeは、セルのアドレスを文字列として扱うので、セルを指定する際は「"(ダブルコーテーション)」で囲まなければならない。
(注)Range("B2:D4").Select は、Range("B2", "D4").Select と記述することもできる。
【ケース3】非連続のセル範囲を選択する
その1
Sub RageSel3()
Range("B2,B4,D2,D4").Select
End Sub
その2
Sub RageSel3()
Range("B2:D3,B5:D6").Select
End Sub
セルは、Cellsプロパティを使っても選択することができる。
(例)Cellsプロパティで1つのセルを選択する
Sub CellsSel()
Cells(5, 3).Select
End Sub
(例)連続番号でセルを選択する
Sub CellsSel()
Cells(1027).Select
End Sub
(例)全セルを選択する
Sub CellsSel()
Cells.Select
End Sub
Cellsプロパティは、rangeプロパティのように自由に複数のセル範囲を参照できない。そこで、Cellsプロパティでセル範囲を参照するときには、次のようにRangeプロパティと組み合わせて使う。
(例)セル範囲を選択する
Sub CellsSel()
Range(Cells(1, 2), Cells(5, 4)).Select
End Sub
教科書79ページの補足。Cellsのメリットは、引数に数値変数を使用できること。
(例)セル【A1】から右下方向に1から100までの連続番号を入力するプロシージャ
Sub Input1To100()
Dim i As Integer
For i = 1 To 100
Cells(i, i) = i
Next i
End Sub
ここでは、Cellsプロパティと数値変数を組み合わせることで、非常に柔軟かつ高度なプロシージャが作成できるということを押さえておく。
(使い方の例)セルの数式と値をクリアする。いわゆる[Delete]キーを押した時と同じこと。
Sub ClearRange1()
Range("a1").Select
ActiveCell.Value = ""
End Sub
セルに限らず、現在選択されているもの(オブジェクト)を表す。
(例)選択セル範囲の位置を行列ともに変更する
Sub OffRange1()
Selection.Offset(-1,2).Select
End Sub
アクティブセル領域を表す
(例)アクティブセル領域を選択する
Sub SelActRange()
Range("C4").CurrentRegion.Select
End Sub
(例)先ほどの応用でデータベース範囲を選択する
Sub SelDatabase()
Range("A1").CurrentRegion.Select
End Sub
行や列の指定
Rangeプロパティを使えば、行や列全体を参照できる。しかし、RowsプロパティとColumnsプロパティを使っても行列を参照することがで きる。
(例)選択されているセル範囲の行数を取得する
Sub CountRows()
Range("B5:D7").Select
MsgBox Selection.Rows.Count
End Sub
ワークシートの指示を省略した場合
例:アクティブワークシート「Sheet1」で、ワークシート(Sheet2」のシートモジュールに記述したとき
Sub sample()
Range("A1").Value = 100
End Sub
ワークシート「Sheet2」のセル【A1】に数値(100)が代入される。詳しくは後述。
Sub sample2()
ActiveCell.Value = 100
Range("B3").Value = "VBA"
End Sub
セルの値をダイアログボックスに表示する
Sub sample2()
MsgBox Range("A1").Value
End Sub
(注)MsgBoxは、代入された値をダイアログボックスに表示する関数(教科書86ページ参照)
VBAではプロパティを省略する書き方ができる。
Textプロパティは、セルに表示されている値を返す。Textプロパティは読み取り専用であり、値を代入することはできない。
Textプロパティはセルに表示されているイメージをそのままコピーするプロパティであり、使うことはあまり推奨しない。
セルに入力されている数式を表す。Valueプロパティがセルの「値」を扱うのに対して、ここはあくまで「数式」である。違いを理解すること。
絶対参照でも相対参照でも構わない。
セルにIFワークシート関数を入力する場合
(工事中)
リンクはご自由にどうぞ。