更新日:、 作成日:
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
セルの列を指定
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
セルの範囲の列を指定
セルの範囲「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」で実行すると、次の範囲の列を取得できます。
スポンサーリンク
列を指定して取得
アクティブ列を取得
アクティブセルの列を取得するには 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 を入力します
列「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
行数に正の値を指定すると下に、負の値を指定すると上に移動します。
列数に正の値を指定すると右に、負の値を指定すると左に移動します。
列数を変更して取得
列の範囲「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 | 入力規制が設定が含まれているセル |
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 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 から列を取得します。
別シートの列を取得する
シートを指定するには 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)
スポンサーリンク