こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
普段、エクセルで「終わった行を灰色にする」とか「要注意な数字を赤くする」といった作業、手動でやっていませんか?
そして、
- 「あれ、一行飛ばしたかも…」
- 「この赤色、さっきの赤と同じだっけ?」
なんて不安になって、何度も見返してしまいませんか。
私も心配性で、何度も確認しないと気が済まないタイプでした。
今日は、そんな「確認の不安」と「手作業のムダ」を同時に解消する、VBAのInterior.Colorプロパティについてご紹介します。
なぜ「手動の色付け」はやめるべきなのか?
結論から言うと、私たちの目と脳は、単純作業に向いていないからです。
数千行あるデータを一つずつみて、条件に合うものを一つずつ色を塗る作業。100行目を超えたあたりで、集中力は確実に落ちます。
でもプログラムに任せてしまえば、1万行あろうと、一瞬で正確に、同じ判断をし続けてくれます。
基本のき:Interior.Color と RGB
VBAで色を指定する方法はいくつかありますが、一番間違いがなく、思い通りの色が出せるのがRGB関数との組み合わせです。
- Red(赤)
- Green(緑)
- Blue(青)
この3つの光を0~255の数値で混ぜ合わせることで、約1677万色を表現できます。
まずは、「セルA1を真っ赤にする」コードを見てみましょう。
Sub MakeItRed()
' A1セルの背景色を赤にする
Range("A1").Interior.Color = RGB(255, 0, 0)
End Sub
基本はこれだけです。
でも実務では「A1だけ赤くする」なんてことはほぼありません。たったそれだけならこれまで通り手動で色付けした方が良いです。
次にもう少し実用的な例をみてみましょう。
【コピペOK】「条件付き自動色塗り」マクロ
例えば、「B列に “完了” と入っている行を、薄いグレーにして目立たなくしたい(作業済みであることを可視化したい)」 というシーンありますよね。
これを手動でやると、フィルタをかけて、選択して、塗りつぶして…と、最低でも5クリックは必要です。
以下のコードなら、ボタン一つで終わります。
Sub HighlightCompletedRows()
Dim i As Long
Dim lastRow As Long
' データの最終行を取得(A列を基準)
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 2行目から最終行までループ処理
For i = 2 To lastRow
' もしB列の値が「完了」だったら
If Cells(i, 2).Value = "完了" Then
' その行のA列~E列を薄いグレー(RGB:240,240,240)にする
Range(Cells(i, 1), Cells(i, 5)).Interior.Color = RGB(240, 240, 240)
Else
' 「完了」じゃない場合は色を消す(ここ重要!)
Range(Cells(i, 1), Cells(i, 5)).Interior.ColorIndex = xlNone
End If
Next i
MsgBox "色付け完了です。"
End Sub
このコードのポイント
特に注目してほしいのは Else の部分です。
「完了」じゃなくなった(ステータスが戻った)時に、自動で色を消す処理を入れています。
これがないと、「未完了なのにグレーのまま」という一番怖いミスが起きます。
うっかりミスをせずに済みます。
色選びに迷わないための「おすすめRGB値」
「どの色が見やすいかわからない…」という悩みもよく聞きます。原色の赤(255, 0, 0)や青(0, 0, 255)は目に刺さるので、少し淡い色を使うのがコツです。
私がよく使う「目に優しいパステルカラー」です。数値を置いておきます。
- 薄い赤(警告・エラー): RGB(255, 200, 200)
- 薄い青(正常・入力可): RGB(200, 230, 255)
- 薄い黄色(注意・要確認): RGB(255, 255, 200)
- 薄いグレー(完了・対象外): RGB(240, 240, 240)
※塗ってある色と同じものではありません。
これらを先ほどのコードの RGB(…) の部分に入れ替えるだけで使えます。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント