-
∨目次
- 列を取得する
- 列の範囲を取得する
- 指定したシートの列を取得する
VBA 列を取得する
はじめに
Excel VBA マクロの列を取得する方法を紹介します。
Columns プロパティか Range プロパティから列を取得できます。
Range.EntireColumn プロパティから指定したセルの列を取得できます。
-
目次
- 列を取得する
- 列の範囲を取得する
- 指定したシートの列を取得する
列を取得する
列番号で取得
Columns の引数に列番号を指定すると、その列を取得できます。
列「A」を取得するには Columns(1) または Columns("A") のように指定します。
Dim r As Range
Set r = Columns(1) ' 1 列目 A
Set r = Columns("A") ' 1 列目 A
Set r = Columns(3) ' 3 列目 C
r.Select

アクティブ列を取得
Range.EntireColumn プロパティから指定したセルのある列を取得できます。
アクティブなセルのある列を取得するには ActiveCell.EntireColumn のように指定します。
Dim r As Range
Set r = ActiveCell.EntireColumn
r.Select

選択列を取得
Selection と指定すると、選択しているセルを取得できます。
選択しているセルのある列を取得するには Selection.EntireColumn のように指定します。
Dim r As Range
Set r = Selection.EntireColumn
r.Select

最終列を取得
Range.End の引数に方向を指定すると、指定した列の終端のセルを取得できます。
これは Excel で End + ↑↓←→ キーを入力したときと同じセルを取得できます。
方向には次のものがあります。
定数名 | 値 | 説明 |
xlUp | -4162 | 上端 |
xlDown | -4121 | 下端 |
xlToLeft | -4159 | 左端 |
xlToRight | -4161 | 右端 |
End.EntireColumn と指定すると、終端の列を取得できます。
Dim r As Range
Set r = ActiveCell.End(xlToLeft).EntireColumn ' アクティブセルの左端の列を取得
Set r = ActiveCell.End(xlToRight).EntireColumn ' アクティブセルの右端の列を取得
r.Select
セル「B2」で End(xlToRight).EntireColumn とすると、セル「F2」の列を取得します。
セル「B3」で End(xlToRight).EntireColumn とすると、セル「C3」の列を取得します。

この他の最終列を取得する方法は「最終列を取得する」をご覧ください。
オフセット位置を取得
Range.Offset の引数に行と列の数を指定すると、指定したセルから指定した数分ずれたセルを取得できます。
アクティブなセルの一つ右の列を取得するには ActiveCell.Offset(0, 1).EntireColumn と指定します。
Dim r As Range
Range("C1").Activate ' 3 列目のセルをアクティブ
Set r = ActiveCell.Offset(0, -1).EntireColumn ' 2 列目を取得
r.Select
Range("C1").Activate ' 3 列目のセルをアクティブ
Set r = ActiveCell.Offset(0, 1).EntireColumn ' 4 列目を取得
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」と「E ~ F」を取得するには Range("A:A, C:C, E:F") のように指定します。
Dim r As Range
Set r = Range("A:A, C:C, E:F")
r.Select

データの範囲の列を取得
Range.CurrentRegion を指定すると、指定したセルを囲むデータがある範囲を取得できます。値が入っているセルが続く限り、セルの範囲が広がります。
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」で CurrentRegion.EntireColumn とすると、次の範囲の列を取得できます。

特定の列を取得
Range.SpecialCells の引数に条件を指定すると、条件に一致する全てのセルを取得できます。
Range でセルの範囲を指定すると、その範囲内で条件に一致する全てのセルを取得できます。
条件にはつぎのものがあります。
定数名 | 値 | 説明 |
xlCellTypeAllFormatConditions | -4172 | 条件付き書式が設定されているセル |
xlCellTypeAllValidation | -4174 | 入力規制が設定が含まれているセル |
xlCellTypeBlanks | 4 | 空のセル |
xlCellTypeComments | -4144 | コメントが含まれているセル |
xlCellTypeConstants | 2 | 定数が入力されているセル |
xlCellTypeFormulas | -4123 | 数式が入力されているセル |
xlCellTypeLastCell | 11 | セル範囲内の最後のセル |
xlCellTypeSameFormatConditions | -4173 | 同じ条件付き書式が設定されているセル |
xlCellTypeSameValidation | -4175 | 同じ入力規制が設定が含まれているセル |
xlCellTypeVisible | 12 | 非表示になっていないセル |
xlCellTypeConstants か xlCellTypeFormulas を指定したときは、第二引数に次の値を組み合わせて指定できます。
定数名 | 値 | 説明 |
xlErrors | 16 | エラー値 |
xlLogical | 4 | 論理値 |
xlNumbers | 1 | 数値 |
xlTextValues | 2 | 文字 |
SpecialCells.EntireColumn と指定すると、そのセルの列を取得できます。
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
SpecialCells で該当するセルが見つからないときは、エラーが発生します。
使用されている範囲を取得
Sheets.UsedRange を指定すると、指定したシートで使用されているセルの最大範囲を取得できます。最大範囲とはシートで使用されている一番上、下、左、右のセルの範囲です。
UsedRange.EntireColumn と指定すると、その範囲の列を取得できます。
Dim r As Range
Set r = ActiveSheet.UsedRange.EntireColumn ' 使用されている範囲の列
r.Select
次の画像の範囲の列を取得できます。

指定したシートの列を取得する
Columns とコードに書くと、アクティブなシートの列を取得します。これは ActiveSheet.Columns の ActiveSheet が省略されています。
' どちらも同じコード
Dim r As Range
Set r = Columns(1)
Set r = ActiveSheet.Columns(1)
シートを指定するには Sheets の引数にシート名またはインデックスを指定します。

Sheet1 のシートを指定するには、Sheets("Sheet1") か Sheets(1) と書きます。
Dim r As Range
' Sheet1 の列「A」を取得
Set r = Sheets("Sheet1").Columns(1)
Set r = Sheets(1).Columns(1)
' Sheet2 の列「A」を取得
Set r = Sheets("Sheet2").Columns(1)
Set r = Sheets(2).Columns(1)
スポンサーリンク