セルの文章の一部の色や太さを変えるには

シートの中で特定の文字列の色や太さを変更して強調表示したいことがあります。

これをExcelで実現するには、対象のセルを選んで、その中の特定の文字列を範囲選択して、フォントなどの設定を行う、という流れになります。

この方法はとても面倒です。1セルずつしか設定できませんし、特定の文字列を選択するのはかなり手間が掛かります。

そういう面倒を解消する以下のマクロは選択セル範囲の指定文字列の色や太さを変更するための汎用関数です。私自身、資料作成時にとても活用しています。

また、固定文字列ではなく、正規表現を利用する方法については「正規表現で一致するセルの文字に色を付ける」で紹介しています。例えば、CSVファイルのようにダブルクォーテーションに囲まれている文字列を全て抽出したい場合には「”(.*?)”」と正規表現で指定するとその部分が対象になります。

「”aaaa”,”1234″,”5″,98765,0,”end”」

“aaaa”,“1234”,“5”,98765,0,“end”

選択セル範囲の各セルの指定文字列の色と太さを変更する

以下の関数は選択セル範囲の各セルに対して、指定した文字列の色と太さを変更します。

この関数は単独では動作せず、呼び出し元の関数を用意して利用します。

第一引数は変更したい文字列を指定します。第二引数にはRGB関数値での文字色を指定します。第三引数には文字の太さをTrue(太字)かFalse(標準)で指定します。

 

コード説明

2行目 セルの文字列に引数文字列部分があった場合、その部分のFontオブジェクトを指定するための変数です。
3行目 InStr関数の第一引数に使います。セルの文字列の中で引数文字列がどの位置にあるのかを示すための変数です。
4行目 引数文字列の文字数です。関数が呼び出されてからは1度しか取得する必要がないため7行目で取得してあとは使い回しをしています。
5行目 選択セル範囲の中にある各セルを格納する変数です。
7行目 引数文字列の文字数を取得します。以降の処理で引数文字列の文字数は変更されないためここで取得しています。
8行目 InStr関数用の第一引数の最小は1のため、1に初期化しています。
11行目 選択セル範囲であるSelectionを1セルずつすべてループ処理します。
13行目 セルの文字列の中にある引数文字列を全て検索するためのループ処理です。
15行目 InStr関数を使ってセル文字列から引数文字列を検索します。
18行目 InStr関数で0が返却された場合は引数文字列が検索できなかったことを指します。
20行目 次のセルの処理のInStr関数の1回目用に検索開始位置を最小の1に初期化します。
23行目 このセルの文字列からは全ての引数文字列の検索が終了したため、次のセルの処理を行うためにループ処理を終わります。
27行目 検索で見つかった引数文字列の部分のFontオブジェクトを取得します。
30行目 引数文字列部分の文字色を引数の文字色で設定します。
31行目 引数文字列部分の文字の太さを引数の太さで設定します。
34行目 次のInStr関数の検索位置をずらすために検索開始位置を1増やしています。

 

使用例

セル、文字列、範囲、という文字列をそれぞれ色と太さを設定します。

1. 設定したい部分を範囲選択します。空白セルを選択していても構いません。

2. 使用例の関数を実行します。

3. 実行後です。1行目や8行目や11行目のように同じセルに違う指定文字列が複数あっても正しく設定されます。