Excelでセルに文が入っていて、その中の単語を目立たせたい場合。
条件付き書式だとセル内の全ての色が変わってしまう。
条件付き書式を使わずに、「単語だけ」に色をつける方法を模索。
色々なサイトを行ったり来たり。
皆様、今回も本当にお世話になりました。
特定の単語だけに色をつける(文字の大きさなども変更可能)
マクロ(VBA)を使えば一気に変えることができます。
また、特定の単語が複数あっても大丈夫です。
同じセルに単語が二つあっても、それぞれ色が付きますよ!
例えばこんな表の特定の単語に色を付けたい。
A | B | |
---|---|---|
1 | おやつ | 夜ご飯 |
2 | りんご、バナナ | 冷やし中華、コーラ |
3 | みかんとヨーグルト | 牛丼、ウーロン茶 |
4 | バナナ | 親子丼とほうじ茶 |
5 | りんご | 牛丼 |
私の設定
「リスト」と名前をつけたシートを用意
「リスト」シートの内容
- A1からC5に目立たせたいキーワードを入力(空欄があっても大丈夫)
- 文字はマクロ実行後に付けたい色にしておく
- 文字サイズも設定
A | B | C | |
---|---|---|---|
1 | りんご | 冷やし中華 | コーラ |
2 | みかん | 親子丼 | 緑茶 |
3 | イチゴ | 牛丼 | 麦茶 |
4 | スイカ | ウーロン茶 | |
5 | ほうじ茶 |
VBA
Sub Macro1() For Each 指定キーワード In Worksheets("リスト").Range("A1:C5") 'リストシートのA1からC5の範囲内のすべてのキーワードで実行 If 指定キーワード <> "" Then '空文字でない場合だけ実行 色 = 指定キーワード.Font.ColorIndex '色を読み込む 文字サイズ = 指定キーワード.Font.Size '文字サイズを読み込む 検索文字長 = Len(指定キーワード) 'キーワード長を調べる For Each セル In Range("A2:B5") '色を変更したい範囲を設定 検索開始位置 = 1 '「検索開始位置」変数を初期化 Do '検索文字を発見した位置を繰り返し調べる 発見位置 = InStr(検索開始位置, セル.Text, 指定キーワード) If 発見位置 = 0 Then Exit Do '発見できなかったらループから脱出 With セル '発見できたセルで文字の色とサイズを設定 .Characters(発見位置, 検索文字長).Font.ColorIndex = 色 '同じ色にする .Characters(発見位置, 検索文字長).Font.Size = 文字サイズ '同じ文字サイズにする .Characters(発見位置, 検索文字長).Font.Bold = True '太字にする .Characters(発見位置, 検索文字長).Font.Italic = True '斜体にする End With 検索開始位置 = 発見位置 + 検索文字長 '「検索開始位置」を設定 Loop Next End If Next End Sub
※シート名や範囲は各自変更してください。
※「For Each セル In Range("A2:B5") '色を変更したい範囲を設定」
が単語に色を付けたい範囲です。
※目立たせるためのキーワードを同じシート内に設定する場合は、
「For Each 指定キーワード In Worksheets("リスト").Range("A1:C5") 'リストシートのA1からC5の範囲内のすべてのキーワードで実行」
からシート名を指定する部分「Worksheets("リスト").」を省く。
↓
「For Each 指定キーワード In Range("A1:C5") 'A1からC5の範囲内のすべてのキーワードで実行」
もちろんセルの場所も好きな場所に変更して大丈夫です。
※色、文字サイズ、太字、斜体は必要なければ削除してください。
例)斜体は必要なし
「.Characters(発見位置, 検索文字長).Font.Italic = True '斜体にする」
を省く。
マクロ実行後
A | B | |
---|---|---|
1 | おやつ | 夜ご飯 |
2 | りんご、バナナ | 冷やし中華、コーラ |
3 | みかんとヨーグルト | 牛丼、ウーロン茶 |
4 | バナナ | 親子丼とほうじ茶 |
5 | りんご | 牛丼 |
セルの背景色も設定したい方はこちら
Excel VBA セルごとではなく、特定の単語にだけ色をつける!続編