Excel。テーブルにしないで、一行おきに塗りつぶししたい。
<VBA 塗りつぶし>
わかりやすいように、一行おきに塗りつぶしをしたいけど、データが少なければ、
書式のコピーとか使って、塗りつぶしていくとか、
オートフィルの連続コピーの書式のみでコピーするとか、
条件付き書式にMOD+ROW関数を使ってもいいのですが、
とても、大きな表だったりすると、時間も掛かるし、面倒です。
そこで、マクロ。
VBAを使ってみると結構簡単に、一行おきに塗りつぶしを設定することが出来ます。
ということで、
今回は、一行おきに塗るつぶしをするマクロ。
VBAを紹介していきましょう。
次の表があります。
ボタン一発フルオートで作成するのもいいのですが、
煩雑になり、プログラムになれていない方には、一気に難しく感じられてしまうので、
セル番地を使いながら、作成していく事にしましょう。
それでは、開発タブのVisual Basicをクリックして、VBAのエディターを表示します。
なお、紹介は割愛しますが、マクロ。VBAを使う場合は、
マクロ有効ブックで保存しなおす必要がありますので、
マクロ有効ブックで保存しておきます。
また、標準モジュールが表示されていないようでしたら、挿入しておきます。
では、作成してきます。
Sub 一行おき塗りつぶし()
Dim i As Long
Dim 最終行 As Long
最終行 = Range("a1").CurrentRegion.Rows.Count
Range("a2:h" & 最終行).Interior.ColorIndex = xlNone
For i = 2 To 最終行 Step 2
Range("a" & i).Resize(1, 8).Interior.ThemeColor = xlThemeColorAccent6
Range("a" & i).Resize(1, 8).Interior.TintAndShade = 0.4
Next
End Sub
と入力して保存します。
説明は後ほどとしまして、マクロを実行してみましょう。
開発タブのマクロをクリックして、
マクロダイアログボックスが表示されます。
マクロを選択して実行ボタンをクリックしてみましょう。
このように、一行おきに塗りつぶしを設定することが出来ましたね。
では、簡単な解説。
最終行 = Range("a1").CurrentRegion.Rows.Count
これは、a1からの表の最終行の行番号を算出させています。
Range("a2:h" & 最終行).Interior.ColorIndex = xlNone
これは、念のため、データ範囲の塗りつぶしを解除させています。
Interiorは、セルの背景色などセル自身の色などに関する情報を管理しているオブジェクトです。
For i = 2 To 最終行 Step 2
Range("a" & i).Resize(1, 8).Interior.ThemeColor = xlThemeColorAccent6
Range("a" & i).Resize(1, 8).Interior.TintAndShade = 0.4
Next
For~Next は、その間のことを繰り返します。今回は、2~最終行までStep2。
つまり、1つおきに実施します。
そして、
Interior.ThemeColor = xlThemeColorAccent6
テーマの色合いは、アクセント6
Interior.TintAndShade = 0.4
テーマの明るさを0.4
という設定なのですが、カラーパレットをみると、意味がわかります。
テーマの色は、左側から、
xlThemeColorDark1
xlThemeColorLight1
xlThemeColorDark2
xlThemeColorLight2
xlThemeColorAccent1
xlThemeColorAccent2
xlThemeColorAccent3
xlThemeColorAccent4
xlThemeColorAccent5
xlThemeColorAccent6
テーマの明るさは、上から
TintAndShade = 0
TintAndShade = 0.8
TintAndShade = 0.6
TintAndShade = 0.4
TintAndShade = -0.25
TintAndShade = 0.5
というようになっていますので、
この組み合わせでカラーパレットの色を使うことが出来ます。