-
∨目次
- 列を取得する
- 列の範囲を取得する
- 指定したシートの列を取得する
VBA 列を取得する
はじめに
Excel VBA マクロの列を取得する方法を紹介します。
Columns プロパティまたは Range プロパティから列を取得できます。
Range.EntireColumn プロパティから指定したセルの列を取得できます。
- セルを取得するには「セルや範囲を取得する」をご覧ください。
- 列番号を取得するには「列番号または列名を取得する」をご覧ください。
-
目次
- 列を取得する
- 列の範囲を取得する
- 指定したシートの列を取得する
列を取得する
列番号か列名で取得
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

Range の引数にセル名を指定すると、そのセルの列を取得できます。
セル「B1」の列を取得するにはRange("B1").EntireColumnを入力します。
Dim r As Range
Set r = Range("B1").EntireColumn ' B 列
r.Select
アクティブ列を取得
アクティブなセルのある列を取得するにはActiveCell.EntireColumnを入力します。
Dim r As Range
Set r = ActiveCell.EntireColumn
r.Select

アクティブなセルとは、入力されるセルのことです。
選択列を取得
選択しているセルのある列を取得するにはSelection.EntireColumnを入力します。
Dim r As Range
Set r = Selection.EntireColumn
r.Select

範囲選択しているときは、そのすべての列が取得されます。
最終列を取得
- 詳しくは「最終列を取得する」をご覧ください。
オフセット位置を取得
Range.Offset の引数に行数と列数を指定すると、指定したセルから指定した数だけ移動したセルを取得できます。
セル「B2」から行「0」、列「1」移動したセルの列を取得するにはRange.Offset(0, 1).EntireColumnを入力します。
Dim r As Range
Set r = Range("B2").Offset(0, 1).EntireColumn ' C 列を取得
r.Select
Set r = Range("B2").Offset(0, -1).EntireColumn ' A 列を取得
r.Select

行数に正の値を指定すると右に、負の値を指定すると左に移動します。
列数に正の値を指定すると下に、負の値を指定すると上に移動します。
スポンサーリンク
列の範囲を取得する
列の範囲を取得
列の範囲「B ~ C」を取得するにはRange("B:C")またはRange(Columns(2), Columns(3))を入力します。
Dim r As Range
Set r = Range("B:C") ' B ~ C 列目を取得
Set r = Range(Columns(2), Columns(3)) ' B ~ C 列目を取得
Set r = Range("D:D") ' D 列目を取得
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 を使用すると、取得したセルと別のセルを組み合わせた範囲を取得できます。
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 + Aキーを入力したときと同じセルを取得します。
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」で実行すると、次の範囲の列を取得できます。

特定の列を取得
条件に一致するセルのある列を取得するにはRange.SpecialCells(条件).EntireColumnのように入力します。
1 つのセルに対して指定すると、シート全体で条件に一致するセルの列を取得します。
セルの範囲に対して指定すると、その範囲内で条件に一致するセルの列を取得します。
条件には次のものがあります。
定数名 | 値 | 説明 |
xlCellTypeAllFormatConditions | -4172 | 条件付き書式が設定されているセル |
xlCellTypeAllValidation | -4174 | 入力規制が設定が含まれているセル |
xlCellTypeBlanks | 4 | 空のセル |
xlCellTypeComments | -4144 | コメントが含まれているセル |
xlCellTypeConstants | 2 | 定数が入力されているセル |
xlCellTypeFormulas | -4123 | 数式が入力されているセル |
xlCellTypeLastCell | 11 | セル範囲内の最後のセル |
xlCellTypeSameFormatConditions | -4173 | 同じ条件付き書式が設定されているセル |
xlCellTypeSameValidation | -4175 | 同じ入力規制が設定が含まれているセル |
xlCellTypeVisible | 12 | 非表示になっていないセル |
xlCellTypeConstants か xlCellTypeFormulas を指定したときは、第 2 引数に次の値を組み合わせて指定できます。
定数名 | 値 | 説明 |
xlErrors | 16 | エラー値 |
xlLogical | 4 | 論理値 |
xlNumbers | 1 | 数値 |
xlTextValues | 2 | 文字 |
Dim r As Range
' コメントが設定されている全ての列を取得
Set r = ActiveCell.SpecialCells(xlCellTypeComments).EntireColumn
' 「A1」~「C3」の範囲で、コメントが設定されている全ての列を取得
Set r = Range("A1:C3").SpecialCells(xlCellTypeComments).EntireColumn
' 文字が入っている全ての列を取得
Set r = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues).EntireColumn
' 文字と数値が入っている全ての列を取得
Set r = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues Or xlNumbers).EntireColumn
r.Select
同じ列に複数一致するセルがあるときは、その数だけその列が取得されます。
条件に一致するセルが見つからないときは「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。
使用されている範囲を取得
使用されているセルの最大範囲の行を取得するにはUsedRange.EntireColumnを入力します。
Dim r As Range
Set r = UsedRange.EntireColumn
r.Select
最大範囲とはシートに入力されている一番上、下、左、右のセルの範囲です。書式設定されているセルも含みます。

指定したシートの列を取得する
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するにはWorksheets("Sheet1")またはWorksheets(1)を入力します。

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)
スポンサーリンク