📊 Excel VBA Top100
🎨

AlternateRowColors

書式設定

選択範囲の行に交互の背景色を設定します

データ範囲の行に1行おきに背景色を自動設定し、縞模様(ゼブラストライプ)の見やすい表を作成するマクロです。長い一覧表で行を追うのに目が疲れる問題を解消します。色の指定はExcelのカラーパレットから選択でき、奇数行・偶数行それぞれに異なる色を設定します。手動で行を選んで色を塗る作業が不要になり、後からデータを追加・削除した際の縞模様の修正も一括で行えます。内部ではデータ行をループしながらMod演算で偶数・奇数を判定し、Interior.Colorで背景色を固定値として設定します。条件付き書式のROW関数による縞模様と違い、並び替え後も色がずれません。AutoFitRowsで行の高さも整えると資料全体の見やすさが向上し、不要になった場合はResetCellStylesで一括解除できます。色数を3色以上に増やすカスタマイズも、Mod演算の除数を変えるだけで対応できます。

AlternateRowColors デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 対象範囲を選択してから AlternateRowColors を実行します

🎯 活用シーン

  • ✓行数の多い社員名簿や顧客一覧を見やすくして、行の読み間違えを防ぎたいとき
  • ✓月次報告書や在庫一覧表の縞模様書式を、データ更新後でも素早く統一適用したいとき
  • ✓複数のシートに統一した縞模様デザインを一括で適用して、ブック全体の見た目を揃えたいとき
  • ✓会議資料用に縞模様付きの一覧表を毎回手動で作っている作業を自動化し、資料作成時間を短縮したいとき
  • ✓既存の縞模様がデータ更新のたびに崩れてしまう表を、ワンクリックで正しい配色に再設定したいとき

💡 実装のヒント

  • ▸ヘッダー行を含めたくない場合は、データ行の先頭から選択範囲を開始してください。ヘッダーは別途書式設定することをお勧めします。
  • ▸縞模様をリセットしたい場合は、範囲を選択してからホームタブの「書式のクリア」を実行するか、白・白の2色で再実行してください。
  • ▸印刷時に色が薄くなる場合は、プリンターの設定でカラー印刷が有効になっているか確認してください。
  • ▸ヘッダー行にも別の色を付けたい場合は、ループの開始行を1行前にずらして個別に色指定してください。
  • ▸行の追加・削除を頻繁に行うシートでは、条件付き書式による縞模様の方が自動更新の面で有利な場合があります。用途に応じて使い分けてください。

💻 VBAコード

' AlternateRowColors
' -----------------
' Macro Name: AlternateRowColors
' Description: 選択範囲の行に交互の背景色を設定します
' Parameters: なし
' Returns: なし
' Usage: 対象範囲を選択してから AlternateRowColors を実行します
' -----------------

Sub AlternateRowColors()
    On Error GoTo ErrorHandler

    Dim rng As Range
    Dim cell As Range
    Dim firstRow As Long

    If TypeName(Selection) <> "Range" Then
        MsgBox "セル範囲を選択してから実行してください", vbCritical, "エラー"
        Exit Sub
    End If

    Set rng = Selection
    firstRow = rng.Row

    For Each cell In rng.Rows
        If (cell.Row - firstRow) Mod 2 = 0 Then
            cell.Interior.Color = RGB(204, 229, 255)
        Else
            cell.Interior.Color = RGB(255, 255, 255)
        End If
    Next cell

    MsgBox "交互の背景色を設定しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub