【Word VBA】Word文書中の蛍光ペンのテキストを抽出するWordマクロ(色指定版)

2011年11月23日

先日ご紹介した「Word文書中の蛍光ペンのテキストを抽出するマクロ 」へいただいたコメントから作成してみました。

蛍光ペンの色指定をする方法は、「Word 蛍光ペンの色を入れ替えるマクロ 」や、「特定の蛍光ペンを消すマクロ 」で紹介したとおりです。

今回は、Word 蛍光ペンの色を入れ替えるマクロ の方法を用いました。

マクロの解説

Wordの基本機能では、蛍光ペンの色を指定して検索したり置換したりすることができません。ただし、蛍光ペンの有無についての判定や蛍光ペン(色の指定なし)に基づいて検索や置換を行うことができます。

なので、こういうときはマクロの出番ですね。

マクロを用いて、以下のような操作をします。

(1)蛍光ペンの箇所を探す

(2)現在選択されている蛍光ペンの色を判定して、指定された色であれば、特定の処理を行う。それ以外の色であれば、別の蛍光ペンの箇所を探す

もっと詳しく

25行目~27行目の解説です。

ただ、やっかいなのは、蛍光ペンの色が複数連続して表示される場合(下図の「あいうえお」のような状態)には、蛍光ペンの色を特定できないので、undefined と判定されます。

蛍光ペン

この場合には、単独の色が選択された状態となるように、選択範囲末端のを徐々に狭めて単独の色だけが使われた状態で、色の判定をします。

たとえば、「あいうえお」が選択されている状態であれば、「あ」だけを選択されている状態にしてから色の判定をします。

そして、29行目~50行目で選択部分の色を判定して処理を実行します。

マクロ


Sub 蛍光ペンのテキスト抽出_色指定()

 Dim myRange As Range  'Rangeオブジェクト
 Dim myText As String  '抽出する文字列
 Dim newDoc As Document '新規で開いた文書

 '画面の更新をオフ
 Application.ScreenUpdating = False

 Set myRange = ActiveDocument.Range(0, 0)
 Set newDoc = Documents.Add

 With myRange.Find
  .Text = ""
  .Forward = True
  .Wrap = wdFindStop
  .Highlight = True
 End With

 '文書の最後の蛍光ペン後は、蛍光ペンが
 'なくても検索されたと判定されることがあるため回避する処理
 Do While myRange.Find.Execute = True And _
  myRange.Text <> ""

  Do While myRange.HighlightColorIndex = wdUndefined
   myRange.MoveEnd Unit:=wdCharacter, Count:=-1
  Loop

  If myRange.HighlightColorIndex = wdRed Then

   If InStr(myRange.Text, vbCr) Then
    If myRange.Text <> vbCr Then
     myRange.End = myRange.End - 1
     With newDoc.Range
      .InsertAfter myRange.Text
      .InsertParagraphAfter
      myRange.Collapse direction:=wdCollapseEnd
     End With
    Else
     '蛍光ペンが改行記号の場合は無視
    End If
   Else
    With newDoc.Range
     .InsertAfter myRange.Text
     .InsertParagraphAfter
     myRange.Collapse direction:=wdCollapseEnd
    End With
   End If

  End If
 Loop

 Set newDoc = Nothing
 Set myRange = Nothing

 '画面の更新をオン
 Application.ScreenUpdating = True

End Sub

コメント

  • 5. Re:Re:Re:Re:無題

    新田さん

    それは楽しみです!公開待っています。

    emon 返信する
  • 4. Re:Re:Re:無題

    emonさん、

    こんにちは。コメントをどうもありがとうございます。

    置換した語句のリストを作成することが目的なのですね。

    一括置換をもちいた翻訳(上書き翻訳)では、辞書作りに重宝しますよね。

    現在、置換をするたびに、辞書登録ができるマクロを作成しております。

    将来的にブログでも公開案内をさせていただく予定ですので、お楽しみに。

    (といいつつ、かれこれ、1年以上、マクロ勉強会後の懇親会でチラ見だけでなかなか公開にこぎつけないという状況ですが。。。)

  • 3. Re:Re:無題

    新田さん

    置換のためコピーした単語を別ファイルに抜き出すマクロ(自作です)と組み合わせて、訳語のリストアップに使えるかなと思っています。本当は、置換ダイアログの「検索する文字列」と「置換語の文字列」を一括して抽出できれば良いなと思ったのですが難しそうなので、この方法でやってみます。
    色をあまり多く使わないほうが、負荷がかからないということですよね。

    emon 返信する
  • 2. Re:無題

    emonさん、

    こんにちは。コメントをどうもありがとうございます。

    そうですね。抽出するキーワードを特定できるので、着色時にルールをさだめておけば、いろいろと使えそうですね。

    一括置換を使った翻訳との連携もできそうです。納品時のメモに記入する特定のキーワードを拾ってみたり。

    使い方のヒントもどうもありがとうございます。

    ただし、蛍光ペンの色の判定は、パソコンに負荷をかけますので、ご利用になるときにはご注意ください。

  • 1. 無題
    早速ありがとうございました。赤を黄色に換えて使ってみました。一括置換ではなく、個別に置換した文字列の抽出に使えそうです。
    emon

-コード
-, ,