ExcelVBA(マクロ)で一行おきに色を付ける方法/Color、For Next文、If文の組み合わせ方

IT

テーブルなどでおなじみの縞々を、マクロで作ってみようという企画です。For next、Ifを使うので、工夫しだいで色んな処理に流用できます。

Advertisements

マクロによる色の塗り方

まずはマクロでセルに色を付ける方法ですが、これは別記事で詳しく解説しているので、ここでは簡単におさらいといたします。

背景の色を変更する(色番号)
対象.Interior.ColorIndex = 色番号

背景の色を変更する(RGB)
対象.Interior.Color = RGB(R,G,B)

stripe1
イメージとしてはこんな具合に、縞々に色をつけた表を作ります。
stripe2
手動でこつこつ色をつけてもできなくはないんですが、あとあと行の挿入とかするとまたやりなおしなので、ここはひとつマクロで色をつけてみたいと思います。
stripe3
まずはどんな色を塗るかを決めます。ホームタブ塗りつぶし(またはフォント)の色をセットしておいて……。
stripe4
色がついたら、今度は「その他の色」をクリックします。
stripe5
ここで今選択している色のRGBが確認できます。
stripe6
少し明度を高くしたものをもうひとつの色にして、これで色は決まりました。
stripe7
開発タブからマクロ編集画面に入り、Range(“A1:E1”).Interior.Color = RGB(147, 205, 221)と記述します。A1~E1のセルに濃い色を塗る命令です。
stripe8
マクロを実行すると、指定した範囲に色が塗られました。
stripe9
薄い色も同様に指定します。
stripe10
とりあえずふたつの色をそれぞれ塗ることはできました。あとはこれを繰り返すだけです。

動作を繰り返すマクロ

変数を指定する
Dim 変数名

指定した回数処理を繰り返す
For 変数名 = 開始数 to 終了数
(処理)
Next

stripe11
処理を繰り返すには、For Next文というものを使います。
stripe12
「For」と「Next」で囲んだ範囲の処理を繰り返すというもので……。
stripe13
回数を指定する際に変数を指定する必要がありますので、Dimで変数「i」を作成します。「数字だよ」ということで1を代入してますが、別になくても動きます。

※今回はOption Explicit(変数名の宣言の義務化)を省略しているので、実際は数字の代入どころかDim文なしでも動きます。ただこのブログ的にはDim文を使うことを推奨しています。そのへんの詳しい話はDimの記事を参照。

stripe14
Forに対して「iが1から10の間処理を繰り返す」を意味するi = 1 to 10をくっつけます。
stripe15
for文の中ではまず「i」が1としてスタートし、Nextまで行くと「i」を+1して、またFor文の頭まで戻ります。10まで繰り返すとしているので、10回行うと繰り返し処理が終了します。
この「i」をセル番号として使おうとしているのですが、結構これが鬼門で、Rangeで“A” & i:”E” & iのように指定してもエラーになります。なぜでしょうか。
stripe16
答えは:も””で囲む必要があるからおよびiと:の間も&でつなぐ必要があるからです。
この場合Range(“A” & i & “:E” & i)と指定すると、エラーにならずに実行可能です。
stripe17
ここまでの実行結果。まず最初の色が塗られ、次の色がその上から塗られ……を10回繰り返しています。
条件分岐で、偶数奇数で処理を変える必要がありそうです。

条件分岐するマクロ~完成

条件により処理を変える
If 処理 Then
(条件に合った時の処理)
Else
(条件に合わない場合の処理)
End if
stripe19
関数でもおなじみのIf文です。今回は偶数奇数で処理を分けたいので、If i Mod 2 = 0 Then(I÷2が0の場合=偶数)を条件にしています。最初に奇数の処理を行いたいなら、Mod 2 = 1になります。
stripe20
ひとつめとふたつめの処理の間にElseを置きます。これで上の処理は行が偶数、下の処理は行が奇数時に行われることになります。
stripe21
If文の処理がどこまで範囲かを示すために、End ifで区切ります。
stripe22
完成!
' vba
Dim i
i = 1
For i = 1 To 10
If i Mod 2 = 0 Then
Range("A" & i & ":E" & i).Interior.Color = RGB(147, 205, 221)
Else
Range("A" & i & ":E" & i).Interior.Color = RGB(194, 227, 236)
End If
Next

上記のマクロは一例です。最初に全てのセルに色を塗って明度だけ変更したり、現在選択しているセルを起点にストライプを下に展開したりすることも可能です。
気力と暇があったらそのうちそういう記事も書くかもしれませんが、ひとまず一行ごとに色を塗るマクロについては以上です。

やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント