Excel VBA 範囲のサイズを変更する
In this Article
VBAを使用して範囲をサイズ変更する
このチュートリアルでは、Range オブジェクトの Resize プロパティを使用して、元のRangeオブジェクトからサイズを変更した新しい範囲を返すように変更する方法を説明します。
構文
Resizeプロパティの構文は以下の通りです。
Range("A1").Resize (RowSize, ColumnSize)
Range(“A1”)は開始範囲です。 RowSizeとColumnSizeは0より大きい値でなければなりません。各入力は任意です(例:RowSizeを省略して列数だけを変更することも、その逆も可能です)。
行と列の数を変更する
以下の例では、セルA1が1つの範囲を、行数を10、列数を5にして、範囲A1:D10に拡張しています。
Range("A1").Resize(10, 5).Select
あるいは、もっと一般的には、サイズを変更した範囲を変数に代入します。
' 範囲を希望のサイズに変更して変数に代入する
Set newRng = ActiveSheet.Range("A1").Resize(10, 5)
行数のみサイズを変更する
次の例は、行数だけを変更するものです。
' 行のサイズのみ変更し、新しい範囲を $A$1:$A$10 とする
Set newRng = rng.Resize(10)
列数のみサイズを変更する
以下の例では、列数のみを変更します。
' 列のサイズのみ変更し、新しい範囲を $A$1:$E$1 とする
Set newRng = rng.Resize(, 5)
ヘッダーを除いたテーブル範囲のサイズを変更する
アクティブシートにヘッダー行のあるテーブルがある場合、このコードでは、まずテーブル全体を選択し、Range.Offset メソッドを使用してヘッダーを除外するために1行下に移動します。その後、Range.Resizeプロパティで1行分サイズを小さくしています。
Sub SelectTableData()
' **重要**
' マクロを実行する前にテーブルの任意のセルをクリックする
' Offsetを使って1行下に移動し、範囲を1行分小さくする
Set tbl = ActiveCell.CurrentRegion.Offset(1, 0)
Set tbl = tbl.Resize(tbl.Rows.Count - 1, tbl.Columns.Count)
' ヘッダー行を除くデータが選択される
tbl.Select
End Sub
2次元配列を範囲に書き込む
もう一つのよくある使い方は、2次元の配列をシートに書き込むことです。書き込む範囲は配列のサイズと一致させる必要がありますが、通常は事前に知ることができないため、出力範囲を設定するためにResizeメソッドを使用します。
以下のサンプルは、アクティブシートのA1:E10の範囲のデータを配列に読み込み、セルA1から始まる配列を「Output」シートに書き出します。
Sub WriteArray()
' データを配列に読み込む
data = Range("A1:E10").Value
' 出力範囲のサイズを調整して配列を書き出す
Worksheets("Output").Range("A1").Resize(UBound(data, 1), UBound(data, 2)).Value = data
End Sub
執筆: Vinamra Chandra