【Excel VBA】セル範囲の扱いについてマスターする【Range オブジェクト】

目次

はじめに

Excel VBA マクロを作成するときに、シート上のセル範囲について操作することも多いかと思います。

VBA においてはセル範囲は Range オブジェクトとして扱います。

ここでは Range オブジェクトの扱い方について説明します。

VBA でのセル範囲の指定方法

以下のようなシートがあったとします。

このシート上の表に該当するセル範囲(B3~D5 の範囲)を VBA 上で表現すると以下のようになります。

ActiveSheet.Range("B3:D5")

'または

ActiveSheet.Range(Cells(3, 2), Cells(5, 4))

一般的な定義で言うと以下のようになります。

セル範囲の指定方法

  • <対象シート>.Range("<対象範囲の左上セル>:<対象範囲の右下セル>")
    • ※この場合のセルの指定形式は <アルファベット><数字>

または

  • <対象シート>.Range(<対象範囲の左上セル>,<対象範囲の右下セル>)
    • ※この場合のセルの指定形式は Cells(<行>,<列>)

セル範囲(Range オブジェクト)を変数に格納する

Range オブジェクトは Range オブジェクト型の変数に格納することができます。

定義の構文は以下の通りです。

Range オブジェクト変数の定義

  • Dim <変数名> As Range

また、Range オブジェクトは単なる値ではなくプロパティを持ったオブジェクトという分類になります。

オブジェクトを変数へ格納する場合は、以下のように行頭に Set を付けます。

Range オブジェクト変数へのオブジェクトの格納

  • Set <変数名> = <オブジェクト>

例えば以下のように Range オブジェクト変数を定義し、変数に Range オブジェクトを格納します。

Sub main()
    Dim ra As Range
 
    Set ra = ActiveSheet.Range("B3:D5")

End Sub

Range オブジェクト内の各セルの値を取得する

Range オブジェクトの中の各セルの値の取得をしたい場合があると思います。

以下のように記述することで、Range オブジェクト内の指定セルの値を取得することができます。

Range オブジェクト内のセルの値の取得

  • <Range オブジェクト>.Cells(<行位置>,<列位置>).Value

行位置、列位置は Range オブジェクト内での左上セルを 1 行 1 列とした場合の位置です

例えば、以下のシートの B3~D5 の範囲に対応する Range オブジェクトを考えます。

Range オブジェクト内のセルを指定する際の Cells(<行位置>,<列位置>) は以下のようになります。

上のシートを対象として以下のマクロを実行して、実際にどの値が取得できるかを確認してみます。

Option Explicit

Sub main()
    Dim ra As Range
    Dim i%, j%, cell_value$
        
    Set ra = ActiveSheet.Range("B3:D5")
    
    For i = 1 To 3
        For j = 1 To 3
            cell_value = ra.Cells(i, j).Value
            Debug.Print "ra.Cells(" & i & "," & j & ").Value = " & cell_value
        Next
    Next
            
End Sub

以下のような結果となり、想定通りの結果となっていることが分かります。

Range オブジェクト内のセルの値を変更する

Range オブジェクトの中の各セルの値を変更したい場合があると思います。

以下のように記述することで、Range オブジェクト内の指定セルの値を変更することができます。

Range オブジェクト内のセルの値の変更

  • <Range オブジェクト>.Cells(<行位置>,<列位置>).Value = <変更後の値>

行位置、列位置は Range オブジェクト内での左上セルを 1 行 1 列とした場合の位置です

例えば、以下のシートがあったとします。

このシートの表になっている B3~D5 セルの範囲に Range オブジェクトを使って値を入力してみます。

サンプルのコードは以下の通りです。

Option Explicit

Sub main()
    Dim ra As Range
        
    Set ra = ActiveSheet.Range("B3:D5")
    
    ra.Cells(1, 1).Value = 11
    ra.Cells(1, 2).Value = 12
    ra.Cells(1, 3).Value = 13
    ra.Cells(2, 1).Value = 21
    ra.Cells(2, 2).Value = 22
    ra.Cells(2, 3).Value = 23
    ra.Cells(3, 1).Value = 31
    ra.Cells(3, 2).Value = 32
    ra.Cells(3, 3).Value = 33

End Sub

このマクロを実行すると以下のように表内に値が入力されます。


あわせて読みたい
Excel VBA マクロ作成用情報まとめ 【初学者向け情報】 【Excel VBA】初心者からマクロを作成できるようになるまでの学習ロードマップ 【Excel VBA マクロ独学者・初心者向け】VBA 学習の第一歩【このペー...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

とあるエンジニアです。

当ブログでは Excel VBA のマクロ作成に役立つ情報を中心に情報展開しています。

Excel VBA マクロを使いこなして時短し、人生の質『QOL』を高めていきましょう。

プロフ画像:Copyright (C) SQUARE ENIX CO., LTD. All Rights Reserved.

目次