先日、お客様から、「自動」以外の色の文字を検索する方法があるのか質問を受けました。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