【Excel】VBAでセルの色やフォントを条件によって変更する方法

【Excel】VBAでセルの色やフォントを条件によって変更する方法
🛡️ 超解決

【要点】VBAでセルの書式を条件付きで変更する

  • 条件付き書式設定: VBAを使わずに、Excelの標準機能で条件に応じたセルの書式変更が可能です。
  • VBAでの書式変更: VBAコードで、より複雑な条件や多数のセルに対して、セルの色、フォントスタイル、サイズなどを変更できます。
  • コードの記述と実行: VBAエディタにコードを記述し、マクロとして実行することで、指定した条件でセルの書式が自動更新されます。

ADVERTISEMENT

VBAでセルの書式を変更する基本的な仕組み

Excel VBAでセルの書式を変更するには、対象となるセルを指定し、そのセルの持つ「Font」オブジェクトや「Interior」オブジェクトのプロパティを操作します。

例えば、セルの背景色を変更したい場合は、「Interior.Color」プロパティにRGB値やExcelで定義された色定数を指定します。フォントの色を変更するなら「Font.Color」、太字にするなら「Font.Bold」といった具合です。

これらのプロパティを、特定の条件が満たされた場合にのみ変更するようにコードを記述することで、動的な書式設定が実現できます。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

VBAコードでセルの色を変更する手順

ここでは、特定のセルの背景色を赤に変更する基本的なVBAコードの作成手順を説明します。

  1. VBAエディタを開く
    Excelで「Alt」+「F11」キーを押してVBAエディタ(Microsoft Visual Basic for Applications)を開きます。
  2. 標準モジュールを挿入する
    VBAエディタのメニューから「挿入」>「標準モジュール」を選択します。右側の白い画面にコードを記述します。
  3. コードを記述する
    以下のコードをコピーして、挿入した標準モジュールに貼り付けます。
    
    Sub ChangeCellColorRed()
        ' 対象のセルを指定します
        Dim targetCell As Range
        Set targetCell = ThisWorkbook.Sheets("Sheet1").Range("A1")
        
        ' セルの背景色を赤に変更します
        targetCell.Interior.Color = RGB(255, 0, 0)
    End Sub
    
  4. コードを実行する
    VBAエディタでコード内にカーソルを置き、「F5」キーを押すか、メニューの「実行」>「Sub/ユーザーフォームの実行」を選択します。または、Excelシートに戻り「Alt」+「F8」でマクロダイアログを開き、「ChangeCellColorRed」を選択して「実行」ボタンをクリックします。

このコードは、「Sheet1」の「A1」セルの背景色を赤(RGB値で指定)に変更します。RGB値は、赤、緑、青の各色の強さを0から255の数値で指定します。

条件によってセルの色を変更する方法

次に、セルの値が特定の条件を満たす場合にのみ、背景色を変更する方法を解説します。ここでは、「A1」セルの値が100以上であれば背景色を黄色にする例を示します。

  1. VBAエディタを開き、標準モジュールを挿入する
    前述の手順と同様に、VBAエディタを開き、標準モジュールを挿入します。
  2. 条件分岐のコードを記述する
    以下のコードを記述します。
    
    Sub ChangeColorBasedOnValue()
        Dim targetCell As Range
        Set targetCell = ThisWorkbook.Sheets("Sheet1").Range("A1")
        
        ' セルの値が100以上の場合
        If targetCell.Value >= 100 Then
            ' 背景色を黄色に変更します
            targetCell.Interior.Color = RGB(255, 255, 0)
        Else
            ' 条件を満たさない場合は背景色をリセット(または別の色に)
            targetCell.Interior.ColorIndex = xlNone ' 色なし
        End If
    End Sub
    
  3. コードを実行する
    前述の手順と同様に、VBAエディタまたはExcelシートからマクロを実行します。

このコードでは、「If…Then…Else…End If」という条件分岐構文を使用しています。

「targetCell.Value >= 100」という条件が真(True)であれば、背景色が黄色になります。

「Else」以降は、条件が偽(False)の場合の処理です。ここでは「targetCell.Interior.ColorIndex = xlNone」として、背景色をリセットしています。

ADVERTISEMENT

複数の条件でセルの色を変更する方法

複数の条件を設定したい場合は、「ElseIf」文を使用します。例えば、値が100以上なら黄色、50以上100未満ならオレンジ、それ以外なら青色にする場合を考えます。

  1. VBAエディタを開き、標準モジュールを挿入する
    VBAエディタを開き、標準モジュールを挿入します。
  2. 複数の条件分岐コードを記述する
    以下のコードを記述します。
    
    Sub ChangeColorMultipleConditions()
        Dim targetCell As Range
        Set targetCell = ThisWorkbook.Sheets("Sheet1").Range("A1")
        
        ' 値によって背景色を変更します
        If targetCell.Value >= 100 Then
            targetCell.Interior.Color = RGB(255, 255, 0) ' 黄色
        ElseIf targetCell.Value >= 50 Then
            targetCell.Interior.Color = RGB(255, 165, 0) ' オレンジ
        Else
            targetCell.Interior.Color = RGB(0, 0, 255)   ' 青色
        End If
    End Sub
    
  3. コードを実行する
    マクロを実行します。

「ElseIf」を使うことで、複数の条件を順番に評価できます。

このコードでは、まず「>= 100」をチェックし、満たせば黄色にします。

満たさなければ次に「>= 50」をチェックし、満たせばオレンジにします。

どちらの条件も満たさなければ、「Else」以下の青色になります。

セルのフォントを変更する方法

セルの色だけでなく、フォントのスタイル(太字、斜体)、色、サイズなどもVBAで変更できます。

ここでは、「A1」セルの値が50未満の場合に、フォントを太字にし、色を赤にする例を示します。

  1. VBAエディタを開き、標準モジュールを挿入する
    VBAエディタを開き、標準モジュールを挿入します。
  2. フォント変更コードを記述する
    以下のコードを記述します。
    
    Sub ChangeFontBasedOnValue()
        Dim targetCell As Range
        Set targetCell = ThisWorkbook.Sheets("Sheet1").Range("A1")
        
        ' セルの値が50未満の場合
        If targetCell.Value < 50 Then
            ' フォントを太字にします
            targetCell.Font.Bold = True
            ' フォントの色を赤にします
            targetCell.Font.Color = RGB(255, 0, 0)
            ' フォントサイズを12ポイントにします(任意)
            targetCell.Font.Size = 12
        Else
            ' 条件を満たさない場合はフォントをリセット(または別のスタイルに)
            targetCell.Font.Bold = False
            targetCell.Font.ColorIndex = xlAutomatic ' 自動色
            targetCell.Font.Size = 10 ' 元のフォントサイズ(例)
        End If
    End Sub
    
  3. コードを実行する
    マクロを実行します。

「targetCell.Font.Bold = True」でフォントが太字になります。

「targetCell.Font.Color = RGB(255, 0, 0)」でフォントの色を赤に設定します。

「targetCell.Font.Size = 12」でフォントサイズを12ポイントに設定できます。

「Else」の部分では、条件を満たさない場合のフォント設定を元に戻しています。

複数のセル範囲に条件付き書式を適用する

特定のセルだけでなく、複数のセル範囲に対して条件付き書式を適用したい場合もよくあります。

ここでは、「Sheet1」の「A1:A10」の範囲にあるセルのうち、値が50未満のセルの背景色を赤くするコードを作成します。

  1. VBAエディタを開き、標準モジュールを挿入する
    VBAエディタを開き、標準モジュールを挿入します。
  2. ループ処理のコードを記述する
    以下のコードを記述します。
    
    Sub ChangeColorInRange()    
        Dim targetRange As Range
        Dim cell As Range
        
        ' 対象のセル範囲を指定します
        Set targetRange = ThisWorkbook.Sheets("Sheet1").Range("A1:A10")
        
        ' 指定した範囲の各セルに対して処理を行います
        For Each cell In targetRange
            ' セルの値が50未満の場合
            If cell.Value < 50 Then
                cell.Interior.Color = RGB(255, 0, 0) ' 背景色を赤に
            Else
                cell.Interior.ColorIndex = xlNone ' 色なし
            End If
        Next cell
    End Sub
    
  3. コードを実行する
    マクロを実行します。

ここでは「For Each...Next」というループ構文を使用しています。

「targetRange」で指定した範囲(A1からA10)の各セルを順番に「cell」という変数に取り出し、それぞれのセルに対して「If」文で条件判定と書式変更を行っています。

これにより、範囲内のすべてのセルに対して、条件に応じた書式設定を自動で行うことができます。

VBAでの条件付き書式設定の注意点とトラブルシューティング

VBAでセルの書式を条件によって変更する際に、いくつか注意すべき点や、よくあるトラブルとその対処法があります。

セキュリティ警告が表示される場合

原因と対処法

ExcelファイルにVBAコードが含まれている場合、セキュリティ上の理由からマクロの実行がブロックされることがあります。

これは、悪意のあるマクロによって意図しない操作が行われるのを防ぐための機能です。

対処法としては、以下のいずれかの方法でセキュリティ設定を変更するか、マクロを有効にする必要があります。

  1. ファイルを開いたときに表示されるセキュリティバーで「コンテンツの有効化」をクリックする
    多くの場合は、ファイルを開いた際に画面上部に表示される黄色いセキュリティバーの「コンテンツの有効化」ボタンをクリックするだけでマクロが実行できるようになります。
  2. Excelのセキュリティセンターの設定を変更する
    「ファイル」タブ > 「オプション」 > 「トラストセンター」 > 「トラストセンターの設定」を開きます。「マクロの設定」で「すべてのマクロを無効にする(推奨されません)」または「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」を選択します。ただし、セキュリティリスクが増加するため、信頼できるファイルのみに適用してください。
  3. ファイルを信頼できる場所に保存する
    OneDriveなどの信頼できる場所にファイルを保存すると、セキュリティ警告が表示されにくくなることがあります。

意図しないセルが変更されてしまう場合

原因と対処法

セルの範囲指定が正しくなかったり、条件判定のロジックに誤りがあったりすると、意図しないセルが変更されてしまいます。

原因を特定するためには、以下の点を確認してください。

  1. 「Debug.Print」で値を確認する
    VBAエディタで、コードの途中に「Debug.Print」文を挿入し、変数やセルの値を出力して確認します。例えば、「Debug.Print cell.Address, cell.Value」のように記述すると、対象セルとその値がイミディエイトウィンドウ(Ctrl+Gで表示)に出力されます。
  2. コードを一行ずつ実行する(ステップ実行)
    VBAエディタでF8キーを押すと、コードを一行ずつ実行できます。これにより、どの段階で意図しない処理が発生しているかを特定しやすくなります。
  3. セルの範囲指定や条件式を再確認する
    Rangeオブジェクトの指定(例: "A1:A10")や、If文の条件式(例: "> 100")に間違いがないか、慎重に確認してください。

色やフォントがリセットされない場合

原因と対処法

条件を満たさなくなった場合に、書式をリセットする処理(Else節)が正しく記述されていない、または実行されていない可能性があります。

書式をリセットするには、以下のようなコードを使用します。

  • 背景色をリセット: cell.Interior.ColorIndex = xlNone
  • フォントの色を自動に戻す: cell.Font.ColorIndex = xlAutomatic
  • フォントを通常の太さ(Bold=False)に戻す: cell.Font.Bold = False

これらのリセット処理を、条件を満たさない場合の「Else」節に必ず記述するようにしてください。

Excelの標準機能「条件付き書式」との比較

Excelには、VBAを使わなくてもセルの書式を条件によって変更できる「条件付き書式」という機能が標準で備わっています。

VBAでの処理と、Excel標準の条件付き書式設定のどちらを使うべきか、その違いと使い分けについて解説します。

項目 VBAによる条件付き書式 Excel標準の条件付き書式
設定の容易さ コード記述が必要で、初心者にはハードルが高い GUI操作で直感的に設定できる
柔軟性・複雑性 非常に高い。複雑な条件分岐、ループ処理、他のブックとの連携など、あらゆる処理が可能 限定的。あらかじめ用意されたルールや数式に基づいて設定
パフォーマンス 大量のセルや複雑な処理の場合、一時的にExcelが重くなることがある 大量のデータでも比較的軽快に動作する傾向がある
実行タイミング マクロ実行時。イベント(セルの変更など)をトリガーにすることも可能 シートの変更時などに自動で適用・更新される
管理のしやすさ VBAコードの管理が必要。コードの保守・更新が必要 Excelシート上で視覚的に確認・編集できる
適用範囲 ブック全体、特定のシート、特定のセル範囲など柔軟に指定可能 シート内の指定したセル範囲に適用

VBAによる条件付き書式が適しているケース

以下のような場合に、VBAによる条件付き書式設定が適しています。

  • 複雑な条件ロジックが必要な場合(例:複数のシートの値と連動させる、特定の計算結果に基づいて色を変えるなど)
  • 実行タイミングを細かく制御したい場合(例:ボタンクリック時のみ書式を適用・解除したい)
  • 条件付き書式では実現できない、フォントの動的な変更(例:条件によってフォントの種類やサイズを複数パターン変える)を行いたい場合
  • 定期的に書式設定を自動化したい場合

Excel標準の条件付き書式が適しているケース

以下のような場合は、Excel標準の条件付き書式機能で十分対応可能です。

  • セルの値や日付、文字列に基づいて色やアイコンを設定したい場合
  • 数式を使って、より柔軟な条件を設定したい場合(例:特定の列の値が他の列の値より大きい場合に色を付ける)
  • 手軽に、視覚的に設定したい場合
  • VBAの知識がない、または学習する時間がない場合

基本的には、Excel標準の条件付き書式で実現できる範囲はそちらを利用し、より高度な処理や自動化が必要な場合にVBAを検討するのが良いでしょう。

まとめ

この記事では、Excel VBAを使用してセルの色やフォントを条件によって変更する方法を解説しました。

VBAエディタでのコード記述、セルの書式プロパティの操作、条件分岐(If文)やループ処理(For Each)の活用方法を具体的なコード例とともに学びました。

これにより、手作業では時間のかかる書式設定を自動化し、業務効率を大幅に向上させることができます。

まずは簡単なコードから試してみて、ご自身の業務に合わせて応用してみてください。

📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】