先日、お客様から、「自動」以外の色の文字を検索する方法があるのか質問を受けました。Wordの標準の機能ではできないのですが、マクロで実現してみました。任意の色の文字列にカーソルがジャンプします。これはかなり気持ちいいですね。
今回ご紹介するマクロは、お客様に納品したマクロの基本部分を一部紹介します。カーソルのジャンプを考えると少し複雑になりますし、そもそも納品した商品をここに掲載するわけにもいきませんし(笑)。
<目次>
このマクロでできること
文書中の「自動」以外の色のフォントを「蛍光ペン黄色」で着色します。
(実行前)
(実行後)
マクロの解説
特定の色を探すわけではなく、Wordで使われているフォントの色が「自動」でないことを確認する必要があります。
1文字ずつ確認していたら時間がかかってしまいます。
処理を高速化するために、以前記事「【コード】上付きに見えるけど上付きではない文字を上付きに変換するWordマクロ(その2) 」で紹介した手法を使っています。
段落ごとに処理をしています。怪しい段落が見つかったら今度は「単語」単位で判定処理をしています。
場合分けは、理解しやすいようにSelect Case ステートメントで書きました。
マクロ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 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 |