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

やりたかったこと

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

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

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

できたマクロ

Sub highlightChars()

  Selection.Font.colorIndex = 0

  Dim selectRange As Range
  Set selectRange = Range(Selection, ActiveCell.SpecialCells(xlLastCell))

  Call Highlight(selectRange, "技術書|必須項目", 9, 0)
  Call Highlight(selectRange, "<.*?>", 21, 0)
  Call Highlight(selectRange, "\[.*?\]", 32, 0)
  Call Highlight(selectRange, """.*?""", 31, 1)
  Call Highlight(selectRange, "''.*?''", 3, 2)
End Sub

Sub Highlight(selectRange As Range, regPattern As String, newColorIndex As Integer, delimiterSize As Integer)
    Dim re, mc, m, r As Range, endp As String

  Set re = CreateObject("VBScript.RegExp")
  re.Global = True
  re.pattern = regPattern

  Set r = selectRange.Find("*")
  If r Is Nothing Then End
  endp = r.Address

  Do
    Set mc = re.Execute(r)
    For Each m In mc
      r.Characters _
        (m.FirstIndex + (delimiterSize + 1), m.Length - (delimiterSize * 2)).Font.colorIndex = newColorIndex
    Next

    Set r = selectRange.FindNext(r)
  Loop Until r.Address = endp

Set re = Nothing
End Sub

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

ちょっと説明

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

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

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

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

直接指定

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

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

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

"単語A"

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

"単語B|単語C"

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

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

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

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

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

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

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

"\[.*?\]"
""".*?"""

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

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

おわりに

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

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

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

Office TANAKA
http://officetanaka.net/


スポンサーリンク
ad_336
ad_336
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存