サイトについて      連絡先   検索

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
1

アクティブ列を取得

Range.EntireColumn プロパティから指定したセルのある列を取得できます。

アクティブなセルのある列を取得するには ActiveCell.EntireColumn のように指定します。

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

選択列を取得

Selection と指定すると、選択しているセルを取得できます。

選択しているセルのある列を取得するには Selection.EntireColumn のように指定します。

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

最終列を取得

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」の列を取得します。

6

この他の最終列を取得する方法は「最終列を取得する」をご覧ください。

オフセット位置を取得

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
3

列の範囲を取得する

列の範囲を取得

列の範囲「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
4

離れた列を取得

列「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
5

データの範囲の列を取得

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 とすると、次の範囲の列を取得できます。

1

特定の列を取得

Range.SpecialCells の引数に条件を指定すると、条件に一致する全てのセルを取得できます。

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

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

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

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

定数名 説明
xlErrors16エラー値
xlLogical4論理値
xlNumbers1数値
xlTextValues2文字

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

次の画像の範囲の列を取得できます。

2

指定したシートの列を取得する

Columns とコードに書くと、アクティブなシートの列を取得します。これは ActiveSheet.Columns の ActiveSheet が省略されています。

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

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

1

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)

関連ページ