表のセル範囲を自動で取得するにはどうしたらいいんだろう…。
そんなお悩みを抱えていませんか?
この記事では、VBAの「CurrentRegionプロパティ」を使って、セルの表範囲を自動で取得する方法を詳しく解説します。
「CurrentRegionプロパティ」を使うと、データの範囲を簡単に取得し、その範囲のデータを削除したり、配列として取得することができるので、日々のExcel作業が格段に楽になります。
使用例はすべてコピペして実行できるので、ぜひ最後までお読みいただき、実践してみてください。
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
この記事を読むとできるようになること
この記事を読むことで、以下のことができるようになります。
VBAの「CurrentRegionプロパティ」とは?
「CurrentRegion」とは、Excelのセル範囲を自動で選択する際に非常に便利なプロパティです。
「CurrentRegion」を使用することで、指定したセルの周囲にデータが存在する範囲(空白のセルで囲まれた範囲)を自動的に取得することができます。
このプロパティを使うことで、表のセル範囲を動的に選択することができ、データの追加や削除にも自動で対応できます。
CurrentRegionの基本構文
- expression
- 「Range オブジェクト」を表す変数を指定します。
※「Range」や「Cells」などになります。
- 「Range オブジェクト」を表す変数を指定します。
より詳しい情報は、Microsoft公式 – Range.CurrentRegion プロパティ (Excel)を参照してみてください。
CurrentRegionの使い方
次のようなエクセルの表があるとします。
この表を「CurrentRegion」を使用して、セル範囲を自動で取得してみましょう。
セル「B2」を起点に、その周囲のデータが存在する範囲を自動で選択します。
Sub 表の範囲を自動で選択()
Range("B2").CurrentRegion.Select
End Sub
このコードを実行すると、セル「B2」を起点とした範囲が自動的に選択されます。
このように「CurrentRegion」を使用すると、データが変動しても、常に最新の範囲を選択するので、手動で範囲を指定する手間が省けます。
CurrentRegionがよく使われる事例
セル範囲を自動で取得できる「CurrentRegion」は、以下の場合でよく使用されます。
- データの削除やクリア操作を行うとき
- CurrentRegionを使用すると、表全体のデータ範囲を一度にクリアまたは削除することができます。
これにより、データのリセットが簡単になり、手動で範囲を指定する必要がなくなります。
- CurrentRegionを使用すると、表全体のデータ範囲を一度にクリアまたは削除することができます。
- データの範囲を配列に格納するとき
- CurrentRegionを使うと、表全体を一括で配列に格納することができ、VBAでのデータ操作が効率化されます。
- フィルタリングやソートを行うとき
- 表全体のデータに対して、フィルタリングやソートを行う際にCurrentRegionを使えば、操作範囲を簡単に指定できます。
- データを別のシートやファイルにコピーするとき
- CurrentRegionは、データの範囲を選択して、他のシートやブックに効率的にコピーする際に便利です。
- 統計や集計処理を行うとき
- データの合計や平均などの集計処理を行う場合、CurrentRegionを使えば範囲を動的に取得して計算を行うことができます。
合わせて使用されることが多い「プロパティ」「メソッド」
「CurrentRegion」は、単体で使用することもできますが、下記のような「プロパティ」や「メソッド」と合わせて使用することで、さらに柔軟に使用することができます。
- Offset
- Offsetは、CurrentRegionで取得した範囲から、指定した行や列だけずらした位置のセル範囲を取得するための機能です。
例えば、現在のデータのすぐ下の行に新しいデータを追加したい場合に使います。
⇒ Offsetについては、別記事で解説しています。
- Offsetは、CurrentRegionで取得した範囲から、指定した行や列だけずらした位置のセル範囲を取得するための機能です。
- Resize
- Resizeは、CurrentRegionで取得した範囲のサイズ(行数や列数)を変更したいときに使います。
これにより、取得したデータ範囲を拡大したり縮小したりすることができます。
⇒ Resizeについては、別記事で解説しています。
- Resizeは、CurrentRegionで取得した範囲のサイズ(行数や列数)を変更したいときに使います。
- Intersect
- Intersectは、CurrentRegionと他のセル範囲の「重なっている部分」だけを取得する機能です。
これは、データの中から特定の条件に合う範囲を抽出したいときに便利です。
- Intersectは、CurrentRegionと他のセル範囲の「重なっている部分」だけを取得する機能です。
CurrentRegionを使う際の注意ポイント
CurrentRegionは、セル範囲を自動で取得できる便利なプロパティですが、使用時にはいくつか注意点があります。
ここでは、そのポイントを紹介します。
空白行や空白列も範囲として扱われる
CurrentRegionは「空白行」や「空白列」が、「最終行」「最終列」に混ざっていても自動的に範囲として検出します。
そのため、意図しない空白が含まれていると、正しく範囲を取得できない場合があります。
隣接するセルに空白があっても範囲を取得できる
CurrentRegionは、表の中に空白セルがあっても、隣接するセル同士が繋がっていると自動的に範囲として検出します。
この範囲を使用して処理を行う際、空白セルが原因でエラーが発生する可能性があるため、注意が必要です。
複数の表がある場合は範囲を分けて取得する
CurrentRegionは、表同士が「空白行」「空白列」で分断されていると、別の範囲として取得します。
複数の表を一括で操作したい場合は、別の方法(Unionメソッドを使用するなど)で範囲を指定する必要があります。
「CurrentRegionプロパティ」の使用例をご紹介
ここからは、「CurrentRegion」の使用例を紹介します。
今回の使用例は、次のようなエクセルの表を使用して解説を進めていきます。
まずこちらをご確認ください。
使用例1: CurrentRegionを使用し、表の大きさを取得
指定したセルを基点に表の行数と列数を取得し、メッセージボックスに表示する方法を紹介します。
主な使用用途 : このコードは、Excelの特定のセルを基点に、そのセルを含むデータの範囲全体(表)の行数と列数を取得するために使用します。
表の範囲が自動で変更される場合でも、手動で範囲を設定する必要がなくなるため、効率的です。
Sub ShowLastRowAndColumn()
Dim lastRow As Long
Dim lastColumn As Long
'// A1セルを基点にCurrentRegionを取得
lastRow = Range("B2").CurrentRegion.Rows.Count
lastColumn = Range("B2").CurrentRegion.Columns.Count
'// 最終行と最終列をメッセージボックスに表示
MsgBox "表の行数: " & lastRow & "、表の列数: " & lastColumn
End Sub
- STEP1変数「rowCount」と「columnCount」の宣言
表の行数と列数を格納するために、変数「rowCount」と「columnCount」を Long 型として宣言します。
- STEP2CurrentRegion の取得
基点となるセル「A1」を指定し、そのセルを含む表全体の範囲を取得します。
この範囲の行数を「rowCount」に、列数を「columnCount」に格納します。 - STEP3行数と列数をメッセージボックスに表示
取得した行数と列数の情報を、メッセージボックスで表示します。
処理結果
このコードで使用している機能
詳細解説
- Sub ShowTableSize()
- この行は、「Sub ステートメント」を使用して、新しいサブルーチン「ShowTableSize」を定義しています。
このサブルーチンは、Excelの表の大きさを自動的に取得して表示する機能を持っています。
- この行は、「Sub ステートメント」を使用して、新しいサブルーチン「ShowTableSize」を定義しています。
- Dim rowCount As Long
- ここでは、変数「rowCount」を Long 型で宣言しています。
「rowCount」は、表の行数を保持するための変数です。
Long 型は、大きな整数を扱うためのデータ型で、表の行数を保存するのに適しています。
- ここでは、変数「rowCount」を Long 型で宣言しています。
- Dim columnCount As Long
- ここでは、変数「columnCount」を Long 型で宣言しています。
「columnCount」は、表の列数を保持するための変数です。
Long 型は、整数を扱うためのデータ型で、表の列数を保存するのに適しています。
- ここでは、変数「columnCount」を Long 型で宣言しています。
- rowCount = Range(“A1”).CurrentRegion.Rows.Count
- Range(“A1”).CurrentRegion は、セル「A1」を基点に、そのセルを含むデータの範囲全体(つまり、連続したデータのブロック)を取得します。
「.Rows.Count」は、その取得した範囲の行数を返します。
これにより、表の行数が変数「rowCount」に格納されます。
- Range(“A1”).CurrentRegion は、セル「A1」を基点に、そのセルを含むデータの範囲全体(つまり、連続したデータのブロック)を取得します。
- columnCount = Range(“A1”).CurrentRegion.Columns.Count
- Range(“A1”).CurrentRegion でセル「A1」を基点に、そのセルを含むデータの範囲全体を取得します。
「.Columns.Count」は、その取得した範囲の列数を返します。
これにより、表の列数が変数「columnCount」に格納されます。
- Range(“A1”).CurrentRegion でセル「A1」を基点に、そのセルを含むデータの範囲全体を取得します。
- MsgBox “表の行数: ” & rowCount & “、表の列数: ” & columnCount
- MsgBox 関数を使って、取得した表の行数 (rowCount) と列数 (columnCount) をメッセージボックスで表示します。
このメッセージボックスは、ユーザーに表の大きさを簡単に知らせるために使用されます。
- MsgBox 関数を使って、取得した表の行数 (rowCount) と列数 (columnCount) をメッセージボックスで表示します。
- End Sub
- この行は、サブルーチンの終了を示しています。
すべての処理が完了すると、このサブルーチンは終了し、プログラムは次のステップに進みます。
- この行は、サブルーチンの終了を示しています。
このコードは、指定したセルを基点にして、そのセルを含むデータの範囲全体(表)の行数と列数を取得し、ユーザーに表示します。
「CurrentRegion」を使うことで、Excelのデータ範囲を自動で取得できるため、データ範囲が変動する場合でも効率的に表の大きさを把握することが可能です。
この方法は、データが追加・削除されることの多いテーブル(表)で、常に最新の表の範囲を扱いたい場合に非常に便利です。
操作が自動化されるため、手動で範囲を変更する必要がなく、作業効率が向上します。
使用例2: セルの色を一括で変更する
指定したセルを基点にセル範囲を取得し、その範囲のセルの色を変更する方法を紹介します。
主な使用用途 : このコードは、Excelでデータの範囲を簡単に把握したいときに使用します。
セルの範囲全体を一目で確認するために、範囲を目立たせる目的で背景色を変更する場合に便利です。
Sub HighlightCurrentRegion()
Range("B2").CurrentRegion.Interior.Color = vbYellow
End Sub
- STEP1CurrentRegionでセル範囲を取得
基点となるセル「A1」から始まるデータの連続した範囲(表全体)を取得します。
- STEP2範囲の背景色を変更
取得した範囲の背景色を黄色(vbYellow)に設定して強調表示します。
このコードで使用している機能
- Interior.Color (セルの色変更)
処理結果
詳細解説
- Sub HighlightCurrentRegion()
- この行は、新しいサブルーチン(Subプロシージャ)「HighlightCurrentRegion」を定義しています。
このサブルーチンは、セル範囲を強調表示するために使用されます。
- この行は、新しいサブルーチン(Subプロシージャ)「HighlightCurrentRegion」を定義しています。
- Range(“B2”).CurrentRegion.Interior.Color = vbYellow
- Range(“B2”).CurrentRegion は、セル「A1」を基点に、そのセルを含むデータの範囲全体を取得します。
「.Interior.Color」は、その範囲のセルの背景色を設定するプロパティです。
「vbYellow」は、VBAで定義された定数で、「黄色」を表します。
この行により、セル「B2」を含むデータ範囲全体のセルの背景色が黄色に変更され、強調表示されます。
- Range(“B2”).CurrentRegion は、セル「A1」を基点に、そのセルを含むデータの範囲全体を取得します。
- End Sub
- この行は、サブルーチンの終了を示しています。
すべての処理が完了すると、このサブルーチンは終了し、プログラムは次のステップに進みます。
- この行は、サブルーチンの終了を示しています。
このコードは、Excelの特定のセルを基点として、そのセルを含むデータ範囲全体を強調表示するための方法をになります。
「CurrentRegion」を使用することで、表の範囲を自動で取得し、範囲内のすべてのセルを一度に操作することが可能になります。
データの視認性を高めるため、特に大きなデータセットや複数の表があるシートで役立ちます。
使用例3: データを一括にクリア(削除)する
指定したセルを基点にセル範囲を取得し、その範囲内のすべてのデータをクリア(削除)する方法を紹介します。
主な使用用途 : このコードは、表のデータをすべて削除したい場合に使用します。特定の範囲内のセルの内容だけをクリアし、セルの書式や境界線などはそのままにしておきたいときに便利です。
Sub ClearCurrentRegion()
Range("B2").CurrentRegion.ClearContents
End Sub
- STEP1基点セルの設定
セル「B2」を基点とするデータの範囲(表全体)を取得します。
- STEP2範囲内のデータをクリア
取得した範囲内のセルの内容(値と数式)をすべてクリアします。
このコードで使用している機能
処理結果
詳細解説
- Sub ClearCurrentRegion()
- この行は、新しいサブルーチン(Subプロシージャ)「ClearCurrentRegion」を定義しています。
このサブルーチンは、指定した範囲内のデータを削除するために使用されます。
- この行は、新しいサブルーチン(Subプロシージャ)「ClearCurrentRegion」を定義しています。
- Range(“B2”).CurrentRegion.ClearContents
- Range(“B2”).CurrentRegion は、セル「B2」を基点に、そのセルを含むデータの範囲全体を取得します。
「.ClearContents」は、取得した範囲のセルの内容(値や数式)をすべてクリア(削除)するメソッドです。
ただし、セルの書式設定や枠線などはそのまま残ります。
この行によって、セル「B2」を基点とする連続したデータ範囲全体の内容がすべてクリアされます。
- Range(“B2”).CurrentRegion は、セル「B2」を基点に、そのセルを含むデータの範囲全体を取得します。
- End Sub
- この行は、サブルーチンの終了を示しています。
すべての処理が完了すると、このサブルーチンは終了し、プログラムは次のステップに進みます。
- この行は、サブルーチンの終了を示しています。
このコードは、Excelの特定のセルを基点として、そのセルを含むデータ範囲全体の内容を効率的にクリアする方法を示しています。
「CurrentRegion」を使用することで、動的に範囲を取得し、範囲内のすべてのセルを一度に操作することが可能になります。
データのリセットやクリーニングを行いたい場合に非常に役立ちます。
使用例4: データを2次元配列に格納する
範囲内のデータをそのまま2次元配列に格納する方法を紹介します。
この配列はそのままローカルウィンドウで確認できます。
主な使用用途 : このコードは、動的にデータ範囲を取得し、その範囲内のすべてのセルを一度に操作できるようにします。
配列にデータを格納することで、データの加工や分析を効率的に行うことができます。
Sub StoreDataInArray()
Dim dataArr As Variant
'// A1セルを基点にCurrentRegionを2次元配列に格納
dataArr = Range("B2").CurrentRegion.Value
'// 配列の内容は、ローカルウィンドウで確認
Debug.Print dataArr(1, 1) ' 例として配列の一部を表示
Stop
End Sub
- STEP1変数 dataArr の宣言
データを格納するための2次元配列「dataArr」を Variant 型で宣言します。
Variant 型は、配列を含む任意のデータ型を格納できるため、柔軟なデータ操作が可能です。 - STEP2CurrentRegionを基点にデータを取得
Range(“B2”).CurrentRegion.Value を使用して、セル「B2」を基点にして、そのセルを含む連続したデータ範囲を自動的に取得し、2次元配列「dataArr」に格納します。
- STEP3配列の内容をローカルウィンドウで確認
Debug.Print dataArr(1, 1) は、配列の一部(ここでは最初の行と列のデータ)を表示し、データが正常に格納されているかを確認します。
「Stop ステートメント」により、コードの実行が一時停止され、ローカルウィンドウで配列の内容を調べることができます。
処理結果
このコードで使用している機能
- 2次元配列
詳細解説
- Sub StoreDataInArray()
- 新しいサブルーチン「StoreDataInArray」を定義しています。
このサブルーチンは、指定された範囲のデータを2次元配列に格納します。
- 新しいサブルーチン「StoreDataInArray」を定義しています。
- Dim dataArr As Variant
- Variant 型の変数「dataArr」を宣言しています。
Variant 型を使用することで、様々なデータ型のデータを一つの変数に格納することができます。
この場合、2次元配列を格納します。
- Variant 型の変数「dataArr」を宣言しています。
- dataArr = Range(“B2”).CurrentRegion.Value
- Range(“B2”).CurrentRegion は、セル “B2” を基点にして、そのセルを含む連続したデータ範囲を取得します。
「.Value プロパティ」を使うことで、この範囲内の全てのセルの値を2次元配列として dataArr に格納します。
- Range(“B2”).CurrentRegion は、セル “B2” を基点にして、そのセルを含む連続したデータ範囲を取得します。
- Debug.Print dataArr(1, 1)
- 「Debug.Print」は、VBAのデバッグ用の出力コマンドで、イミディエイトウィンドウ(Ctrl + Gで開く)に値を表示します。
「dataArr(1, 1)」 は、配列「dataArr」の最初の行と列のデータを表示します。
- 「Debug.Print」は、VBAのデバッグ用の出力コマンドで、イミディエイトウィンドウ(Ctrl + Gで開く)に値を表示します。
- Stop
- コードの実行を一時停止するコマンドです。
これにより、ローカルウィンドウで変数の値を調査できます。
デバッグ時に役立ちます。
- コードの実行を一時停止するコマンドです。
- End Sub
- この行は、サブルーチンの終了を示しています。
すべての処理が完了すると、このサブルーチンは終了し、プログラムは次のステップに進みます。
- この行は、サブルーチンの終了を示しています。
このコードを使えば、Excelのシートから動的にデータを取得して、効率的に操作できます。
特に、データの大きさが変わる場合でも、「CurrentRegion」を使うことで範囲を自動で取得し、常に最新のデータを操作することが可能です。
複数の操作を行う際には、この2次元配列を使って、例えばデータの並び替えやフィルタリングなどの高度な操作を行うことができます。
まとめ
「CurrentRegionプロパティ」は、Excel VBAで表のデータ範囲を自動的に取得し、さまざまな操作を簡単に行うために非常に便利なツールです。
これにより、データの追加や削除にも動的に対応できるため、手動で範囲を設定する必要がなくなり、効率的な作業が可能になります。
ポイントのおさらい
この記事の使用例を実践することで、VBAの「CurrentRegionプロパティ」を使いこなせるようになります。
まずは、サンプルコードをコピーして実行し、少しずつ自分の業務に応じたアレンジを加えていきましょう。