文字列の一部分に色を付けるには
セルの文字列の一部分に色を付けるには、色を付けたい部分をドラッグして右クリック→文字色の設定を行います。
この一部分を選択するというマウス操作はなかなか微調整が必要で、結構時間が掛かる作業です。これが複数のセルになってくると大変な作業になります。
こういう面倒なことはVBAでラクをしましょう。
以下では指定したセル範囲に対して、色付けしたい文字列と付けたい色を指定することで、セルの文字列の一部分に色を付けるマクロを紹介します。
なお、文字列を正規表現を使って色を付けたい場合は「正規表現で一致するセルの文字に色を付ける」をご参照ください。
指定文字列に色を付けるマクロ
以下がセル範囲の指定文字列に対して任意の色を付けるマクロです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
'// 引数1:セル範囲 '// 引数2:着色する文字列 '// 引数3:設定する文字色 Sub SetPartColor(rTarget As Range, sChanged, lSetColor) Dim iLen '// 引数の文字列の長さ Dim r As Range '// 処理対象セル Dim iPosition '// 文字列検索で見つかった位置 '// 文字列長取得 iLen = Len(sChanged) '// セル範囲を1セルずつループ For Each r In rTarget '// 検索結果位置を初期化 iPosition = 0 '// セルの文字列から着色する文字列を全て検索 Do '// 着色する文字列の検索 iPosition = InStr(iPosition + 1, r.Value, sChanged) '// 着色する文字列がない場合 If (iPosition = 0) Then '// このセルの文字列着色処理を終了する Exit Do End If '// 着色する文字列部分に着色 r.Characters(start:=iPosition, Length:=iLen).Font.Color = lSetColor Loop Next End Sub |
このマクロの概要は、引数1で渡されたセル範囲のセル1つずつに対して、指定文字列があればその部分に指定色を付けるという処理を行っています。
10行目でセル範囲をループし、セルを1つずつ処理しています。
Do~Loopでは着色する文字列の開始位置を17行目のInstr関数で検出し、26行目でメインである着色する処理を行っています。
このRangeオブジェクトのCharactersプロパティに対して、色を付けたい部分の開始位置とそこから何文字なのかを指定することで対象位置を指定できます。あとはFontオブジェクトのColorプロパティで指定色に設定します。
使い方
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub SetPartColorTest() '// 98を青色に Call SetPartColor(Range("C2:D6"), "198", vbBlue) '// 198を青色に Call SetPartColor(Range("C2:D6"), "198", vbBlue) '// 桃をピンクに Call SetPartColor(Range("A1:D6"), "桃", RGB(255, 100, 100)) '// !をオレンジに Call SetPartColor(Range("A1:D6"), "!", RGB(255, 192, 0)) End Sub |
SetPartColor関数にセル範囲、色を付けたい文字列の部分、付けたい色、の3つを渡します。ここでは4回SetPartColor関数を呼び出して色付けを行っています。
実行結果は以下になります。
実行前
実行後
3行目では数値セルの98に対して青色を設定しようとしていますが、実際には色は付きません。
しかし6行目のようにセルの入力値全体である198に色を付けようとした場合は着色されます。
これは注意点として後述します。
注意点
文字列の一部に色を付けたい場合、そのセルの種類が文字列でない数値や数式などの場合は文字列の一部を着色することは出来ません。これはExcelの仕様です。
そのような場合は入力値全てに対して色を付けるか付けないか、という二択になります。