【Word VBA】蛍光ペンの色を判定するWordマクロ

2011年5月28日

前回の「特定の色の蛍光ペンを検索することはできるのか? 」は、蛍光ペンを探すマクロを、マクロの記録機能で作ってみました。

昨日作ったマクロ


Sub HightLight_Search()

  '蛍光ペンを探す

  With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Highlight = True
    .Text = ""
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = False
  End With
  Selection.Find.Execute
End Sub

今回は、もう少し進んで、選択した蛍光ペンの色の判定をしてみたいと思います。

前回の説明の通り、上記のマクロでは、蛍光ペンの色に関わらず、蛍光ペンがつけられた文字列すべてを探すことができます。

今回紹介するマクロは、上記で選んだ蛍光ペンが何色であるのかを判定してみたいと思います。

今回のマクロでできること

①蛍光ペンを探す
②蛍光ペンの色が赤色、黄色、明るい緑、青、混合、その他のいずれかを判定する

色については、判定のパラメーターを増やせばいいので、その気になれば最大18種類でも登録できます。
よって、判定結果の「その他」というのは、パラメーターに入れていない色すべてのことです。

では、混合とは何のことでしょうか?

結論からいうと、以下のような状態のことを意味しています。

昨日紹介した蛍光ペンを条件にした検索では、蛍光ペンの色を区別しないため、以下のような蛍光ペンが連続してつけられた部分を一つの蛍光ペンの固まりとして選択してしまいます。

蛍光ペン

蛍光ペン

上記のような場合には、選択された部分の蛍光ペンの総称(上であれば、明るい緑と黄色)はWordには存在していません(無限の可能性があるからです)。

なので、このブログ記事では、単独の蛍光ペンの部分ではないという意味で、「混合」と呼ぶことにしました。

これは、次回以降の記事で重要になってきます。

マクロ解説

マクロの前半部分は、前回の記事で紹介したものと同じです。蛍光ペンを探します。

25行目で、選択された範囲の蛍光ペンの HighlightColorIndex プロパティ を取得しています。

その後、Select Caseステートメントを利用して、このプロパティの値を調べます。

赤文字の部分で、選択された蛍光ペンが混合かどうかを調べています。

複数の色を含む場合(34行目)には、このプロパティの値が、9999999と判定されますので(Word VBAの仕様)、この場合には、「混合です。」とメッセージを表示するようにします。

ここで、Caseに様々な色を設定すれば、個別に判定が可能です。

HighlightColorIndex プロパティVBE のヘルプをご確認ください。

マクロ


Sub 蛍光ペンの色を判定する()

  Dim myMessage As String 'メッセージの内容
  
  With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Highlight = True
    .Text = ""
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = False
  End With
  Selection.Find.Execute
  
  If Selection.Find.Found = True Then
    Select Case Selection.Range.HighlightColorIndex
      Case wdYellow
        myMessage = "黄色です。"
      Case wdBlue
        myMessage = "青色です。"
      Case wdRed
        myMessage = "赤色です。"
      Case wdBrightGreen
        myMessage = "明るい緑です。"
      Case 9999999
        myMessage = "混合です。"
      Case Else
        myMessage = "ほかの色です。"
    End Select
  Else
    myMessage = "蛍光ペンが見つかりません。"
  End If
  MsgBox prompt:=myMessage, Title:="蛍光ペンの判定"

End Sub

-コード
-,