Excel VBAでシートのデータを操作する際、「行」を扱う処理は非常によく登場します。
例えば次のような処理です。
- 指定した行の値を取得する
- 複数行をまとめて処理する
- データの最終行を取得する
- 行ごとにループ処理する
これらの操作でよく使われるのが Rowsプロパティ です。
しかし実務では、Rowsの使い方を正しく理解していないと次のような問題が起きます。
- RowsとRangeの違いが分からない
- 複数行の指定方法が分からない
- 最終行の取得方法を間違える
- アクティブシート依存になってしまう
この記事では、VBAでRowsを使う基本から、複数行指定・変数指定・最終行取得までを実務目線で解説します。
コードの書き方だけでなく、実務で安全に使うための考え方も紹介します。
目次
✅ VBAでRowsを使う基本|行を指定して操作する方法
VBAで行を指定して処理する場合、最も基本となるのが Rowsプロパティ です。
Rowsを使うと、シート内の特定の行を簡単に指定できます。
ただし、Rowsはシンプルな構文ですが、どのシートのRowsなのかを意識しないとバグの原因になります。
特に初心者のコードでは、ActiveSheet依存の処理になってしまうケースが多く見られます。
実務では
- シートを明示する
- Rangeとの違いを理解する
ことが重要になります。
・構文:Rowsで行を指定する基本
Rowsの基本構文は次の通りです。
Rows(行番号)
例えば1行目を指定する場合は次のようになります。
Rows(1)
ただし、この書き方は ActiveSheetを対象 にします。
そのため実務では次の書き方が安全です。
Worksheets("Sheet1").Rows(1)
このようにすると、対象シートが明確になります。
・例:1行目の値を取得する
1行目のセルを操作する例です。
Sub GetRowValue()
Dim targetSheet As Worksheet
Set targetSheet = Worksheets("Sheet1")
MsgBox targetSheet.Rows(1).Cells(1).Value
End Sub
このコードでは
- Sheet1の1行目
- 1列目のセル
を取得しています。
なぜこの書き方にするのか
実務では シートを変数に入れて操作する方が安全です。
理由
- コードの読みやすさ
- 修正しやすい
- ActiveSheet依存を防げる
ためです。
✅ VBAで複数行を指定する方法(Rows)
Rowsでは、複数の行をまとめて指定することもできます。
これは実務で非常によく使う書き方です。
例えば
- 行削除
- 行コピー
- 行書式変更
などで使います。
ただし、複数行の指定方法はいくつかあり、状況によって使い分ける必要があります。
・構文:複数行を指定する
複数行の指定は次のように書きます。
Rows("1:5")
これは
1行目から5行目
をまとめて指定します。
・例:複数行を削除する
Sub DeleteRows()
Dim targetSheet As Worksheet
Set targetSheet = Worksheets("Sheet1")
targetSheet.Rows("2:5").Delete
End Sub
このコードでは
2行目〜5行目
を削除します。
実務での注意点
行削除は
上から順に削除すると行番号がずれる
ことがあります。
そのためループ処理の場合は
下から削除
する設計が安全です。
✅ VBAでRowsを変数で指定する方法
実務では、行番号を固定ではなく 変数で指定する ケースが多くあります。
例えば
- ループ処理
- データ行処理
- 最終行まで処理
などです。
・例:変数で行指定
Sub RowLoop()
Dim targetSheet As Worksheet
Dim rowIndex As Long
Set targetSheet = Worksheets("Sheet1")
For rowIndex = 1 To 10
Debug.Print targetSheet.Rows(rowIndex).Cells(1).Value
Next rowIndex
End Sub
このコードでは
1行目〜10行目
を順番に処理しています。
なぜRowsを使うのか
次の書き方もできます。
Cells(rowIndex, 1)
ただしRowsを使うと
行単位の操作
が分かりやすくなります。
Rowsは、行単位の操作を分かりやすく記述できる便利なプロパティです。
VBAでセルや行・列を指定する方法を整理して理解したい場合は、次の記事も参考になります。
【VBA】Range・Cells・Rows・Columnsの指定方法を徹底解説【基本と使い分け】
✅ VBAで最終行を取得する方法(Rows)
VBAで最もよく使われるRowsの使い方が
最終行の取得
です。
データ処理では
- データの最終行
- 入力の最終行
を取得する必要があります。
・最もよく使われる最終行取得
Sub GetLastRow()
Dim targetSheet As Worksheet
Dim lastRow As Long
Set targetSheet = Worksheets("Sheet1")
lastRow = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Row
MsgBox lastRow
End Sub
この書き方の意味
このコードは次の動きをしています。
- シートの最下行へ移動
- 上方向へ検索
- 最初のデータを取得
つまり
列の最終データ行
を取得します。
・なぜこの書き方がよく使われるのか
VBAには
UsedRange
などの方法もあります。
しかしUsedRangeは
- 削除履歴
- 書式
の影響を受けるため、正確でないことがあります。
そのため実務では
Cells(Rows.Count, 列).End(xlUp)
が最も安全です。
データ処理では、最終行を正しく取得できるかどうかで処理の安定性が大きく変わります。
Rowsを使った最終行取得の考え方や実務での使い方については、次の記事で詳しく解説しています。
【VBA】最終行を取得する方法|Rowsを活用して効率的にデータ範囲を特定する
✅ RowsとRangeの違い
Rowsと似た機能として Range があります。
例えば次の書き方です。
Range("1:1")
これは
1行目
を指定します。
・Rowsとの違い
Rows
Rows(1)
Range
Range("1:1")
どちらでも同じ結果になります。
ただし
- Rows → 行操作
- Range → セル範囲操作
という意味の違いがあります。
実務では
行操作はRows
の方が読みやすいコードになります。
✅ 実務でRowsを使う設計のポイント
Rowsを使う際は、次の点を意識するとコードが安定します。
・シートを明示する
NG例
Rows(1)
OK例
Worksheets("Sheet1").Rows(1)
・最終行取得を固定化する
最終行取得は
テンプレート化
すると便利です。
・変数名は意味を持たせる
NG
Dim i
OK
Dim rowIndex As Long
可読性が大きく変わります。
✅ まとめ:Rowsを理解すると行操作が簡単になる
Rowsは、VBAで行操作を行う際に欠かせないプロパティです。
基本的な使い方を理解しておくことで、データ処理や自動化のコードが書きやすくなります。
ポイントを整理します。
- Rowsで行を指定できる
- Rows("1:5")で複数行指定できる
- Rows(変数)で動的に指定できる
- 最終行取得はCells(Rows.Count).End(xlUp)を使う
- シートを明示すると安全なコードになる
Rowsの使い方を理解すると、行単位の処理やデータ操作がスムーズになります。
ぜひ今回紹介した書き方を参考に、VBAでの行操作を効率よく行ってみてください。