導入
業務で作成するExcel資料、後から「この赤字の部分、全部別の色に変えておいて」と指示を受けたことはありませんか?数箇所なら手作業でも済みますが、ブック全体に及ぶ場合、手作業では見落としや修正漏れが発生するリスクがあります。今回ご紹介するVBAテクニックを使えば、ブック内の特定の文字色を一瞬で別色に置換できます。正確かつ効率的に書式を整えるための必須スキルです。
基礎知識
VBAで文字色を制御するには、RangeオブジェクトのFont.ColorIndexプロパティ、またはFont.Colorプロパティを使用します。
ColorIndexはExcelにあらかじめ登録された56色のカラーパレット(1~56のインデックス番号)で色を指定する方法です。一方、ColorはRGB関数などを使ってより細かい色指定が可能です。今回はシンプルに特定の条件(例:赤色を紫に変更)を判定して処理を行うため、ColorIndexプロパティを活用します。
実装/解決策
処理の基本的な考え方は「ループ処理」です。
1. ブック内のすべてのシートを巡回する。
2. 各シートの使用範囲(UsedRange)を巡回する。
3. セルのフォントの色を判定し、条件に一致すれば色を書き換える。
この論理を組み合わせることで、ブック全体の文字色を網羅的に変換できます。
サンプルプログラム
以下のコードは、ブック内にある「赤色(ColorIndex: 3)」の文字を、すべて「紫色(ColorIndex: 7)」に変換するマクロです。
Sub ChangeFontColor()
Dim myCell As Range
Dim mySht As Worksheet
‘ ブック内のすべてのシートを順番に処理
For Each mySht In Worksheets
‘ シートの使用範囲(データが入っている範囲)を順番に処理
For Each myCell In mySht.UsedRange
‘ セルのフォント設定を操作
With myCell.Font
‘ もし文字色が赤(3)ならば
If .ColorIndex = 3 Then
‘ 紫(7)に変更する
.ColorIndex = 7
End If
End With
Next
Next
MsgBox “文字色の変換が完了しました。”
End Sub
応用・注意点
1. 処理速度の向上:セル範囲が非常に広い場合、ループ処理は時間がかかることがあります。その際は、画面描画を停止する「Application.ScreenUpdating = False」を冒頭に入れ、最後にTrueに戻すことで処理速度を劇的に向上させることが可能です。
2. 条件付き書式の注意:上記のコードは「セルに直接設定された文字色」を対象としています。「条件付き書式」で設定された文字色は、この方法では変更できません。条件付き書式の色を変更したい場合は、FormatConditionsプロパティを操作する必要があります。
3. 元に戻せない:マクロでの操作は「元に戻す(Ctrl+Z)」ことができません。重要なファイルで実行する際は、必ず事前にバックアップを取る癖をつけておきましょう。
