VBA 行を取得する

はじめに

Excel VBA マクロで行を指定して取得する方法を紹介します。

Rows(2) プロパティから、行「2」を取得できます。

Range("A2").EntireRow プロパティから、セル「A2」の行を取得できます。

Range("1:2") プロパティから、行の範囲「1 ~ 2」を取得できます。

Range.SpecialCells メソッドから、条件に一致する行を取得できます。

列を指定して取得するには「列を取得する」をご覧ください。
セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。
  • 目次
    • 行を範囲指定して取得する
    • 行を指定して取得
    • 条件に一致する行を取得する
    • 別シートの行を取得する

行を範囲指定して取得する

行を指定

Rows の引数に行番号を指定すると、その行を取得できます。

行「2」を取得するには Rows(2) を入力します。

Dim r As Range
Set r = Rows(2) ' 2 行目
r.Select
1

セルの行を指定

Range の引数にセル名を指定すると、そのセルの行を取得できます。

セル「A2」の行を取得するには Range("A2").EntireRow を入力します。

Dim r As Range
Set r = Range("A2").EntireRow ' A2 の行
r.Select

行の範囲を指定

行の範囲「2 ~ 3」を取得するには Range("2:3") または Range("2:2", "3:3") を入力します。

' 2 ~ 3 行目を取得
Dim r As Range
Set r = Range("2:3")
Set r = Range("2:2", "3:3")
Set r = Range(Rows(2), Rows(3))
Set r = Rows("2:3")
r.Select
4

セルの範囲の行を指定

セルの範囲「A2」~「A3」の行を取得するには Range("A2:A3").EntireRow を入力します。

Dim r As Range
Set r = Range("A2:A3").EntireRow ' A2 ~ A3 の行
r.Select

離れた行を指定

行「1」と「3 ~ 4」を取得するには Range("1:1, 3:4") を入力します。

Dim r As Range
Set r = Range("1:1, 3:4")
r.Select

または Union(Range("1:1"), Range("3:4")) を入力します。

Union を使用すると、指定した 2 つのセルを組み合わせた範囲を取得できます。

Dim r As Range
Set r = Union(Range("1:1"), Range("3:4")) ' 1 行目と 3 ~ 4 行目
Set r = Union(c, Range("6:6"))            ' 1 行目と 3 ~ 4 行目 と 6 行目
r.Select

データの範囲の行を取得

指定したセルを囲むデータがある範囲の行を取得するには Range.CurrentRegion.EntireRow を入力します。

これは Excel で Ctrl + Shift + * キーを入力したときと同じセルを取得します。

Dim r As Range
Set r = Range("B2").CurrentRegion.EntireRow
Set r = Range("B6").CurrentRegion.EntireRow
Set r = Range("B10").CurrentRegion.EntireRow
r.Select

セル「B2」、「B6」、「B10」で実行すると、次の範囲の行を取得できます。

1

行を指定して取得

アクティブ行を取得

アクティブセルの行を取得するには ActiveCell.EntireRow を入力します。

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

アクティブセルとは、フォーカスがあるセルのことです。

選択行を取得

選択しているセルの行を取得するには Selection.EntireRow を入力します。範囲選択しているときは、そのすべての行を取得します。

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

最終行を取得

セルの範囲の最終行や、シート全体で使用している最終行などを取得できます。

詳しくは「最終行を取得する」をご覧ください。

移動した位置を取得

指定したセルから移動した位置のセルを取得するには Range.Offset を入力します

行「2」から行「1」、列「0」移動したセルを取得するには Range("2:2").Offset(1, 0) を入力します。

Dim r As Range
Set r = Range("2:2").Offset1, 0)            ' 3 行目を取得
Set r = Range("B2").Offset(1, 0).EntireRow  ' B3 の行を取得
r.Select

Set r = Range("2:2").Offset(-1, 0)          ' 1 行目を取得
Set r = Range("B2").Offset(-1, 0).EntireRow ' B1 の行を取得
r.Select
3

行数に正の値を指定すると下に、負の値を指定すると上に移動します。

列数に正の値を指定すると右に、負の値を指定すると左に移動します。

行数を変更して取得

行の範囲「1 ~ 2」を 3 行にして取得するには Range("1:2").Resize(RowSize:=3) を入力します。

Dim r As Range
Set r = Range("1:2").Resize(RowSize:=1) ' 行を縮小、1 行目を取得
Set r = Range("1:2").Resize(RowSize:=3) ' 行を拡大、1 ~ 3 行目を取得
r.Select

2 行目以降を取得

行の範囲やシート全体の 2 行目以降を取得するには次のように入力します。

Dim r As Range
Dim c As Range
Set r = Range("1:10") ' セルの範囲
Set c = r.Resize(RowSize:=r.Rows.Count - 1).Offset(1, 0) ' 2 ~ 10 行目を取得
c.Select

Set r = Cells ' シート全体
Set c = r.Resize(RowSize:=r.Rows.Count - 1).Offset(1, 0) ' 2 行目以降を取得
c.Select

Resize メソッドから、その範囲の行数を 1 減らしています。

Offset メソッドから、その範囲を 1 行下にずらして 2 行目以降の範囲を取得しています。

1 の値を 2 箇所変更して指定した行以降を取得できます。

r.Resize(RowSize:=r.Rows.Count - 2).Offset(2, 0).Clear ' 3 行目以降を取得

条件に一致する行を取得する

条件に一致するセルのある行を取得するには Range.SpecialCells(条件).EntireRow のように入力します。

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 c As Range
' シート全体から文字が入っているセルの行を取得
Set c = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow

' シート全体から文字と数値が入っているセルの行を取得
Set c = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues Or xlNumbers).EntireRow

' シート全体からコメントが設定されているセルの行を取得
Set c = Cells.SpecialCells(xlCellTypeComments).EntireRow

' A1 ~ C3 の範囲から文字が入っているセルの行を取得
Set c = Range("A1:C3").SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow
c.Select

同じ行に複数一致するセルがあるときは、その数だけその行が取得されます。

条件に一致するセルが見つからないときは「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。

検索して取得

それ以外の条件を指定するには Range.Find メソッドやセルをループして条件に一致するセルの EntireRow から行を取得します。

Find メソッドで検索するには「セルを検索する」をご覧ください。
複数の条件で検索するには「セルを複数条件で検索する」をご覧ください。

別シートの行を取得する

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

Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

sheet1
Dim r As Range
' Sheet1 の行を取得
Set r = Worksheets("Sheet1").Rows(1)
Set r = Worksheets(1).Rows(1)

' Sheet2 の行を取得
Set r = Worksheets("Sheet2").Rows(1)
Set r = Worksheets(2).Rows(1)

Sheet1 に Rows を入力すると、自身のシートの行になります。自身を表す Me. が省略されています。

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

標準モジュールに Rows を入力すると、開いているシートの行になります。アクティブシートを表す ActiveSheet. が省略されています。

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