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

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
1

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
2

アクティブなセルとは、入力されるセルのことです。

選択列を取得

選択しているセルのある列を取得するにはSelection.EntireColumnを入力します。


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

範囲選択しているときは、そのすべての列が取得されます。

最終列を取得

オフセット位置を取得

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

1

特定の列を取得

条件に一致するセルのある列を取得するには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 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

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

2

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

シートを指定するには 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)
  • 目次
    • 列を取得する
    • 列の範囲を取得する
    • 指定したシートの列を取得する