VBAで1行おきに色を塗るには、For ループに Step 2 を組み合わせて、偶数行(または奇数行)だけに Interior.Color で色を設定します。データ量が変わっても最終行を自動で取得するので、毎回コードを変える必要がありません。
この記事では、次の内容を順番に解説します。
- 1行おきに色を塗る基本のコード
- 特定の列範囲だけに色をつける方法
- 色をリセットしてから塗り直す方法
1行おきに色を塗るコードは?
Sub ColorAlternateRows()
Dim i As Long
Dim lastRow As Long
' A列の最終行を取得する
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 2行目から最終行まで、2行ずつ飛ばしながら色を塗る
For i = 2 To lastRow Step 2
Rows(i).Interior.Color = RGB(230, 240, 255)
Next i
End Sub
コードのポイント
Step 2:ループが2行ずつ進みます。2行目→4行目→6行目…と偶数行だけを処理します。Rows(i).Interior.Color:その行全体の背景色を設定します。RGB(230, 240, 255):薄い青系の色です。数値を変えると好きな色に変えられます。
特定の列範囲だけに色をつけるには?
行全体ではなく、A〜D列だけに色をつけたい場合は Rows(i) の代わりに Range(Cells(i,1), Cells(i,4)) を使います。
Sub ColorAlternateRange()
Dim i As Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow Step 2
Range(Cells(i, 1), Cells(i, 4)).Interior.Color = RGB(255, 255, 200)
Next i
End Sub
Cells(i, 1) がA列、Cells(i, 4) がD列です。列番号を変えると対象範囲を変えられます。
色をリセットしてから塗り直すには?
何度もマクロを実行すると色が重複することがあります。先に色を全部クリアしてから塗り直すと、何度実行しても同じ結果になります。
Sub ResetAndColor()
Dim i As Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' まず色をすべてクリアする
Range(Cells(2, 1), Cells(lastRow, 4)).Interior.ColorIndex = xlNone
' 偶数行だけに色を塗る
For i = 2 To lastRow Step 2
Range(Cells(i, 1), Cells(i, 4)).Interior.Color = RGB(220, 255, 220)
Next i
End Sub
Interior.ColorIndex = xlNone で背景色を「なし」に戻します。
まとめ
- 基本の書き方:
For i = 2 To lastRow Step 2で偶数行だけをループする。 - 行全体に色をつける:
Rows(i).Interior.Color = RGB(...) - 列範囲を限定する:
Range(Cells(i,1), Cells(i,4)).Interior.Color = RGB(...) - 色をリセットする:
Interior.ColorIndex = xlNoneで背景色を消す。
よくある質問
奇数行に色をつけたい場合は?
For i = 3 To lastRow Step 2 のように開始を3にするだけで、3行目→5行目→7行目と奇数行だけを処理できます。
色の値はどこで確認できる?
Excelの「セルの書式設定」→「塗りつぶし」→「その他の色」→「ユーザー設定」タブでRGB値が確認できます。この値をそのまま RGB(赤, 緑, 青) に使えます。
条件付き書式と組み合わせることはできる?
VBAで色をつける方法と条件付き書式は競合することがあります。条件付き書式が設定されている場合、VBAで塗った色が上書きされることがあります。どちらかに統一して使うのがおすすめです。
印刷したときに色が薄くて見えない場合は?
RGBの値を少し濃い色に変えてみてください。印刷では画面より色が薄く出ることがあります。たとえば RGB(180, 210, 255) のように、数値を少し下げると濃い色になります。
ヘッダー行(1行目)には色をつけたくない場合は?
ループの開始を i = 2 にすることで1行目はスキップされます。ヘッダーに別の色をつけたい場合は、ループの前に Rows(1).Interior.Color = RGB(70, 130, 180) のように別途設定します。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



