Rows は「行そのもの」をまとめて扱うための入り口
まずイメージからいきます。
Cells が「行番号・列番号で“1セル”」を指すのに対して、
Rows は「行単位(1行、または複数行)」をまとめて扱うためのオブジェクトです。
1 行目全体(A1, B1, C1, …)
3 行目全体(A3, B3, C3, …)
1~10 行目全体
といった「横一列」を触りたいときに、Rows が登場します。
Workbook → Worksheet → Rows(行) → Cells(セル)
という階層をイメージできると、すごくスッキリします。
Rows の基本:特定の行を丸ごと触る
1 行目を丸ごと指定する
一番シンプルな例からいきます。
Sub SampleRowsBasic()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("入力")
ws.Rows(1).Interior.Color = vbYellow
End Sub
VBこのコードは、「入力シートの 1 行目全体の背景色を黄色にする」という意味です。
ここでのポイントは、
ws.Rows(1) が「入力シートの 1 行目全体」を表す Range
その .Interior.Color を変えている
ということです。
Rows(1) も Range の一種なので、Value や ClearContents なども使えます。
行全体を削除する・挿入する
Sub SampleRowsDeleteInsert()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("入力")
ws.Rows(3).Delete ' 3行目を削除
ws.Rows(5).Insert ' 5行目の位置に新しい行を挿入
End Sub
VB行単位で削除・挿入したいときは、Rows(行番号).Delete / Insert が素直で分かりやすいです。
「どのシートの Rows か」を必ず書く
Rows だけで書くと“アクティブシート依存”になる
いきなりこう書くこともできます。
Rows(1).Interior.Color = vbYellow
VBこれは「アクティブなシートの 1 行目」を意味します。
一見楽ですが、「どのシートがアクティブか」によって対象が変わるので、バグの元です。
超初心者のうちから、必ずこう書く癖をつけてください。
ws.Rows(1).Interior.Color = vbYellow
VBどのシートか → ws(Worksheet 変数)
その上の Rows(1) → 1 行目
という「ブック → シート → Rows」という順番を崩さないのが大事です。
複数行をまとめて扱う
1~10 行目を一気に指定する
Sub SampleRowsMulti()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("入力")
ws.Rows("1:10").Interior.Color = vbYellow
End Sub
VBRows(“1:10”) は、「1 行目から 10 行目まで全部」を表す Range です。
行番号を文字列で「1:10」と書くのがポイントです。
もちろん、削除や挿入もできます。
ws.Rows("5:7").Delete ' 5~7行目をまとめて削除
VB行番号を変数で動かす
Sub SampleRowsVariable()
Dim ws As Worksheet
Dim startRow As Long
Dim endRow As Long
Set ws = ThisWorkbook.Worksheets("入力")
startRow = 2
endRow = 10
ws.Rows(startRow & ":" & endRow).Interior.Color = vbYellow
End Sub
VBRows の引数は文字列なので、
startRow & “:” & endRow のように文字列連結で「2:10」の形を作って渡します。
Rows と Cells を組み合わせて「行を走査する」
各行の特定列だけを見る
Rows は「行全体」を表しますが、
実際の処理では「各行の特定の列だけを見る」ことが多いです。
そのときに、Rows と Cells を組み合わせると分かりやすくなります。
Sub SampleRowsLoop()
Dim ws As Worksheet
Dim lastRow As Long
Dim r As Long
Set ws = ThisWorkbook.Worksheets("入力")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' A列の最終行
For r = 2 To lastRow
If ws.Cells(r, 1).Value = "" Then
ws.Rows(r).Interior.Color = vbYellow ' 空行を黄色に
End If
Next r
End Sub
VBここでやっていることは、
A列の最終行を求める
2 行目から最終行までループする
各行の A 列が空なら、その行全体を黄色にする
という流れです。
重要なのは、
「行を動かす変数 r」
「その行の特定列を見る Cells(r, 列)」
「行全体を触る Rows(r)」
という役割分担を意識することです。
Rows を使うときに意識してほしい重要ポイント
「行全体を触りたいのか」「行の中の一部だけ触りたいのか」を意識する
Rows(3) は「3 行目全体」です。
背景色を変える・行ごと削除する・行ごと挿入する、といった「行単位の操作」に向いています。
一方で、「3 行目の A 列だけ」「3 行目の A~C 列だけ」といった場合は、
Cells や Range を使う方が自然です。
3 行目全体 → ws.Rows(3)
3 行目の A 列 → ws.Cells(3, 1)
3 行目の A~C 列 → ws.Range(“A3:C3”)
という使い分けを意識すると、コードが読みやすくなります。
必ず「どのシートの Rows か」を書く
もう一度強調しますが、
Rows(3).Delete
VBのような書き方は、アクティブシートに依存してしまいます。
ThisWorkbook.Worksheets("入力").Rows(3).Delete
VBあるいは
ws.Rows(3).Delete
VBのように、「ブック → シート → Rows」という順番を守る書き方を、
超初心者のうちから体に染み込ませておくと、後で本当に楽になります。
まとめ:Rows は「行単位でシートを扱うためのハンドル」
Rows の本質は、
「シート上の行を、1行または複数行まとめて扱うためのオブジェクト」
です。
押さえておきたいポイントをコンパクトにまとめると、
ws.Rows(1) は「そのシートの 1 行目全体」を表す Range
Rows(“1:10”) のように書くと、複数行をまとめて指定できる
行番号を変数で持ち、Cells(r, 列) と Rows(r) を組み合わせると“行を走査する”処理が書きやすい
必ず「どのシートの Rows か」を明示して、アクティブシート依存を避ける
