VBAでセルの参照方法

投稿日: 2024年5月31日

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のセル操作が効率的に行えるようになります。

記事