テーブルなどでおなじみの縞々を、マクロで作ってみようという企画です。For next、Ifを使うので、工夫しだいで色んな処理に流用できます。
マクロによる色の塗り方
まずはマクロでセルに色を付ける方法ですが、これは別記事で詳しく解説しているので、ここでは簡単におさらいといたします。
背景の色を変更する(色番号)
対象.Interior.ColorIndex = 色番号
対象.Interior.ColorIndex = 色番号
背景の色を変更する(RGB)
対象.Interior.Color = RGB(R,G,B)
イメージとしてはこんな具合に、縞々に色をつけた表を作ります。
手動でこつこつ色をつけてもできなくはないんですが、あとあと行の挿入とかするとまたやりなおしなので、ここはひとつマクロで色をつけてみたいと思います。
まずはどんな色を塗るかを決めます。ホームタブ→塗りつぶし(またはフォント)の色をセットしておいて……。
色がついたら、今度は「その他の色」をクリックします。
ここで今選択している色のRGBが確認できます。
少し明度を高くしたものをもうひとつの色にして、これで色は決まりました。
開発タブからマクロ編集画面に入り、Range(“A1:E1”).Interior.Color = RGB(147, 205, 221)と記述します。A1~E1のセルに濃い色を塗る命令です。
マクロを実行すると、指定した範囲に色が塗られました。
薄い色も同様に指定します。
とりあえずふたつの色をそれぞれ塗ることはできました。あとはこれを繰り返すだけです。
動作を繰り返すマクロ
変数を指定する
Dim 変数名
Dim 変数名
指定した回数処理を繰り返す
For 変数名 = 開始数 to 終了数
(処理)
Next
処理を繰り返すには、For Next文というものを使います。
「For」と「Next」で囲んだ範囲の処理を繰り返すというもので……。
回数を指定する際に変数を指定する必要がありますので、Dimで変数「i」を作成します。「数字だよ」ということで1を代入してますが、別になくても動きます。
※今回はOption Explicit(変数名の宣言の義務化)を省略しているので、実際は数字の代入どころかDim文なしでも動きます。ただこのブログ的にはDim文を使うことを推奨しています。そのへんの詳しい話はDimの記事を参照。
Forに対して「iが1から10の間処理を繰り返す」を意味するi = 1 to 10をくっつけます。
for文の中ではまず「i」が1としてスタートし、Nextまで行くと「i」を+1して、またFor文の頭まで戻ります。10まで繰り返すとしているので、10回行うと繰り返し処理が終了します。
この「i」をセル番号として使おうとしているのですが、結構これが鬼門で、Rangeで“A” & i:”E” & iのように指定してもエラーになります。なぜでしょうか。
この「i」をセル番号として使おうとしているのですが、結構これが鬼門で、Rangeで“A” & i:”E” & iのように指定してもエラーになります。なぜでしょうか。
答えは:も””で囲む必要があるからおよびiと:の間も&でつなぐ必要があるからです。
この場合Range(“A” & i & “:E” & i)と指定すると、エラーにならずに実行可能です。
この場合Range(“A” & i & “:E” & i)と指定すると、エラーにならずに実行可能です。
ここまでの実行結果。まず最初の色が塗られ、次の色がその上から塗られ……を10回繰り返しています。
条件分岐で、偶数奇数で処理を変える必要がありそうです。
条件分岐で、偶数奇数で処理を変える必要がありそうです。
条件分岐するマクロ~完成
条件により処理を変える
If 処理 Then
(条件に合った時の処理)
Else
(条件に合わない場合の処理)
End if
If 処理 Then
(条件に合った時の処理)
Else
(条件に合わない場合の処理)
End if
関数でもおなじみのIf文です。今回は偶数奇数で処理を分けたいので、If i Mod 2 = 0 Then(I÷2が0の場合=偶数)を条件にしています。最初に奇数の処理を行いたいなら、Mod 2 = 1になります。
ひとつめとふたつめの処理の間にElseを置きます。これで上の処理は行が偶数、下の処理は行が奇数時に行われることになります。
If文の処理がどこまで範囲かを示すために、End ifで区切ります。
完成!
' 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(エクセル):色、塗りつぶし、スタイル
Excelのセルや文字などの色を変える方法、スタイルを規定する方法のまとめです。
色の変更
セル・文字の色を変更する方法です。基本的にこれ知っとけば応用がききます。パレットにない色の作り方、グラデーションにも言及しています。...
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。
コメント