VBAは初心者ですが、ちょっとしたマクロを組みましたので晒します。

やりたかったこと

[エクセル中の特定文字列を色付けして視認性をアップしたい]です。

「セル中の全ての文字列を同じ色にする」のではなく、「セル中の特定文字の色を任意に変更する」ようにしたく、この場合はVBAでの処理が必要です。

エクセルでのドキュメントを作っていて、あまりにも似たような文字が多く苦しいときにとても重宝しました。

できたマクロ

 1Sub highlightChars()
 2
 3  Selection.Font.colorIndex = 0
 4
 5  Dim selectRange As Range
 6  Set selectRange = Range(Selection, ActiveCell.SpecialCells(xlLastCell))
 7
 8  Call Highlight(selectRange, "技術書|必須項目", 9, 0)
 9  Call Highlight(selectRange, "<.*?>", 21, 0)
10  Call Highlight(selectRange, "\[.*?\]", 32, 0)
11  Call Highlight(selectRange, """.*?""", 31, 1)
12  Call Highlight(selectRange, "''.*?''", 3, 2)
13End Sub
14
15Sub Highlight(selectRange As Range, regPattern As String, newColorIndex As Integer, delimiterSize As Integer)
16    Dim re, mc, m, r As Range, endp As String
17
18  Set re = CreateObject("VBScript.RegExp")
19  re.Global = True
20  re.pattern = regPattern
21
22  Set r = selectRange.Find("*")
23  If r Is Nothing Then End
24  endp = r.Address
25
26  Do
27    Set mc = re.Execute(r)
28    For Each m In mc
29      r.Characters _
30        (m.FirstIndex + (delimiterSize + 1), m.Length - (delimiterSize * 2)).Font.colorIndex = newColorIndex
31    Next
32
33    Set r = selectRange.FindNext(r)
34  Loop Until r.Address = endp
35
36Set re = Nothing
37End Sub

カラーはcolorIndexによる指定としました。
雑な点は知識不足ということでご容赦ください。

ちょっと説明

  • 選択範囲の文字を全て黒に変更
  • 特定のキーワードを指定色に変更

という手順で処理しています。

キーワードは次のように指定します。

  • 1.直接指定
  • 2.指定デリミタで囲まれているもの

直接指定

任意文字列をハイライトします。

Highlightの第2引数に、次の形で単語を指定してください。

1つの単語の場合はこうです。

1"単語A"

複数単語の場合は| (パイプ)で語句を結合します。

1"単語B|単語C"

指定デリミタで囲まれているもの

HTMLタグや括弧、クォーテーションで囲まれた文字をハイライトします。

Highlightの第2引数に、パターンを入力してください。

フォーマットは次の通りです。

1"[開始記号][.*?][終了記号]"

.*?は、要するに「なんか文字列 かつ 最短マッチ」というものです。

この文字列はそのまま正規表現のパターンに当てるため、メタ文字はエスケープしてください。

1"\[.*?\]"
2""".*?"""

例えば、【 】 など、幅があって記号も含めて色付けすると目が痛くなるような場合は、第4引数にデリミタの文字列長を指定してください。
記号を除く、中身の文字列だけ色付けします。

ちょっとこのあたりの処理はかっこ悪いです。

おわりに

プログラムを勉強するずーっと前は、 エクセルでマクロを組めれば一人前のエンジニア というイメージがありました。
今回やってみて「周辺知識があればなんとかなるものだなあ」と思いました。

VBAって独特の世界ですね。

今回のマクロを組むにあたって、Office TANAKAさんで色々勉強致しました。
ありがとうございました。

Office TANAKA
http://officetanaka.net/