【VBA】Rangeオブジェクトのセル範囲を変更する方法
「Rangeオブジェクトを制すものはエクセルVBAを制す」
エクセルにおけるVBAはこういっても過言ではありません。
- シートからの情報を正確に取得する
- シート上に正確にアウトプットする
この2つはRangeオブジェクトを正しく使えないとうまくいきません。
そこで、今回はRangeオブジェクトを操る次の6つのプロパティを紹介したいと思います。
- Resize
- offset
- CurrentRegion
- Rows
- Columns
- MergeArea
Rangeオブジェクトのプロパティは99個ありますが、セル範囲を操るプロパティは主にこの6つです。
この6つをマスターして、Rangeオブジェクトのプロフェッショナルになりましょう。
1.Resizeプロパティ
RangeObj.Resize(x,y)
1つ目はResizeプロパティです。このプロパティはセルの範囲を変更(拡大/縮小)する事ができます。
Range(“A1").Resize(4,4)とすると、A1のセルから行方向に4つ、列方向に4つ拡大して、黄色セルの範囲を取得することができます。
引数を省略すると、その方向へはサイズ変更がされません。
- ReSize(4):行方向に4つ(列方向はそのまま)
- Resize(,4):列方向に4つ(行方向はそのまま)
2.Offsetプロパティ
RangeObj.Offset(x,y)
2つ目はOffsetプロパティです。このプロパティはセルの位置を移動させる事ができます。
Range(“A1").Offset(3,3)とすると、A1のセルから行方向に3つ、列方向に3つ移動して、黄色セルを取得することができます。
引数を省略すると、その方向へは移動しません。
- Offset(3):行方向に3つ(列方向はそのまま)
- Offset(,3):列方向に3つ(行方向はそのまま)
3.CurrentRegionプロパティ
RangeObj.CurrentRegion
3つ目はCurrentRegionプロパティです。このプロパティは範囲を自動的に拡大してくれます。
上の図のようにデータが集まったシートで、
Range(“A1").CurrentRegionとするとデータのある範囲(黄色セルの範囲)を取得することができます。
データを入力したシートで、データの範囲を一括取得したい時などに活躍します。
ただし、データ内で空行が含まれると、その行よりも下が範囲外となるので注意してください。
4-5.Rows(Columns)プロパティ
RangeObj.Rows(y)
RangeObj.Columns(x)
4,5つ目はRows(Columns)プロパティです。このプロパティは範囲内の行(列)を取得できます。
Rows(1)といったように1行目全体を取得するために使った事があるかもしれません。
これはActiveSheet.Rows(1)の省略系で、シート上の1行目を取得しています。
RangeObj.Rows(1)とした場合は、RangeObj内の1行目を取得することができます。
Range(“A1:D4").Rows(1)とすると、Range(“A1:D4")内の1行目であるRange(“A1:D1")が取得されます。
Range(“A1:D4").Columns(1)とすると、Range(“A1:D4")内の1列目であるRange(“A1:A4")が取得されます。
6.MergeAreaプロパティ
RangeObj.MergeArea
6つ目はMergeAreaプロパティです。このプロパティは結合セルの範囲を取得する事ができます。
上の図ではRange(“A1:D1")の範囲が結合されています。
この状態でRange(”A1”).MergeAreaとするとこの結合範囲を取得する事ができます。
終わりに
今回はRangeプロパティの中のセル範囲を操るものに焦点を当てて紹介しました。
Rangeプロパティでは主にこの6つですが、Rangeメソッドまで手を広げると、UnionメソッドやIntersectメソッドなどもあります。
メソッドについてもいずれ紹介したいと思いますので、お待ちください。