【Word VBA】「自動」以外の文字色の文字列を蛍光ペンで着色する

2016年12月16日

先日、お客様から、「自動」以外の色の文字を検索する方法があるのか質問を受けました。Wordの標準の機能ではできないのですが、マクロで実現してみました。任意の色の文字列にカーソルがジャンプします。これはかなり気持ちいいですね。

今回ご紹介するマクロは、お客様に納品したマクロの基本部分を一部紹介します。カーソルのジャンプを考えると少し複雑になりますし、そもそも納品した商品をここに掲載するわけにもいきませんし(笑)。

このマクロでできること

文書中の「自動」以外の色のフォントを「蛍光ペン黄色」で着色します。

(実行前)

文字色

(実行後)

文字色

マクロの解説

特定の色を探すわけではなく、Wordで使われているフォントの色が「自動」でないことを確認する必要があります。

1文字ずつ確認していたら時間がかかってしまいます。

処理を高速化するために、以前記事「【コード】上付きに見えるけど上付きではない文字を上付きに変換するWordマクロ(その2) 」で紹介した手法を使っています。

段落ごとに処理をしています。怪しい段落が見つかったら今度は「単語」単位で判定処理をしています。

場合分けは、理解しやすいようにSelect Case ステートメントで書きました。

マクロ


Sub 文書中の色つきフォントを蛍光ペンで着色する()

 Dim myChar As Range '文字
 Dim myWord As Range '単語
 Dim myPara As Paragraph '段落

 For Each myPara In ActiveDocument.Paragraphs

  Select Case myPara.Range.Font.ColorIndex

   Case wdAuto
    '■段落■「自動」色の場合
    '何もしない

   Case wdUndefined
    '■段落■複数色の場合
    '段落内の1単語ずつ色を判定

    For Each myWord In myPara.Range.Words

     Select Case myWord.Font.ColorIndex

      Case wdAuto
       '■単語■「自動」色の場合
       '何もしない

      Case wdUndefined
       '■単語■複数色の場合
       '単語内の1文字ずつ色を判定

       For Each myChar In myWord.Characters

        Select Case myChar.Font.ColorIndex

         Case wdAuto
          '■文字■「自動」色の場合
          '何もしない

         Case Else
          '■文字■「自動」以外の場合
          '蛍光ペンで着色
          myChar.HighlightColorIndex = wdYellow

        End Select

       Next

      Case Else
       '■単語■「自動」以外の単色の場合
       '蛍光ペンで着色
       myWord.HighlightColorIndex = wdYellow

     End Select

    Next

   Case Else
    '■段落■「自動」以外の単色の場合
    '蛍光ペンで着色
    myPara.Range.HighlightColorIndex = wdYellow

  End Select

 Next

End Sub

-コード
-, , ,