エクセルVBAでのCurrentRegionプロパティは、連続したデータの範囲選択で非常に便利な働きをしてくれます。
色々なパターンでの使い方ができますので、知識として習得をしておきましょう。
こんにちは じゅんぱ店長 (@junpa33) です。
MicrosoftExcelを事務作業で使っているときに、何かのデータ表を一度に掴む(選択する)時って結構ありますよね。
表全体であったり、表中の一部であったりするでしょう。
エクセルシート上で、マウス操作の場合は別に何ともないわけですが、
エクセルVBAでプログラムコードを作成する場合は、マウス操作ほど単純ではありません。
今回の話は、これに関連する「CurrentRegion」というプロパティについてです。
- セルの範囲選択
- Range VS Cells !VBAで使えるのはどっち
- セルの範囲選択と設定は14のツールで対応する
- Rowsプロパティの働きと関連のメソッド
- Columnsプロパティでセルの列を指定する
- EntireRowとRowプロパティの違い
- EntireColumnとColumnの使い方
- Offsetプロパティは指定範囲を移動させる
- Resizeプロパティでセル範囲をサイズ変更
- CurrentRegionは連続データをまとめて掴む
- UnionとRangeの一括選択の働きを比較
- SpecialCellsメソッドはセル検索し選択する
- UsedRangeプロパティの使い方のコツ
- Endプロパティで上下左右の最終セルを取得
- データ入力済セルの最終行番号を取得する
コンテンツ
CurrentRegionプロパティとは
![vbacurrentregionp014a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp014a.jpg)
「CurrentRegionプロパティ」は、データ表などのひと塊の範囲を一度に選択取得することが出来ます。
「この表は今どれだけのサイズになってるの?」などを知るには非常に便利です。
ただ、全てのVBAコードに言えますが、この「CurrentRegion」も万能機能ではありません。
実務的には、
『表中の途中に、空白行が存在する』とか『シート内に複数の別データ表が存在する』とか
『「どこからどこまでのセル」を選択したい』という条件に対応した修正加工も必要になるでしょう。
CurrentRegionでの連続データ範囲の掴み方
![vbacurrentregionp015a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp015a.jpg)
CurrentRegionの使い方について説明をしていきます。
使用する上での注意点もありますので、それぞれチェックをしてみてください。
CurrentRegionプロパティの記述方法
CurrentRegionを利用するその記述方法は、以下のようになります。
- オブジェクト.CurrentRegion
オブジェクトは、連続データ範囲内にあるいずれかのセルを指定すればOKです。
個人ルールとして、連続データの始点(左上隅)のセルを指定していれば指定範囲のイメージが湧きやすいです。
戻り値としては「Rangeオブジェクト」になります。
CurrentRegionプロパティで取得できる連続データの取得範囲とは、空白行と空白列で囲まれた範囲内にあるデータのかたまりになります。
CurrentRegionの使用方法
今回サンプルとして利用するのは、このデータ表になります。
![vbacurrentregionp001a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp001a.jpg)
表(連続データ範囲)を取得選択
基本の範囲選択
送品日付20220401の表全体を掴みます。
Sub CurrentRegionサンプル1()
Range("B3").CurrentRegion.Select
End Sub
![vbacurrentregionp002a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp002a.jpg)
空白行と空白列で囲まれた範囲内のデータのかたまりを取得範囲としています。
2つ以上に分かれた範囲を同時に掴む場合
送品日付20220401と送品日付20220404のデータ表を同時に掴みたい(選択する)場合は、
Unionメソッドを使います。
Sub CurrentRegionサンプル2()
Union(Range("B3").CurrentRegion,Range("B17").CurrentRegion).Select
End Sub
![vbacurrentregionp012a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp012a.jpg)
2つのCurrentRegionの範囲が同時に選択されました。
表の1行目と1列目を取得選択
表の1行目を選択する
送品日付20220401の表の1行目(見出し)を選択します。
Sub CurrentRegionサンプル1行目()
Range("B3").CurrentRegion.Rows(1).Select
End Sub
CurrentRegionとSelectの間に「Rowsプロパティで1行目」を指定します。
![vbacurrentregionp003a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp003a.jpg)
複数行の選択の場合
CurrentRegionとSelectの間に「Rowsプロパティで行範囲」を指定します。
Sub CurrentRegionサンプル複数行a()
Range("B3").CurrentRegion.Rows("1:3").Select
End Sub
複数行の指定はRows(”1:3”)と記述します。ダブルクォーテーションマークを行指定範囲の部分の前後に付けます。
![vbacurrentregionp004a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp004a.jpg)
または、Resizeプロパティを使っても同じ結果を得られます。
Sub CurrentRegionサンプル複数行b()
Range("B3").CurrentRegion.Rows(1).Resize(3).Select
End Sub
表の1列目を選択する
送品日付20220401の表の1列目(通番)を選択します。
Sub CurrentRegionサンプル1列目()
Range("B3").CurrentRegion.Columns(1).Select
End Sub
CurrentRegionとSelectの間に「Columnsプロパティで1列目」を指定します。
![vbacurrentregionp005a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp005a.jpg)
列指定で「列名」で指定するときは、Columns(“A”)と指定する必要があります。相対位置と絶対位置の違いに注意です。
複数列の選択の場合
表の左から3列目までを選択します。Columnsの場合は複数列の指定は列名指定になります。
Sub CurrentRegionサンプル複数列a()
Range("B3").CurrentRegion.Columns("A:C").Select
End Sub
注意点として、Columns(“1:3”)ではなくColumns(“A:C”)というように記述しなければいけません。
相対位置で指定しますので、表の右端セルから1行目・A列目で始まります。要注意です。
![vbacurrentregionp007a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp007a.jpg)
または、Resizeプロパティを使っても同じ結果を得られます。
Sub CurrentRegionサンプル複数列b()
Range("B3").CurrentRegion.Columns(1).Resize(, 3).Select
End Sub
表の最終行と最終列を取得選択
表の最終行を選択する
送品日付20220401の表の最終行を選択します。
Sub CurrentRegionサンプル最終行()
With Range("B3").CurrentRegion
.Rows(.Rows.Count).Select
End With
End Sub
1行コードでは長くて美しくありませんので、「With End Withステートメント」でまとめます。
![vbacurrentregionp008a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp008a.jpg)
表の最終行からの複数行選択の場合
表の最終行から上方向3行目までを選択します。
Sub CurrentRegionサンプル最終行からの複数行a()
With Range("B3").CurrentRegion
.Rows(.Rows.Count - 2).Resize(3).Select
End With
End Sub
Resizeプロパティを使って複数行を選択します。
![vbacurrentregionp010a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp010a.jpg)
表の最終列を選択する
送品日付20220401の表の最終列を選択します。
Sub CurrentRegionサンプル最終列()
With Range("B3").CurrentRegion
.Columns(.Columns.Count).Select
End With
End Sub
![vbacurrentregionp009a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp009a.jpg)
表の最終列からの複数列選択の場合
表の最終列から左方向3列目までを選択します。
Sub CurrentRegionサンプル最終列からの複数列a()
With Range("B3").CurrentRegion
.Columns(.Columns.Count - 2).Resize(, 3).Select
End With
End Sub
Resizeプロパティを使って複数列を選択します。
![vbacurrentregionp011a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp011a.jpg)
表の最終行の行番号と最終列の列番号を取得
表の最終行の行番号を取得
Rowプロパティを使って、表の最終行の行番号を調べることが出来ます。
この時に得られる行番号は、絶対位置になります。(行番号は13行目と表示されます。)
Sub CurrentRegionサンプル最終行番号()
With Range("B3").CurrentRegion
MsgBox .Rows(.Rows.Count).Row
End With
End Sub
表の最終列の列番号を取得
Columnプロパティを使って、表の最終列の列番号を調べることが出来ます。
この時に得られる列番号は、絶対位置になります。(列番号は10列目と表示されます。)
Sub CurrentRegionサンプル最終列番号()
With Range("B3").CurrentRegion
MsgBox .Columns(.Columns.Count).Column
End With
End Sub
CurrentRegionでの連続データ範囲の選択のまとめ
![vbacurrentregionp013a](https://shimaydo.com/wp-content/uploads/2022/04/vbacurrentregionp013a.jpg)
連続データ範囲の掴み方(選択方法)は、エクセルシート上のカーソルで行う場合、非常に簡単なやり方です。
しかし、この同じつかむ範囲をエクセルVBAで行っていこうとすると、
ケースバイケースで、使用するVBAコードが違いますし、それぞれ違ったプロパティやメソッドを使うことになります。
VBAですので、一度作成さえできれば後は自動化で ”楽チン” ではあるのですが、
範囲の掴み方のコード設計においてその都度、頭を悩ませることもあるでしょう。
こういった場合に対処するため、「範囲の掴み方コードのパターン化」をしておくと良いでしょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
![vbastudyeyecatch2](https://shimaydo.com/wp-content/uploads/2022/01/vbastudyeyecatch2-160x120.jpg)
今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。