Excelの処理は、セルの操作が中心になります。
セルを単独で参照するには、Rangeオブジェクトを使います。例えば、A1セルを参照する場合は以下のようにします。
ExcelのシートA1に文字列を入力します。
VBエディタで以下のように入力します。
Sub ReferCell()
Dim cellValue As Variant
cellValue = Range("A1").Value
MsgBox cellValue
End Sub
このコードでは、A1セルの値を取得してメッセージボックスに表示します。
このようにセルの値を取得することが出来ました。
VBAでセル参照する構文
セルを参照する構文
オブジェクト.Range(セル指定)
オブジェクト.Range(先頭セル,終端セル)
セルを参照する部分に「オブジェクト」という言葉があります。
Excelの操作を自動化するために、さまざまなオブジェクトを使用します。
オブジェクトモデル
VBAのオブジェクトモデルは、オブジェクトがどのように組織されているかを示す階層構造です。
Rangeオブジェクトは、VBAのオブジェクトモデル内で重要な位置を占めています。
- Application(アプリケーション)
- Workbooks(ワークブックズ)
- Workbook(ワークブック)
- Worksheets(ワークシートズ)
- Worksheet(ワークシート)
- Range(レンジ)
- Chart(チャート)
- Shape(シェープ)
この階層構造からわかるように、RangeオブジェクトはWorksheetオブジェクトの一部として存在しています。具体的には、各ワークシート内のセルやセル範囲を表します。
Rangeオブジェクト参照方法
参照するセル | 指定例 | 内容 |
---|---|---|
単一のセル | Range(“A1”) | セルA1を参照 |
離れた単一セル | Range(“A1,E1”) | セルA1とE1を参照 |
セル範囲 | Range(“A1:E1”) | セルA1~E1を参照 |
Range(“A1″,”E1”) | ||
離れたセル範囲 | Range(“A1:C1,A5:C5) | セルA1~C1とセルA5~C5を参照 |
列全体 | Range(“A:C”) | 列A~列Cを参照 |
行全体 | Range(“1:3”) | 行1~行3を参照 |
名前付きセル範囲 | Rang(“成績”) | 名前付きセル範囲「成績」を参照 |
Rangeオブジェクトを使用してセル範囲を参照する
最も基本的な方法は、Rangeオブジェクトを使用することです。範囲を指定する際には、セルのアドレスを文字列で指定します。
Sub ReferSimpleRange()
Dim cellRange As Range
Set cellRange = Range("A1:B2")
cellRange.Interior.Color = RGB(255, 255, 0) ' 範囲を黄色に塗りつぶす
End Sub
この例では、A1からB2までの範囲を参照し、その範囲のセルを黄色に塗りつぶしています。
setを使う場合と使わない場合は何か違いがあるのですか?
はい、VBAにおけるSetキーワードの使用には重要な違いがあります。Setキーワードはオブジェクトを変数に代入するために使われ、値を直接代入する場合には使いません。
Setを使う場合
オブジェクトを変数に代入する場合にSetを使用します。
Sub SetExample()
Dim cellRange As Range
Set cellRange = Range("A1:B2") ' Rangeオブジェクトを変数に代入するためにSetを使用
cellRange.Interior.Color = RGB(255, 255, 0) ' 範囲を黄色に塗りつぶす
End Sub
Setを使用するのは、Rangeオブジェクトそのものを変数に代入する場合です。
Setを使わない場合
VBAでRangeオブジェクトに対してSetを使用しない場合は、Rangeオブジェクトそのものではなく、その値やプロパティを操作する場合です。
Rangeオブジェクトのプロパティには、セルの値、フォントの設定、セルの背景色などが含まれます。これらのプロパティを設定する場合にはSetを使用しません。
Sub SetCellValue()
Range("A1").Value = "Hello, World!"
End Sub
Setを使用しないのは、Rangeオブジェクトのプロパティ(値、フォント、色など)を設定する場合やメソッド(Copyなど)を使用する場合です。
もう一つの参照方法
セル参照にはRange以外にCellsプロパティがあります。
Cellsプロパティは、特定のシート内のセルを行番号と列番号で参照するために使用されます。これにより、プログラム的にセルを操作することが容易になります。
セルを参照する構文
オブジェクト.Cells(行番号,列番号)
セルの値を取得・設定する
Cells(行番号, 列番号)で特定のセルを参照できます。
セルの値を取得
Sub GetCellValue()
Dim cellValue As Variant
cellValue = Cells(1, 1).Value ' A1セルの値を取得
MsgBox cellValue
End Sub
セルの値を設定
Sub SetCellValue()
Cells(1, 1).Value = "Hello, World!" ' A1セルに値を設定
End Sub
上記のようにRangeと同じ動作が可能です。
Cellsプロパティはループと組み合わせて使用することが多いです。これにより、シート内の複数のセルを効率的に操作できます。
1行目のセルから順に値を設定
Sub SetRowValues()
Dim i As Integer
For i = 1 To 10
Cells(1, i).Value = i ' 1行目のセルに1から10までの値を設定
Next i
End Sub
For文との組み合わせで良く使用します。
CellsとRangeの組み合わせ
CellsプロパティはRangeオブジェクトと組み合わせて使用することもできます。これにより、より柔軟にセル範囲を指定することができます。
Sub RangeWithCells()
Dim cellRange As Range
Set cellRange = Range(Cells(1, 1), Cells(5, 5)) ' A1からE5までの範囲を参照
cellRange.Interior.Color = RGB(200, 200, 255) ' 範囲を淡い青色に設定
End Sub
CellsプロパティのSetについて
Cellsプロパティ自体にはSetプロパティはありませんが、Cellsプロパティを使用してセルやセル範囲を指定し、それをRangeオブジェクトとして扱うことができます。
Setキーワードは、オブジェクト変数に特定のオブジェクト(この場合はRangeオブジェクト)を割り当てるために使用します。
ワークシートオブジェクトにSetする形で使われます。
Sub SetCellsValues()
Dim rng As Range
Set rng = Worksheets("Sheet1").Cells(1, 1) ' A1セルを指定
rng.Value = "Hello, World!"
End Sub
セルの参照方法には色々とあります。これらの基本的な方法を理解することで、VBAを使ったExcelのセル操作が効率的に行えるようになります。