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

2016年12月16日

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

-コード
-, , ,

S