VBA 列を取得する

はじめに

Excel VBA マクロで列を指定して取得する方法を紹介します。

Columns(2) または Columns("B") プロパティから、列「B」を取得できます。

Range("B1").EntireColumn プロパティから、セル「B1」の列を取得できます。

Range("A:B") プロパティから、列の範囲「A ~ B」を取得できます。

Range.SpecialCells メソッドから、条件に一致する列を取得できます。

行を指定して取得するには「行を取得する」をご覧ください。
セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。
  • 目次
    • 列を範囲指定して取得する
    • 列を指定して取得
    • 条件に一致する列を取得する
    • 別シートの列を取得する

列を範囲指定して取得する

列を指定

Columns の引数に列番号または列名を指定すると、その列を取得できます。

列「A」を取得するには Columns(1) または Columns("A") を入力します。

Dim r As Range
Set r = Columns(1)   ' A 列
Set r = Columns("A") ' A 列
' Set r = Columns(3) ' C 列
r.Select
1

セルの列を指定

Range の引数にセル名を指定すると、そのセルの列を取得できます。

セル「B1」の列を取得するには Range("B1").EntireColumn を入力します。

Dim r As Range
Set r = Range("B1").EntireColumn ' B1 の列
r.Select

列の範囲を取得

列の範囲「B ~ C」を取得するには Range("B:C") または Range("B:B", "C:C") を入力します。

' B ~ C 列を取得
Dim r As Range
Set r = Range("B:C")
Set r = Range("B:B", "C:C")
Set r = Range(Columns(2), Columns(3))
Set r = Columns("B:C")
r.Select
4

セルの範囲の列を指定

セルの範囲「B1」~「C1」の列を取得するには Range("B1:C1").EntireColumn を入力します。

Dim r As Range
Set r = Range("B1:C1").EntireColumn ' B1 ~ C1 の列
r.Select

離れた列を取得

列「A」と「C ~ D」を取得するには Range("A:A, C:D") を入力します。

Dim r As Range
Set r = Range("A:A, C:D")
r.Select

または Union(Range("A:A"), Range("C:D")) を入力します。

Union を使用すると、指定した 2 つのセルを組み合わせた範囲を取得できます。

Dim r As Range
Set r = Union(Range("A:A"), Range("C:D")) ' A 列と C ~ D 列
Set r = Union(r, Columns(6))              ' A 列と C ~ D 列と F 列
r.Select

データの範囲の列を取得

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

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

Dim r As Range
Set r = Range("B2").CurrentRegion.EntireColumn
Set r = Range("B6").CurrentRegion.EntireColumn
Set r = Range("B10").CurrentRegion.EntireColumn
r.Select

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

1

列を指定して取得

アクティブ列を取得

アクティブセルの列を取得するには ActiveCell.EntireColumn を入力します。

Dim r As Range
Set r = ActiveCell.EntireColumn
r.Select
2

アクティブセルとは、フォーカスがあるセルのことです。

選択列を取得

選択しているセルの列を取得するには Selection.EntireColumn を入力します。範囲選択しているときは、そのすべての列を取得します。

Dim r As Range
Set r = Selection.EntireColumn
r.Select
2

最終列を取得

セルの範囲の最終列や、シート全体で使用している最終列などを取得できます。

詳しくは「最終列を取得する」をご覧ください。

移動した位置を取得

指定したセルから移動した位置のセルを取得するには Range.Offset を入力します

列「C」から行「0」、列「1」移動したセルを取得するには Range("C:C").Offset(0, 1) を入力します。

Dim r As Range
Set r = Range("C:C").Offset(0, 1)              ' D 列を取得
Set r = Range("C1").Offset(0, 1).EntireColumn  ' D1 の列を取得
r.Select

Set r = Range("C:C").Offset(0, -1)             ' B 列を取得
Set r = Range("C1").Offset(0, -1).EntireColumn ' B1 の列を取得
r.Select
3

行数に正の値を指定すると下に、負の値を指定すると上に移動します。

列数に正の値を指定すると右に、負の値を指定すると左に移動します。

列数を変更して取得

列の範囲「A ~ B」を 3 列にして取得するには Range("A:B").Resize(ColumnSize:=3) を入力します。

Dim r As Range
Set r = Range("A:B").Resize(ColumnSize:=1) ' 列を縮小、A 列目を取得
Set r = Range("A:B").Resize(ColumnSize:=3) ' 列を拡大、A ~ C 列目を取得
r.Select

2 列目以降を取得

列の範囲やシート全体の 2 列目以降を取得するには次のように入力します。

Dim r As Range
Dim c As Range
Set r = Range("A:G") ' セルの範囲
Set c = r.Resize(ColumnSize:=r.Columns.Count - 1).Offset(0, 1) ' B ~ G 列を取得
c.Select

Set r = Cells ' シート全体
Set c = r.Resize(ColumnSize:=r.Columns.Count - 1).Offset(0, 1) ' 2 列目以降を取得
c.Select

Resize メソッドから、その範囲の列数を 1 減らしています。

Offset メソッドから、その範囲を 1 列右にずらして 2 列目以降の範囲を取得しています。

1 の値を 2 箇所変更して指定した列以降をクリアできます。

r.Resize(ColumnSize:=r.Columns.Count - 2).Offset(0, 2) ' 3 列目以降を取得

条件に一致する列を取得する

条件に一致するセルのある列を取得するには Range.SpecialCells(条件).EntireColumn のように入力します。

1 つのセルに対して指定すると、シート全体で条件に一致するセルの列を取得します。

セルの範囲に対して指定すると、その範囲内で条件に一致するセルの列を取得します。

条件には次のものがあります。

定数名 説明
xlCellTypeAllFormatConditions-4172条件付き書式が設定されているセル
xlCellTypeAllValidation-4174入力規制が設定が含まれているセル
xlCellTypeBlanks4空のセル
xlCellTypeComments-4144コメントが含まれているセル
xlCellTypeConstants2定数が入力されているセル
xlCellTypeFormulas-4123数式が入力されているセル
xlCellTypeLastCell11シート全体の最後のセル
xlCellTypeSameFormatConditions-4173同じ条件付き書式が設定されているセル
xlCellTypeSameValidation-4175同じ入力規制が設定が含まれているセル
xlCellTypeVisible12非表示になっていないセル

xlCellTypeConstants か xlCellTypeFormulas を指定したときは、第 2 引数に次の値を組み合わせて指定できます。

定数名 説明
xlErrors16エラー値
xlLogical4論理値
xlNumbers1数値
xlTextValues2文字
Dim c As Range
' シート全体から文字が入っているセルの列を取得
Set c = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues).EntireColumn

' シート全体から文字と数値が入っているセルの列を取得
Set c = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues Or xlNumbers).EntireColumn

' シート全体からコメントが設定されているセルの列を取得
Set c = Cells.SpecialCells(xlCellTypeComments).EntireColumn

' A1 ~ C3 の範囲から文字が入っているセルの列を取得
Set c = Range("A1:C3").SpecialCells(xlCellTypeConstants, xlTextValues).EntireColumn
c.Select

同じ列に複数一致するセルがあるときは、その数だけその列が取得されます。

条件に一致するセルが見つからないときは「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。

検索して取得

それ以外の条件を指定するには Range.Find メソッドやセルをループして条件に一致するセルの EntireColumn から列を取得します。

Find メソッドで検索するには「セルを検索する」をご覧ください。
複数の条件で検索するには「セルを複数条件で検索する」をご覧ください。

別シートの列を取得する

シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。

Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

sheet1
Dim r As Range
' Sheet1 の列を取得
Set r = Worksheets("Sheet1").Columns(1)
Set r = Worksheets(1).Columns(1)

' Sheet2 の列を取得
Set r = Worksheets("Sheet2").Columns(1)
Set r = Worksheets(2).Columns(1)

Sheet1 に Columns を入力すると、自身のシートの列になります。自身を表す Me. が省略されています。

' どちらも同じコード
Dim r As Range
Set r = Columns(1)
Set r = Me.Columns(1)

標準モジュールに Columns を入力すると、開いているシートの列になります。アクティブシートを表す ActiveSheet. が省略されています。

' どちらも同じコード
Dim r As Range
Set r = Columns(1)
Set r = ActiveSheet.Columns(1)