【Excel VBA入門 第11回】見た目も分かりやすく!〇のトグルに合わせてセルの背景色を自動変更する方法

スポンサーリンク
Excel VBA

導入

前回(第10回)では、Intersect 関数を使ってダブルクリックマクロが動く範囲を特定エリア(A列など)だけに制限する方法をご紹介した。

今回はその見た目をさらにブラッシュアップし、「〇がついたらセルを黄色にし、〇が消えたら元の色に戻す」という自動装飾のテクニックをご紹介しよう。

「値の入力」と「セルの装飾」をセットで自動化することで、視認性が格段に上がり、一目で状況が把握できる実用的なチェックリストを作成できるようになる。

セルの背景色を変更する「Interior.Color」

VBAでセルの背景色を変更・操作する際は、Range オブジェクトの Interior.Color プロパティ を使用する。

基本的な書き方

VBA

' セルの背景色を黄色にする
Target.Interior.Color = RGB(255, 255, 0)

' セルの背景色を「塗りつぶしなし」に戻す
Target.Interior.Color = xlNone

色の指定には、赤・緑・青の割合を0〜255で指定する RGB(赤, 緑, 青) 関数 を使うのが最も一般的で柔軟性が高い。

また、色を消して無色(塗りつぶしなし)に戻したい場合は、定数の xlNone を代入する。

実践!〇のON/OFFに合わせて背景色を変えるコード

第10回で作成した「範囲制限付きトグルマクロ」に、背景色の変更処理を追加したコードが以下である。

設定手順

  1. Alt + F11 でVBAエディタを開く。
  2. 該当シートのシートモジュールを開く。
  3. 以下のコードを貼り付ける。

VBA

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ' 〇を入力したい範囲をオブジェクト変数にセット
    Dim CheckRange As Range
    Set CheckRange = Me.Range("A2:A100")
    
    ' ダブルクリックされたセル(Target)が指定範囲内か判定
    If Not Intersect(Target, CheckRange) Is Nothing Then
        ' 通常のダブルクリック(編集モード)をキャンセル
        Cancel = True
        
        ' トグル処理(〇と背景色の切替)
        If Target.Value = "〇" Then
            Target.Value = ""
            Target.Interior.Color = xlNone ' 背景色を「塗りつぶしなし」に戻す
        Else
            Target.Value = "〇"
            Target.Interior.Color = RGB(255, 255, 204) ' 薄い黄色に塗る
        End If
    End If
End Sub

コードのポイント解説

目に優しい色の選定(RGB指定)

単に「黄色」にしようとして RGB(255, 255, 0)(鮮やかな原色の黄色)を指定すると、画面上で主張が強すぎて文字が見づらくなることがある。

実務では RGB(255, 255, 204)RGB(220, 230, 242)(薄い青)のような、目が疲れにくいパステルカラー(淡い色) を指定するのがおすすめだ。

条件分岐に「背景色の切り替え」を組み込む

If文の中で、Target.Value の切り替えとまったく同じタイミングTarget.Interior.Color を変更している。

  • 「〇」を消すとき $\rightarrow$ Interior.Color = xlNone で色も消す
  • 「〇」をつけるとき $\rightarrow$ Interior.Color = RGB(...) で色を付ける

これにより、文字と背景色が常に連動し、チグハグになるのを防ぐことができる。

条件付き書式との違い・使い分け

Excelには「条件付き書式」という機能もあるが、マクロで背景色をコントロールすることには以下のメリットがある。

  • シートの動作が重くなりにくい(大量の条件付き書式ルールは動作遅延の原因になる)
  • 他の人がシートを編集しても書式ルールが崩れにくい(コピペ等で条件付き書式が破壊されるトラブルを防止できる)

マクロ側で文字入力と装飾を完結させることで、シート全体のメンテナンス性が向上する。

まとめ

今回は、トグル処理に合わせてセルの背景色を自動変更する方法を学んだ。

  • Target.Interior.Color でセルの背景色を操作できる
  • 無色に戻すときは xlNone を使用する
  • RGB関数で淡い色を指定すると、実用的で見やすい画面になる

第8回から続いた「イベントプロシージャとダブルクリックの活用編」は今回でひと区切りとなる。

次回(第12回)からは、処理結果を呼び出し元に返してくれる「Function(関数)プロシージャの基礎と作り方」について解説していこう。

コメント

タイトルとURLをコピーしました