【VBA】Resizeプロパティの使い方(注意事項あり)
今回はRangeオブジェクトのResizeプロパティの使い方を紹介します。
複数範囲を指定したいときには、とても便利がプロパティなので、ぜひ活用してみてください。
また、使うに当たって少しだけ注意事項(勘違いしやすい点)があるので念のため確認するのをおすすめします。
Resizeプロパティの使い方
Sub UseResize()
'A1:A2セルが選択される(行方向のみ範囲変更)
Range("A1").Resize(2).Select
'A1:B1セルが選択される(列方向のみ範囲変更)
Range("A1").Resize(, 2).Select
'A1:B2セルが選択される(行方向・列方向で範囲変更)
Range("A1").Resize(2, 2).Select
End Sub
Resizeプロパティの使い方を実感してもらうため、このようなサンプルコードを作成してみました。
ステップ実行をしてセルの選択範囲がどのように変化するか確認してみてください。
Resizeプロパティの引数の書き方は上の3種類で、行方向のみ範囲変更、列方向のみ範囲変更といった指定の仕方ができます。
Resizeプロパティのメリット
Sub ResizeMerit()
With ActiveSheet
'CellsとResizeを組合せる方法
.Cells(1, 1).Resize(2, 2).Select
'RangeとCellsを組合せる方法
.Range(.Cells(1, 1), .Cells(2, 2)).Select
End With
End Sub
Resizeプロパティを使うメリットは、Range(Cells,Cells)によりセル範囲を指定する方法と比較するとよく分かります。
そのメリットは大きく次の2つがあります。
- シートの指定を間違えにくい
- 変更するときは1箇所書き換えるだけで済む
1. シートの指定を間違えにくい
Range(Cells,Cells)の組合せで使用する場合は、各Cellsでシートを指定する必要があります。(サンプルコードではWith文でアクティブシートを指定しています)
指定を忘れて各Cellsのシートが違うものになると実行時エラーが発生します。
それに対してResizeプロパティは最初のセルでシートを指定しておけばエラーになることはありません。
2. 変更するときは1箇所書き換えるだけで済む
プログラムを変更する必要が出てきたとき、Range(Cells,Cells)だと2つのセルを変更する必要があります。
それに対してResizeプロパティならば、Cells側かResizeプロパティの引数の片方を変更するだけで済みます。
For文のiなどが含まれていると範囲が想像しづらいので、プログラムを編集するのがかなり気楽になります。
注意事項:複数範囲でも基準セルから指定される
Sub ResizeCaution()
'×:A1:B2が拡大されてA1:D4セルになる
'〇:A1セルが基準となってA1:C3セルになる
Range("A1:B2").Resize(3, 3).Select
End Sub
Resizeプロパティで間違いがちなのは、Rangeオブジェクトが複数範囲の場合です。(サンプルコードではRange(“A1:B2"))
この場合、複数範囲がさらに拡大されてA1:D4セルに広がる、というイメージを持つかもしれませんがこれは誤りです。
あくまでRange(“A1:B2")の左上のA1セルが基準となって、変更後の範囲が決まります。
そのためサンプルコードを実行するとA1:C3セルが選択されます。
左上の1セルを基準に範囲が変更されるのだと覚えておきましょう。