CurrentRegionは範囲取得プロパティ 連続データをまとめて掴む

vbacurrentregioneyecatch

エクセルVBAでのCurrentRegionプロパティは、連続したデータの範囲選択で非常に便利な働きをしてくれます。
色々なパターンでの使い方がありますので、知識として習得をしておきましょう。

こんにちは じゅんぱ店長 (@junpa33) です。

MicrosoftExcelを事務作業で使っているときに、何かのデータ表を一度に掴む(選択する)時って結構ありますよね。

表全体であったり、表中の一部であったりするでしょう。

エクセルシート上で、マウス操作の場合は別に何ともないわけですが、

エクセルVBAでプログラムコードを作成する場合は、マウス操作ほど単純ではありません。

今回の話は、これに関連する「CurrentRegion」というプロパティについてです。

CurrentRegionプロパティとは

「CurrentRegionプロパティ」は、データ表などのひと塊の範囲を一度に選択取得することが出来ます。

「この表は今どれだけのサイズになってるの?」などを知るには非常に便利です。

ただ、全てのVBAコードに言えますが、この「CurrentRegion」も万能機能ではありません。

実務的には、

『表中の途中に、空白行が存在する』とか『シート内に複数の別データ表が存在する』とか

『「どこからどこまでのセル」を選択したい』という条件に対応した修正加工も必要になるでしょう。

CurrentRegionでの連続データ範囲の掴み方

CurrentRegionの使い方について説明をしていきます。

使用する上での注意点もありますので、それぞれチェックをしてみてください。

CurrentRegionプロパティの記述方法

CurrentRegionを利用するその記述方法は、以下のようになります。

構文

  • オブジェクト.CurrentRegion

オブジェクトは、連続データ範囲内にあるいずれかのセルを指定すればOKです。
個人ルールとして、連続データの始点(左上隅)のセルを指定していれば指定範囲のイメージが湧きやすいです。

戻り値としては「Rangeオブジェクト」になります。

CurrentRegionプロパティで取得できる連続データの取得範囲とは、空白行と空白列で囲まれた範囲内にあるデータのかたまりになります。

CurrentRegionの使用方法

vbacurrentregionp015a

今回サンプルとして利用するのは、このデータ表になります。

vbacurrentregionp001a

表(連続データ範囲)を取得選択

基本の範囲選択

送品日付20220401の表全体を掴みます。

コード
Sub CurrentRegionサンプル1()
    Range("B3").CurrentRegion.Select
End Sub
vbacurrentregionp002a

空白行と空白列で囲まれた範囲内のデータのかたまりを取得範囲としています。

2つ以上に分かれた範囲を同時に掴む場合

送品日付20220401と送品日付20220404のデータ表を同時に掴みたい(選択する)場合は、

Unionメソッドを使います。

コード
Sub CurrentRegionサンプル2()
  Union(Range("B3").CurrentRegion,Range("B17").CurrentRegion).Select
End Sub
vbacurrentregionp012a

2つのCurrentRegionの範囲が同時に選択されました。

表の1行目と1列目を取得選択

表の1行目を選択する

送品日付20220401の表の1行目(見出し)を選択します。

コード
Sub CurrentRegionサンプル1行目()
    Range("B3").CurrentRegion.Rows(1).Select
End Sub

CurrentRegionとSelectの間に「Rowsプロパティで1行目」を指定します。

vbacurrentregionp003a

複数行の選択の場合

CurrentRegionとSelectの間に「Rowsプロパティで行範囲」を指定します。

コード
Sub CurrentRegionサンプル複数行a()
    Range("B3").CurrentRegion.Rows("1:3").Select
End Sub

複数行の指定はRows(”1:3”)と記述します。ダブルクォーテーションマークを行指定範囲の部分の前後に付けます。

vbacurrentregionp004a

または、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

列指定で「列名」で指定するときは、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

または、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

表の最終行からの複数行選択の場合

表の最終行から上方向3行目までを選択します。

コード
Sub CurrentRegionサンプル最終行からの複数行a()
    With Range("B3").CurrentRegion
        .Rows(.Rows.Count - 2).Resize(3).Select
    End With
End Sub

Resizeプロパティを使って複数行を選択します。

vbacurrentregionp010a

表の最終列を選択する

送品日付20220401の表の最終列を選択します。

コード
Sub CurrentRegionサンプル最終列()
    With Range("B3").CurrentRegion
        .Columns(.Columns.Count).Select
    End With
End Sub
vbacurrentregionp009a

表の最終列からの複数列選択の場合

表の最終列から左方向3列目までを選択します。

コード
Sub CurrentRegionサンプル最終列からの複数列a()
    With Range("B3").CurrentRegion
        .Columns(.Columns.Count - 2).Resize(, 3).Select
    End With
End Sub

Resizeプロパティを使って複数列を選択します。

vbacurrentregionp011a

表の最終行の行番号と最終列の列番号を取得

表の最終行の行番号を取得

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での連続データ範囲の選択のまとめ

連続データ範囲の掴み方(選択方法)は、エクセルシート上での手作業の場合、方法的には結構単一的なやり方で可能です。

けれども、この連続データ範囲の掴み方をエクセルVBAで行っていこうとすると、

場合によって、VBAコードの使い方が違いますし、それぞれ違ったプロパティやメソッドを使わなければいけません。

VBAですので、一度作成できれば後は自動化で ”楽チン” ではあるのですが、

範囲の掴み方のコード設計において頭を悩ませることもあると思います。

こういった場合に対処するため、「範囲の掴み方コードのパターン化」をしておくと良いでしょう。

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできます。
Udemy1eyecatch エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

今回の記事はここまでです。   最後までご覧いただき有難うございました。

vbaborder1eyecatchVBAでセルに罫線を設定する 位置・線種・太さ・色vbarowseyecatchVBA Rowsプロパティの範囲選択と関連のメソッドvbadeleteeyecatchVBA DeleteとClearの使い分け 削除とクリアの違いを最速理解vbacurrentregioneyecatchCurrentRegionは範囲取得プロパティ 連続データをまとめて掴むSpecialCellseyecatchSpecialCellsメソッドは特定のセルを選択する多機能ツールVBAFunctioneyecatchFunctionプロシージャーの働きと使い方 ユーザー定義関数もここ知れOK!vbacalleyecatchCallステートメントはプロシージャーの部品化に必須項目 エクセルVBA最速理解vbacharactereyecatchaCharactersプロパティで文字列中の一部の文字の書式設定や加工をするvbafontsyseyecatcha文字の書式の設定方法 Fontプロパティで装飾操作ができるVBAFormateyecatchFormat関数を書式設定のテッパン関数にする!実務での書式と重要5例vbaintfixeyecatch数値の整数部分を完全分離 Int・Fix・Abs・Sign関数で出来る使い方vbarndeyecatchRnd関数で乱数を取得。使えない戻り値を加工して利用度を上げるVBAコードvbaroundupdowneyecatchRoundUpとRoundDown関数の使い方。数値の切り方に注意が必要ですvbaroundeyecatchRound関数の毒針。VBAで数値を四捨五入する時の注意点vbamaxminaveeyecatchMax・Min・Averageワークシート関数で最大値・最小値・平均を求めるvbainsteeyecatchInstr関数・InstrRev関数は文字列を検索する。ファイルパス取得に威力vbareplaceeyecatchReplace関数は文字列を置換・削除する利用度の高い関数vbaselectcaseeyecatchSelect Case 条件分岐の使い方。ステートメントの基本はコレ。VBAValeyecatchVal関数の使い方はデータ型不一致の解決策。値を文字列型から数値型へVBAStringeyecatchString関数の使い方は文字を指定した数だけ並べることが出来る

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。