VBA 最終列を取得する

はじめに

Excel VBA マクロで最終列を取得する方法を紹介します。

Range.End メソッドから、行の最終列を取得できます。

Range.Columns.Count プロパティから、セルの範囲の最終列を取得できます。

UsedRange プロパティから、シート全体で使用している最大範囲の最終列を取得できます。

列を指定して取得するには「列を取得する」をご覧ください。
最終行を取得するには「最終行を取得する」をご覧ください。
  • 目次
    • 行の最終列を取得
    • セルの範囲の最終列を取得する

行の最終列を取得

行に連続したデータのあるセルの最終列を取得するには Range.End(xlToRight) のように入力します。

これは Excel で Ctrl + → キーを入力したときと同じセルを取得できます。

右以外にも次の方向を指定できます。

定数名 説明
xlUp-4162上端
xlDown-4121下端
xlToLeft-4159左端
xlToRight-4161右端

セル「B2」の右方向の最終列を取得するには Range("B2").End(xlToRight).EntireColumn を入力します。

Dim r As Range
Set r = Range("B2").End(xlToRight).EntireColumn ' B2 の最終列を取得
Set r = ActiveCell.End(xlToLeft).EntireColumn   ' アクティブセルの最終列を取得
r.Select

セル「B2」の右方向は「F2」を、セル「B3」の右方向は「C3」を取得します。

6

3 行目のように途中に空のセルがあると、その前のセルが取得されます。

行の最終列

行の最終列を取得するには、一番右の列から左方向にセルを取得します。

行「3」の最終列を取得するには次のようにします。

Dim r As Range
Set r = Cells(3, Columns.Count).End(xlToLeft).EntireColumn ' 3 は 3 行目
r.Select

セルの範囲の最終列を取得する

セルの範囲の一番左の列番号を取得するには Range.Column のように入力します。

セルの範囲の列数を取得するには Range.Columns.Count のように入力します。

セルの範囲の最終列を取得するには Columns(Range.Column + Range.Columns.Count - 1) または Range.Columns(Range.Columns.Count).EntireColumn のように入力します。

Dim c As Range
Set c = Range("B2:D4") ' セルの範囲

Dim r As Range
Set r = Columns(c.Column + c.Columns.Count - 1) ' セルの範囲の最終列を取得
Set r = c.Columns(c.Columns.Count).EntireColumn ' セルの範囲の最終列を取得
r.Select
1

データの範囲の最終列を取得

指定したセルを囲むデータがある範囲を取得するには Range.CurrentRegion を入力します。

これは Excel で Ctrl + Shift + * キーを入力したときと同じセルを取得します。

後はセルの範囲の最終列を取得する方法と同じです。

Dim c As Range
Dim r As Range

Set c = Range("B2").CurrentRegion
Set r = c.Columns(c.Columns.Count).EntireColumn

Set c = Range("B6").CurrentRegion
Set r = c.Columns(c.Columns.Count).EntireColumn

Set c = Range("B10").CurrentRegion
Set r = c.Columns(c.Columns.Count).EntireColumn

r.Select

セル「B2」、「B6」、「B10」で実行すると、次の範囲の最終列を取得できます。

1

シート全体の最終列を取得する

シート全体で使用しているセルの最大範囲を取得するには UsedRange を入力します。

後はセルの範囲の最終列を取得する方法と同じです。

Dim c As Range
Set c = UsedRange ' 最大範囲を取得

Dim r As Range
Set r = Columns(c.Column + c.Columns.Count - 1) ' シート全体の最終列を取得
Set r = c.Columns(c.Columns.Count).EntireColumn ' シート全体の最終列を取得
r.Select

最大範囲とはシートに入力されている一番上、下、左、右のセルの範囲です。書式設定されているセルも含まれます。

2