Excel VBA | 超初心者(Excel操作+マクロ体験):Excelオブジェクト基礎 - Rows

Excel VBA VBA
スポンサーリンク

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
VB

Rows(“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
VB

Rows の引数は文字列なので、
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 か」を明示して、アクティブシート依存を避ける

VBAVBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました