Excel VBAで指定した範囲のサイズを変更する:Resize

Resizeプロパティを使うと、Rangeで指定したサイズの範囲を変更することができます。その使い方と使用例をご紹介します。

Excelでのセル範囲選択

Excelでの作業で表の編集をする場合、

表の任意の範囲から、見出しの範囲を除いて選択したところに色を付けたい。
特定の範囲から任意の行数・列数を選択範囲から除きたい。

という場合、手作業ではうまくいかなかったり、時間がかかったりと大変な場合があります。Resizeプロパティを使えば、Excel-VBAでは簡単に行なうことが可能です。

実際の使い方

Resizeプロパティの文法は、以下の通りです。

Rangeオブジェクト. Resize(行数, 列数)

Rangeオブジェクトに関しては、後述の注意点をご覧ください。たとえば、最初に選択した範囲から一番上の行と一番下の行を除いた範囲を選択するマクロは以下の通りです。

マクロ例:

Sub Resize_Sample_01()

    Dim celRange As Range, resRange As Range

  'セルB2~G9の範囲を選択し、黄色で塗りつぶす。
    Set celRange = Range("B2:G9")

        celRange.Interior.Color = vbYellow

  '最初の選択範囲から、一番上と一番下の行を選択範囲から除き、青色で塗りつぶす。
    Set resRange = celRange.Offset(1).Resize(celRange.Rows.Count - 2)

        resRange.Interior.Color = vbBlue

  'オブジェクトを格納していた変数の解放(重要:必ず行なうこと)
    Set celRange = Nothing
    Set resRange = Nothing

End Sub

上のマクロの中の、

Set resRange = celRange. Offset(1). Resize(celRange. Rows.Count - 2)

という記述の意味は以下の通りです。

・celRange. Offset(1)で選択範囲を1行下からにする。(一番上の行を範囲外に)
・celRange. Offset(1)で範囲が1行ずつ下になったので、合計2行選択から外す。(一番下の行を範囲外に)

なお、このマクロを実行してもシート上のカーソルの選択範囲は変わりません。

マクロ作成・実行時の注意点

Rangeオブジェクトとは選択するセルの番地のことで、Range(セル番地を示す文字列)で示します。基本的には固定範囲ですが、範囲を可変にしたい場合はCellsオブジェクトと合わせて下記のように使う事も可能です。

Range(Cells(範囲の左上セルの行, 範囲の左上セルの列), Cells(範囲の右下セルの行, 範囲の右下セルの列))

上のマクロ例を書き直すと、

Sub Resize_Sample_02()

    Dim celRange As Range, resRange As Range

  'セルB2~G9の範囲を選択し、黄色で塗りつぶした。
    Set celRange = Range(Cells(2, 2), Cells(7, 9)) 'Set celRange = Range("B2:G9")と同じ

        celRange.Interior.Color = vbYellow

  '最初の選択範囲から、一番上と一番下の行を選択範囲から除き、青色で塗りつぶした。
    Set resRange = celRange.Offset(1).Resize(celRange.Rows.Count - 2)

        resRange.Interior.Color = vbBlue

  'オブジェクトを格納していた変数の解放(重要:必ず行なうこと)
    Set celRange = Nothing
    Set resRange = Nothing

End Sub

最後に、Setで変数にオブジェクトを定義した場合は、必ず

Set 変数名 = Nothing

でオブジェクトを解放することを忘れてはいけません。(詳細はSetステートメントをご参照ください。)


イベント