大体でIT
大体でIT
Excel VBAでRangeで取得した範囲を変更するResizeについてご紹介します。Resizeは、取得したセル範囲の行や列の大きさを、変更することができるVBA関数です。Resizeが使える場面について、具体的なVBAコードを使って解説してきます。
この記事では、セル範囲を変更するResizeについて、ご紹介します。
Resizeを使えば、取得したセル範囲の行や列を変更することができます。
表のデータから値だけを取得したい場合や、配列をセルに入力したい場合に、使える関数です。
では、具体的なVBAコードを使って、Resizeについて、解説していきます。
- セル範囲を変更するResizeの使い方
- Resizeの実用例
初めに、ポイントとなるVBAコードを記載しておきます。
VBAコードだけ確認したい場合に、ご活用ください。
Range("A1").Resize(4, 3).Select '4行3列に変更
Range("A1:C4").Resize(1).Select '1行に変更
Range("A1:C4").Resize(, 1).Select '1列に変更
Rangeで取得したセル範囲を変更するのに、『Resize』に使います。
まずは、Resizeの使い方を、具体的なVBAコードを使ってご説明します。
セル範囲の大きさを変更する『Resize』へは、次のように入力します。
行と列の大きさを変更
『Range("A1").Resize(行, 列)』
行の大きさだけを変更
『Range("A1:C4").Resize(行)』
行だけを入力すると、列の大きさはそのままで、行の大きさだけを変更することができます。
列の大きさだけを変更
では、VBAコードを作って、Resizeを使ってみます。
『Range("A1:C4").Resize(, 列)』
列だけを入力すると、行の大きさはそのままで、列の大きさだけを変更することができます。
セル範囲Range("A1")を、Resizeを使って、4行3列に変更してみます。
Sub TEST1()
'セル範囲を4行3列にする
Range("A1").Resize(4, 3).Select
End Sub
セル範囲を4行3列に変更
セル範囲Range("A1:C4")を、Resizeを使って、1行だけに変更してみます。
Sub TEST2()
'セル範囲を1行にする
Range("A1:C4").Resize(1).Select
End Sub
セル範囲を1行に変更
セル範囲Range("A1:C4")の、1行だけが選択されています。
セル範囲の中から、1行だけを取得したい場合に使えます。
セル範囲Range("A1:C4")を、Resizeを使って、1列だけに変更してみます。
Sub TEST3()
'セル範囲を1列にする
Range("A1:C4").Resize(, 1).Select
End Sub
セル範囲を1列に変更
セル範囲Range("A1:C4")の、1列だけが選択されています。
セル範囲の中から、1列だけを取得したい場合に使えます。
Resizeと、CurrentRegionやOffsetなどを組み合わせて、VBAコードを作ります。
作ってみた表
表の値だけを取得するVBAコードはこちらになります。
Sub TEST4()
'表の値だけを選択
With Range("A1").CurrentRegion
.Resize(.Rows.Count - 1).Offset(1, 0).Select
End With
End Sub
表の値だけを取得
選択できているので、選択したセル範囲を変数に代入すると、配列として値を取得できます。
- ①表のセル範囲を、CurretRegionで取得
- ②セル範囲の行を、Resizeで1行だけ減らす
- ③セル範囲を、Offsetで1行だけ下に移動する
手順①:表のセル範囲を、CurrentRegionで取得
CurrentRegionを使うと、同じ表と認識したセル範囲を、取得することができます。
Sub TEST5()
'表のセル範囲を選択
Range("A1").CurrentRegion.Select
End Sub
「.CurrentRegion」の使い方について、詳細はこちらでまとめています。
手順②:セル範囲の行を、Resizeで1行だけ減らす
値だけを取得したいので、行数を1行だけ減らします。
Resizeを使って、1行だけ行数を減らしてみます。
Sub TEST6()
'セル範囲を1行減らして選択
With Range("A1").CurrentRegion
.Resize(.Rows.Count - 1).Select
End With
End Sub
ここで、セル範囲の行数は、『.Rows.Count』で取得できます。
1行減らすので、『.Rows.Count - 1』としています。
ただ、これだけでは、値を取得できないので、最後にOffsetで1行だけ下に移動します。
手順③:セル範囲を、Offsetで1行だけ下に移動する
最後にOffsetで、1行だけ下に移動して完成です。
Sub TEST7()
'表の値のみを選択
With Range("A1").CurrentRegion
.Resize(.Rows.Count - 1).Offset(1, 0).Select
End With
End Sub
「Offset」の使い方については、詳細はこちらでまとめています。
セルに入力された値を配列に入力して、その配列を別のセルに入力する。というのがやりたいとします。
配列をセルに入力したい
別セルにコピーだけなら『Copy』を使えばいいです。
ただ今回は、値を取得して、何かしら値を変更して、配列としてセルに入力する。という場合を考えています。
配列をセルに入力する場合は、Resizeを使わないと、ちょっとめんどくさいんです。
Sub TEST8()
Dim A
'表のセル範囲を取得
A = Range("A1").CurrentRegion
'セルに入力
Range("E1:G4") = A '←ここがめんどくさい
End Sub
配列をセルに入力
ただ、入力先のセル範囲をいちいち設定しないといけないので、めんどくさいです。
Resizeを使って、セルの値を配列に入れて、別セルに入力する。というのをやってみます。
Sub TEST9()
Dim A
'表のセル範囲を取得
A = Range("A1").CurrentRegion
'セルへ入力 ⇒セル範囲を自動で設定できる
Range("E1").Resize(UBound(A, 1), UBound(A, 2)) = A
End Sub
配列の大きさを、『Ubound』で調べて、『Resize』で大きさを変更しています。
- Ubound(配列, 1):配列の行数
- Ubound(配列, 2):配列の列数
入力先のセル範囲に、定数がないですよね。ここがいいんです。
配列をセルに入力
元のセル範囲が変更になっても、同じVBAコードで、別セルに値を入力することができます。
元データの大きさを変更した場合
この記事では、セル範囲の大きさを変更する、Resizeについてご紹介しました。
Resizeを使えば、セル範囲の大きさを自由に変更することができます。
Resizeの大きさを自由に変更できる、ということを利用すると、表の値だけを取得したり、配列をセルに入力する際に使ったりと、便利に使うことができます。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。