【要点】VBAでセルの書式を条件付きで変更する
- 条件付き書式設定: VBAを使わずに、Excelの標準機能で条件に応じたセルの書式変更が可能です。
- VBAでの書式変更: VBAコードで、より複雑な条件や多数のセルに対して、セルの色、フォントスタイル、サイズなどを変更できます。
- コードの記述と実行: VBAエディタにコードを記述し、マクロとして実行することで、指定した条件でセルの書式が自動更新されます。
ADVERTISEMENT
目次
VBAでセルの書式を変更する基本的な仕組み
Excel VBAでセルの書式を変更するには、対象となるセルを指定し、そのセルの持つ「Font」オブジェクトや「Interior」オブジェクトのプロパティを操作します。
例えば、セルの背景色を変更したい場合は、「Interior.Color」プロパティにRGB値やExcelで定義された色定数を指定します。フォントの色を変更するなら「Font.Color」、太字にするなら「Font.Bold」といった具合です。
これらのプロパティを、特定の条件が満たされた場合にのみ変更するようにコードを記述することで、動的な書式設定が実現できます。
VBAコードでセルの色を変更する手順
ここでは、特定のセルの背景色を赤に変更する基本的なVBAコードの作成手順を説明します。
- VBAエディタを開く
Excelで「Alt」+「F11」キーを押してVBAエディタ(Microsoft Visual Basic for Applications)を開きます。 - 標準モジュールを挿入する
VBAエディタのメニューから「挿入」>「標準モジュール」を選択します。右側の白い画面にコードを記述します。 - コードを記述する
以下のコードをコピーして、挿入した標準モジュールに貼り付けます。Sub ChangeCellColorRed() ' 対象のセルを指定します Dim targetCell As Range Set targetCell = ThisWorkbook.Sheets("Sheet1").Range("A1") ' セルの背景色を赤に変更します targetCell.Interior.Color = RGB(255, 0, 0) End Sub - コードを実行する
VBAエディタでコード内にカーソルを置き、「F5」キーを押すか、メニューの「実行」>「Sub/ユーザーフォームの実行」を選択します。または、Excelシートに戻り「Alt」+「F8」でマクロダイアログを開き、「ChangeCellColorRed」を選択して「実行」ボタンをクリックします。
このコードは、「Sheet1」の「A1」セルの背景色を赤(RGB値で指定)に変更します。RGB値は、赤、緑、青の各色の強さを0から255の数値で指定します。
条件によってセルの色を変更する方法
次に、セルの値が特定の条件を満たす場合にのみ、背景色を変更する方法を解説します。ここでは、「A1」セルの値が100以上であれば背景色を黄色にする例を示します。
- VBAエディタを開き、標準モジュールを挿入する
前述の手順と同様に、VBAエディタを開き、標準モジュールを挿入します。 - 条件分岐のコードを記述する
以下のコードを記述します。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 - コードを実行する
前述の手順と同様に、VBAエディタまたはExcelシートからマクロを実行します。
このコードでは、「If…Then…Else…End If」という条件分岐構文を使用しています。
「targetCell.Value >= 100」という条件が真(True)であれば、背景色が黄色になります。
「Else」以降は、条件が偽(False)の場合の処理です。ここでは「targetCell.Interior.ColorIndex = xlNone」として、背景色をリセットしています。
ADVERTISEMENT
複数の条件でセルの色を変更する方法
複数の条件を設定したい場合は、「ElseIf」文を使用します。例えば、値が100以上なら黄色、50以上100未満ならオレンジ、それ以外なら青色にする場合を考えます。
- VBAエディタを開き、標準モジュールを挿入する
VBAエディタを開き、標準モジュールを挿入します。 - 複数の条件分岐コードを記述する
以下のコードを記述します。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 - コードを実行する
マクロを実行します。
「ElseIf」を使うことで、複数の条件を順番に評価できます。
このコードでは、まず「>= 100」をチェックし、満たせば黄色にします。
満たさなければ次に「>= 50」をチェックし、満たせばオレンジにします。
どちらの条件も満たさなければ、「Else」以下の青色になります。
セルのフォントを変更する方法
セルの色だけでなく、フォントのスタイル(太字、斜体)、色、サイズなどもVBAで変更できます。
ここでは、「A1」セルの値が50未満の場合に、フォントを太字にし、色を赤にする例を示します。
- VBAエディタを開き、標準モジュールを挿入する
VBAエディタを開き、標準モジュールを挿入します。 - フォント変更コードを記述する
以下のコードを記述します。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 - コードを実行する
マクロを実行します。
「targetCell.Font.Bold = True」でフォントが太字になります。
「targetCell.Font.Color = RGB(255, 0, 0)」でフォントの色を赤に設定します。
「targetCell.Font.Size = 12」でフォントサイズを12ポイントに設定できます。
「Else」の部分では、条件を満たさない場合のフォント設定を元に戻しています。
複数のセル範囲に条件付き書式を適用する
特定のセルだけでなく、複数のセル範囲に対して条件付き書式を適用したい場合もよくあります。
ここでは、「Sheet1」の「A1:A10」の範囲にあるセルのうち、値が50未満のセルの背景色を赤くするコードを作成します。
- VBAエディタを開き、標準モジュールを挿入する
VBAエディタを開き、標準モジュールを挿入します。 - ループ処理のコードを記述する
以下のコードを記述します。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 - コードを実行する
マクロを実行します。
ここでは「For Each...Next」というループ構文を使用しています。
「targetRange」で指定した範囲(A1からA10)の各セルを順番に「cell」という変数に取り出し、それぞれのセルに対して「If」文で条件判定と書式変更を行っています。
これにより、範囲内のすべてのセルに対して、条件に応じた書式設定を自動で行うことができます。
VBAでの条件付き書式設定の注意点とトラブルシューティング
VBAでセルの書式を条件によって変更する際に、いくつか注意すべき点や、よくあるトラブルとその対処法があります。
セキュリティ警告が表示される場合
原因と対処法
ExcelファイルにVBAコードが含まれている場合、セキュリティ上の理由からマクロの実行がブロックされることがあります。
これは、悪意のあるマクロによって意図しない操作が行われるのを防ぐための機能です。
対処法としては、以下のいずれかの方法でセキュリティ設定を変更するか、マクロを有効にする必要があります。
- ファイルを開いたときに表示されるセキュリティバーで「コンテンツの有効化」をクリックする
多くの場合は、ファイルを開いた際に画面上部に表示される黄色いセキュリティバーの「コンテンツの有効化」ボタンをクリックするだけでマクロが実行できるようになります。 - Excelのセキュリティセンターの設定を変更する
「ファイル」タブ > 「オプション」 > 「トラストセンター」 > 「トラストセンターの設定」を開きます。「マクロの設定」で「すべてのマクロを無効にする(推奨されません)」または「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」を選択します。ただし、セキュリティリスクが増加するため、信頼できるファイルのみに適用してください。 - ファイルを信頼できる場所に保存する
OneDriveなどの信頼できる場所にファイルを保存すると、セキュリティ警告が表示されにくくなることがあります。
意図しないセルが変更されてしまう場合
原因と対処法
セルの範囲指定が正しくなかったり、条件判定のロジックに誤りがあったりすると、意図しないセルが変更されてしまいます。
原因を特定するためには、以下の点を確認してください。
- 「Debug.Print」で値を確認する
VBAエディタで、コードの途中に「Debug.Print」文を挿入し、変数やセルの値を出力して確認します。例えば、「Debug.Print cell.Address, cell.Value」のように記述すると、対象セルとその値がイミディエイトウィンドウ(Ctrl+Gで表示)に出力されます。 - コードを一行ずつ実行する(ステップ実行)
VBAエディタでF8キーを押すと、コードを一行ずつ実行できます。これにより、どの段階で意図しない処理が発生しているかを特定しやすくなります。 - セルの範囲指定や条件式を再確認する
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)の活用方法を具体的なコード例とともに学びました。
これにより、手作業では時間のかかる書式設定を自動化し、業務効率を大幅に向上させることができます。
まずは簡単なコードから試してみて、ご自身の業務に合わせて応用してみてください。
ADVERTISEMENT
超解決 Excel・Word研究班
企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。
Office・仕事術の人気記事ランキング
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
- 【Outlook】メールの受信が数分遅れる!リアルタイムで届かない時の同期設定と送受信グループ設定
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Excel】矢印キーで「セルが動かず画面がスクロールする」!ScrollLockの解除方法(ノートPC対応)
- 【Outlook】「メール送信を5分遅らせる」設定!誤送信を防ぐ最強のディレイ機能
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Outlook】予定表の「祝日」が表示されない!最新カレンダーの追加と二重表示の修正手順
- 【Teams】会議の「参加者リスト」を出席後にダウンロードする!誰が参加したか確認する手順
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
