更新日:、 作成日:
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
セルの行を指定
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
セルの範囲の行を指定
セルの範囲「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」で実行すると、次の範囲の行を取得できます。
スポンサーリンク
行を指定して取得
アクティブ行を取得
アクティブセルの行を取得するには ActiveCell.EntireRow を入力します。
Dim r As Range
Set r = ActiveCell.EntireRow
r.Select
アクティブセルとは、フォーカスがあるセルのことです。
選択行を取得
選択しているセルの行を取得するには Selection.EntireRow を入力します。範囲選択しているときは、そのすべての行を取得します。
Dim r As Range
Set r = Selection.EntireRow
r.Select
最終行を取得
セルの範囲の最終行や、シート全体で使用している最終行などを取得できます。
移動した位置を取得
指定したセルから移動した位置のセルを取得するには 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
行数に正の値を指定すると下に、負の値を指定すると上に移動します。
列数に正の値を指定すると右に、負の値を指定すると左に移動します。
行数を変更して取得
行の範囲「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 | 入力規制が設定が含まれているセル |
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).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 から行を取得します。
別シートの行を取得する
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。
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)
スポンサーリンク