【Excelマクロ】VBAのResizeとは?使い方や活用例を初心者向けに解説

スポンサードリンク
VBA

Excel VBAでセル範囲を操作する際に便利なのが「Resize」です。
「特定の範囲を拡張したい」といった場面で役立ちます。

この記事では「Resize」の基本的な使い方から、実用的な活用例を
サンプルコードと図を用いてわかりやすく解説いたします。

-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

スポンサードリンク

VBA(Excelマクロ)のResizeとは?

「Resize」は、指定したセル範囲の大きさ(行数・列数)を変更することができる機能です。
下図のように元々のセル範囲を基準にして、拡張したり縮小したりすることができます。

Resizeの解説

では、「Resize」の使い方・書き方を見ていきましょう。

スポンサードリンク

Resizeの使い方

基本構文は以下のとおりです。

' ▼基本構文
Resize(上下方向の範囲, 左右方向の範囲)

' ▼使用例
Resize(2, 3)

第一引数に「上下方向の範囲」を、第二引数に「左右方向の範囲」を指定します。

【引数とは?】
引数は「引き渡す数(引き渡す値)」のことで、Resizeの()内に渡す値を指します。
引数として「変更後の範囲数」を渡すと、「変更された範囲のセル」を私たちが受け取ります。
この受け取る値を「返り値(戻り値)」といいます。

例えば、魚屋さんにアジの3枚おろしを作ってもらいたい場合は、アジを渡して3枚おろしを受け取ります。
アジが引数、3枚おろしが返り値といったところでしょうか。

まずは簡単な使い方で基礎を学びましょう。

簡単な使い方

前提知識{マクロの基礎・作成から実行まで
前提知識{セルへ値を書き込み

よりわかりやすくするために、「Resize」を使わない例を先にお見せします。
下記のVBAコードを見てください。

Sub リサイズなし()
    Range("B2").Value = "Utatane"
End Sub

B2セルに「Utatane」と書き込みした例です。

Resizeを使わない場合

指定通り書き込みされました。
では次に、「Resize」で範囲を変更した例です。

Sub リサイズあり()
    Range("B2").Resize(3, 2).Value = "Utatane"
End Sub

さきほどと比べて、2行目に「.Resize(3, 2)」が追加されています。
元々のセル指定は「B2だけ」でしたが、この「Resize」が追加されたことにより、下に3つ、右に2つの計6マス分に広がります。

Resizeを使った場合の解説

なので、B2~C4セルに「Utatane」が書き込みされます。

Resizeを使った結果

範囲指定されたセルから範囲を拡大することもできます。
下記VBAコードはB2:C3(4マス)から範囲を拡大した例です。

Sub リサイズ範囲拡大()
    Range("B2:C3").Resize(3, 2).Value = "Utatane"
End Sub

B2を基準として、下に3・右に2の6マス(B2:C4)に範囲が広がります。

範囲指定から範囲を拡大した結果

注意したいのは、「Resize」で指定した範囲が最終の範囲となります。
(今回の場合は3×2マス分が最終範囲)
「Resize」分の範囲が追加されると思ってしまいがちですが違います。
5×4マス(元々の指定範囲+Resize)ではありませんので注意が必要です。

指定された範囲を縮小することも可能です。

Sub リサイズ範囲縮小()
    Range("B2:C3").Resize(1, 1).Value = "Utatane"
End Sub
Resizeで範囲を縮小した結果

拡大した場合と同じく、「Resize」で指定した範囲が最終の範囲となります。
今回の場合は(1, 1)を指定しているので、B2セル1マスが指定範囲となるので気をつけてください。

範囲に「0」やマイナスを指定することはできません。
下図のとおりエラーが発生します。

Sub リサイズエラーゼロ()
    Range("B2:C3").Resize(0, 0).Value = "Utatane"
End Sub
Sub リサイズエラーマイナス()
    Range("B2:C3").Resize(-1, -1).Value = "Utatane"
End Sub
Resizeにゼロやマイナスを指定した結果

少し高度な使い方

変数を経由して範囲を変更

前提知識{変数の宣言や使い方

範囲を変更する数値ですが、変数を経由して指定することも可能です。
下記のVBAコードを見てください。

Sub 変数を経由()
    Dim row As Integer
    Dim col As Integer
    row = 3
    col = 2
    Range("B2").Resize(row, col).Value = "Utatane"
End Sub

変数「row」「col」にそれぞれ数値を代入し、その変数をResizeに適用しています。
結果は直接指定した時と同じで、3×2マスに範囲が拡大されます。

引数を省略

Resizeは、引数である「左右方向の範囲」か「上下方向の範囲」のどちらかを省略することができます。

    Range("B2:C3").Resize(3).Value = "Utatane" ' 左右方向の範囲を省略(結果:3×2マス)
    Range("B2:C3").Resize(, 4).Value = "Utatane" ' 上下方向の範囲を省略(結果:2×4マス)

引数を省略した場合は、元の指定がそのまま反映されます。

実践的な活用例

前提知識:Excelの最終行を取得

下記VBAコードは、Excelの最終行に合わせて範囲をリサイズし、B列に「OK」と書き込みした例です。

Sub 最終行に合わせてリサイズ()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    Range("B2").Resize(lastRow - 1).Value = "OK"
End Sub

B2を基準に、最終行までの範囲をリサイズし、OKを書き込みしています。

活用例
スポンサードリンク

OffsetとResizeの違い

よく似たものに「Offset」があります。
Offsetは、セルの参照位置を変更するもので、Resizeとは違います。

Offset:セルの参照位置を移動(A1→C3など)
Resize:セルの参照範囲を変更(A1:B2→A1:C3など)

関連記事{Offsetの使い方と活用例

OffsetとResizeを連携することで、「ずらした範囲を拡大して参照する」ということも可能です。
下記のVBAコードを見てください。

Sub オフセットとリサイズ()
    Range("A1").Offset(1, 2).Resize(3, 4).Value = "連携"
End Sub

これで、A1セルから(下へ1、右へ2で)C2セルに移動し、C2~F4(3×4)の範囲に「連携」と書き込みされます。

OffsetとResizeの連携
スポンサードリンク

うまく動作しないときの対処法

エラーが発生する

コンパイルエラー・実行時エラー

コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。

今回の場合は、Resizeの範囲に0やマイナスを指定した場合もエラーとなります。
変数で範囲を指定している場合は、変数の中身を確認してみましょう。

変数の中身を確認する方法

警告表示

マクロが無効になっている表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。

スポンサードリンク

最後に

VBA(Excelマクロ)の「Resize」について解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました