VBA CurrentRegion(連続したセル領域)
In this Article
このチュートリアルでは、VBAでCurrentRegionを使用する方法について説明します。
VBAのCurrentRegionプロパティは、作業したい範囲内に含まれるすべてのセルを選択する方法です。範囲内のセルがすべて連続しているか、または互いに「接触(空白セルを挟まずに隣接)」している限り、CurrentRegionはその領域内のすべてのセルを選択します。
CurrentRegionの構文
構文は非常にシンプルです。
Range("E11").CurrentRegion.Select
ここで、現在の領域を選択したいセルを指定し、CurrentRegion.Selectプロパティを使用して、セルの領域を選択します。
現在の領域を取得する
次のようなワークシートを考えてみましょう。
以下のサブプロシージャは、データベース内のすべてのセルを選択します。
Sub FindCurrentRegion()
Dim rng As Range
'オブジェクト変数rngをセルE11に設定
Set rng = Range("E11")
'現在のリージョンを選択する
rng.CurrentRegion.Select
End Sub
このルーチンを実行すると、セルE11のCurrentRegionにあるすべてのセルが選択されます。
隣接するセルの内容を削除して、このルーチンを再実行すると、選択されるCurrentRegionは、次のようになります。
そして、さらにデータを削除していくと、セルE11を起点としたCurrentRegionは、以下のようになります。
このときD13に何らかの情報を入れると、CurrentRegionは、以下のようになります。
つまり、CurrentRegionとは、指定したセル領域を取り囲む、連続した列と行の最小の組み合わせで定義される別のRangeオブジェクトということになります。
CurrentRegion内の行と列のカウント
CurrentRegionを使用して、行と列を数えることができます。
Sub FindCurrentRegion()
Dim rng As Range
Dim iRw As Integer
Dim iCol As Integer
'セル範囲を設定する
Set rng = Range("E11")
'行をカウントする
iRw = rng.CurrentRegion.Rows.Count
'列のカウント
iCol = rng.CurrentRegion.Columns.Count
'結果をメッセージボックスに表示する
MsgBox ("CurrentRegionには " & iRw & " 行と " & iCol & " 列があります。")
End Sub
このプロシージャを実行すると、以下のようなメッセージボックスが表示されます。
CurrentRegionをクリアする
CurrentRegionプロパティを利用して、セルの範囲をクリアすることもできます。
Sub ClearCurrentRegion()
Dim rng As Range
'範囲を設定する
Set rng = Range("E11")
rng.CurrentRegion.Clear
End Sub
CurrentRegionを変数に代入する
現在のCurrentRegion全体を範囲変数に代入し、その範囲変数を使ってセルの書式設定やセルの並べ替えなどの操作を行うこともできます。
Sub AssignCurrentRegionToVariable()
Dim rng As Range
'範囲をE11のCurrentRegionに設定する
Set rng = Range("E11").CurrentRegion
'背景と文字に色をつける
rng.Interior.Pattern = xlSolid
rng.Interior.Color = 65535
rng.Font.Bold = True
rng.Font.Color = -16776961
End Sub
上記のプロシージャを実行すると、以下のようなワークシートが出来上がります!
CurrentRegionの開始セルと終了セルを取得する
もう少し複雑なコードを使えば、CurrentRegionの最初のセルと最後のセルを取得することもできます。
Sub GetStartAndEndCells()
Dim rng As Range
Dim iRw As Integer
Dim iCol As Integer
Dim iColStart, iColEnd, iRwStart, iRwEnd As String
'Range変数をE11を含むCurrentRegionに設定する
Set rng = Range("E11").CurrentRegion
'範囲の開始列を設定する
iColStart = rng.Column
'範囲の終了列を取得する
iColEnd = iColStart + (rng.Columns.Count - 1)
'範囲の開始行を取得する
iRwStart = rng.Row
'範囲の終了行を取得する
iRwEnd = iRwStart + (rng.Rows.Count - 1)
'開始行と終了列のアドレスをメッセージボックスに表示する
MsgBox ("範囲の開始位置は " & Cells(iRwStart, iColStart).Address & " で、終了位置は " & Cells(iRwEnd, iColEnd).Address & " です。")
End Sub
上記のコードを実行すると、次のようなメッセージボックスが表示されます。