テーブル形式の表データに縞模様を付けるコードを紹介します。

通常テーブルを挿入したり条件付き書式で対応する方が簡単ですが、
それらの方法が取れない場合は以下のマクロで対応してください。
表の範囲を取得できる場合 - 表エリア.Rows
CurrentRegionやAutoFilter.Rangeなどが利用でき、
表の範囲を簡単に取得できる場合はこちらのコードを使用してください。
Sub 表エリアに縞模様の背景色を設定する() Dim 第1カラー As Long: 第1カラー = RGB(255, 255, 255) Dim 第2カラー As Long: 第2カラー = RGB(221, 235, 247) Dim Range表エリア As Range Set Range表エリア = Worksheets("○○").AutoFilter.Range Dim R As Long For R = 1 To Range表エリア.Rows.Count If WorksheetFunction.IsOdd(R) Then Range表エリア.Rows(R).Interior.Color = 第1カラー Else Range表エリア.Rows(R).Interior.Color = 第2カラー End If Next End Sub
行をひとつずつFor文でループし、
偶数/奇数を判定して第1/2カラーで着色するコードです。
着色エリアは「表エリア.Rows(R)」で取得しています。
RowsプロパティはWorksheetだけでなくRangeからも取得でき、
その場合は「親Rangeの第○行部分」を取得してくれます。
この仕様は今回の処理にピッタリで、
Range表エリア.Rows(R).Interior.Color
これだけで表の第○行の背景色を設定していくことができます。
この「第○行」はシートの行番号ではなくRange内の行番号のため、For文を
For R = 1 To Range表エリア.Rows.Count
こう書けるのも便利ですね。
なお、着色を「無色(背景なし)」に設定したい場合は、
Range表エリア.Rows(R).Interior.Color = RGB(255, 255, 255)
これでは「白色」になってしまうため、RGB値では指定できません。
背景色をなしにしたい場合は、以下のいずれかのコードに差し替えてください。
Range表エリア.Rows(R).Interior.ColorIndex = 0 Range表エリア.Rows(R).Interior.Pattern = xlNone
着色する列の範囲を指定する場合 - Intersect
「A列~G列内を着色する」など、列範囲を指定して着色する場合は、
Intersectメソッドを用いて以下のコードで実行します。
Sub 指定列に縞模様の背景色を設定する() Dim 第1カラー As Long: 第1カラー = RGB(255, 255, 255) Dim 第2カラー As Long: 第2カラー = RGB(221, 235, 247) Dim ws着色シート As Worksheet Set ws着色シート = Worksheets("○○") Dim 最終行 As Long 最終行 = ws着色シート.UsedRange.Rows.Count + ws着色シート.UsedRange.Row - 1 Dim R As Long For R = 4 To 最終行 If WorksheetFunction.IsOdd(R) Then Intersect(ws着色シート.Rows(R) _ , ws着色シート.Columns("A:G")).Interior.Color = 第1カラー Else Intersect(ws着色シート.Rows(R) _ , ws着色シート.Columns("A:G")).Interior.Color = 第2カラー End If Next End Sub
Intersectメソッドは複数のセル範囲の重複部分を取得するメソッドです。
例えばIntersect(Range("A1:C3"), Range("B2:D4"))は、
両者の重複するB2:C3セルを取得します。
今回のように「ある列範囲の第○行部分」を取得するのに便利なメソッドで、
Intersect(Rows(○), Columns("△:□"))という記述で取得できます。
エリア内を行ごとに分割して処理するのにIntersectはとても便利ですので、
知らなかった方はこの機会に覚えておきましょう。
汎用関数化
この処理をよく行う方は、以下のように汎用関数にしておくと便利です。
' 縞模様に着色 Sub セル範囲を行ごとに縞模様に着色する(着色エリア As Range _ , Optional 第1カラー As Long = -1, Optional 第2カラー As Long = -1) Dim R As Long For R = 1 To 着色エリア.Rows.Count ' ◇ 奇数行 If R Mod 2 = 1 Then If 第1カラー = -1 Then 着色エリア.Rows(R).Interior.ColorIndex = 0 Else 着色エリア.Rows(R).Interior.Color = 第1カラー End If ' ◇ 偶数行 Else If 第2カラー = -1 Then 着色エリア.Rows(R).Interior.ColorIndex = 0 Else 着色エリア.Rows(R).Interior.Color = 第2カラー End If End If Next End Sub
' 使用例 Call セル範囲を行ごとに縞模様に着色する(Worksheets("○○").AutoFilter.Range _ , ,RGB(221, 235, 247))
RGB値を渡すとその色に着色しますが、
「省略した場合(-1)は背景なしにする」
という機能も持たせました。
この汎用関数を用意しておけば、
使用例のように今回の処理を1行で実行できるようになります。
このように、「簡単だけど書くのが面倒なコード」は、
関数化が簡単な割にメリットが大きいです。
汎用関数集を作っている方は、ぜひそのメンバーに加えてあげてください。
汎用関数集の作り方・使い方についてはこちらをどうぞ。
www.limecode.jp