Findで蛍光ペンの色を判定して処理を分岐する

Wordの機能では、蛍光ペンが設定された箇所の検索はできますが、その色の区別を指定することができません。文字色やスタイル名は特定して検索できるのに、蛍光ペンではできません。しかし、方法はあるのです。

今回は、その蛍光ペンの色を見分けるマクロを紹介します。検索マクロについては、前回紹介したこちらのコードを流用します。
 

基本のVBAコード

Set rngFind = ActiveDocument.Range(0, 0)
rngFind.Find.ClearFormatting

With rngFind.Find
    .Forward = True
    .Wrap = wdFindStop
    .MatchCase = False
    .MatchByte = False
    .MatchWildcards = False
    .MatchFuzzy = False
    .Text = ""
    .Highlight = True '蛍光ペン
End With

Do While rngFind.Find.Execute = True
    ret = rngFind.HighlightColorIndex
    Select Case ret
    Case wdYellow
       '蛍光ペン【黄色】の場合の処理
    Case Else
        '蛍光ペン その他色 の場合の処理
    End Select
    '蛍光ペンを解除
    rngFind.HighlightColorIndex = wdNoHighlight
    rngFind.Collapse Direction:=wdCollapseEnd
Loop
.Highlight = True

検索条件に「蛍光ペン」を指定しています。

ret = rngFind.HighlightColorIndex

検出されたrngFindに設定されている蛍光ペン色(HighlightColorIndex)を特定します。

つまり、蛍光ペンの色を指定しての検索はできない / 蛍光ペンを検出した後でその色を判定することはできる、というからくりです。

Select Case ret ~ End Select

色に応じた処理をCase で分岐させています。

rngFind.HighlightColorIndex = wdNoHighlight

蛍光ペン「なし」にしています。処理完了後に蛍光ペンを残す必要がない場合に使います。

色が特定できない場合の対応

色の異なる蛍光ペンがつながっている箇所がある場合、それらはまとめて検出されるので注意してください。

冒頭の例では、「段落全体の色を変えたり」が rngFindに入り、retには色を特定できない9999999が返ります。この場合は少々やっかいで、色の確認と処理を1字ずつ行うことになります。

Do While rngFind.Find.Execute = True
    ret = rngFind.HighlightColorIndex
    '色が混在の場合 > 1字ずつ処理
    If ret = 9999999 Then
        For Each aChr In rngFind.Characters
            ret = aChr.HighlightColorIndex
            'retに応じてRangeを処理する関数
            Call RangeEdit(aChr, ret)
        Next aChr
    '色が特定できる場合
    Else
        'retに応じてRangeを処理する関数
        Call RangeEdit(rngFind, ret)
    End  If
    rngFind.Collapse Direction:=wdCollapseEnd
Loop

'  Function RangeEdit(myRange as Range, idx as Long)
'  という関数で各所の処理を行う
タイトルとURLをコピーしました