【Word VBA】不要な改行記号を探して削除する

2016年5月10日

OCRソフト(読取り革命やAcrobat など)から生成されたWordファイル、テキストファイルには、不要な改行記号が含まれる場合があります。

数ページの書類であれば不要な改行記号の除去はそれほど時間がかかりませんが、数百ページにおよぶ書類の場合には大変です。

このような場合に使うことを想定して、「改行記号を検索するマクロ」と「改行記号を削除して次の改行記号を検索するマクロ」を紹介します。

なお、いずれのマクロも以下のWordアドイン(無料)に入っています。

新田のマクロ(その弐)

もっときれい! (OCRによる書類のゴミ情報を除去するソフト)

このマクロでできること

2つのマクロがあります。

[1] 改行記号を検索します。

16-05-101

[2] 改行記号を削除して次の改行記号を検索します。

改行記号が選択されている場合に実行すると、選択されている改行記号を削除して次の改行記号にカーソルが移動します。

改行記号を削除する場合、改行記号の前後に半角の英数字があるときには2つの単語がくっついてしまわないように半角スペースを挿入(赤矢印部分)します。

16-05-102

それぞれをショートカットキーに登録して使うと便利だと思います。

【動画】Wordマクロをショートカットキーで実行する

マクロの解説

[1] 改行記号を検索

検索の開始時にカーソルが文書の末尾にある場合には、文書の先頭から検索を開始するように処理します。何かの不具合があったので処理を追加したと思うのですが、かなり前に作成したマクロなので理由は忘れてしまいました。すみません。

22行目と33行目のとおり、ワイルドカードで改行記号(=段落記号)を検索します。

OCRから生成されたWordファイルには見かけが改行記号である偽の改行記号が含まれることがよくあります。そのような記号を検索するために、ワイルドカードを使っています。通常の検索時の特殊文字の^p ではこの種の改行記号を検索できません。

以下の参考記事では、このような偽の改行記号(=おかしな段落記号)を通常の改行記号に一括で置換する方法を紹介しました。

参考記事 【Word】ネットからのコピペで混ざる「おかしな段落記号」の削除

[2] 改行記号を削除して次の改行記号を検索

17行~19行において、現在選択されている文字列が改行記号であるかどうかを判定しています。

[1] のマクロの解説の通り、選択されている改行記号が「通常の改行記号」の場合と「おかしな改行記号」の場合の2種類あります。その判定を青文字で対応しています。

改行記号の前後が半角英数字であるかどうかについては、Like演算子を使って判定しています。

選択範囲の前後の文字を特定するにはPreviousメソッドNextメソッドを使います。

引数を省略すると、前後の1文字を特定できます。用途によっては引数を指定し、1つ前の単語や1つ前の段落も特定できます。

マクロ

[1] 改行記号を検索用のマクロ

Sub 改行記号を検索する()

 'カーソルが文書の末尾の場合に、先頭に移動する
 If Selection.Type = wdSelectionIP Then
  With ActiveDocument
   If Selection.End = .Range.End - 1 Then
    .Range(0, 0).Select
   End If
  End With
 Else
  With ActiveDocument
   If Selection.End = .Range.End And _
    Selection.Start = .Range.End - 1 Then
    .Range(0, 0).Select
   End If
  End With
 End If

 '検索実行
 Selection.Find.ClearFormatting
 With Selection.Find
  .Text = "^13"        '検索する文字列
  .Replacement.Text = ""   '置換後の文字列(16-05-12追加)
  .Forward = True       '検索方向
  .Wrap = wdFindContinue   '検索対象のオブジェクトの末尾での操作
  .Format = False       '書式
  .MatchCase = False     '大文字と小文字の区別する
  .MatchWholeWord = False   '完全に一致する単語だけを検索する
  .MatchByte = False     '半角と全角を区別する
  .MatchAllWordForms = False '英単語の異なる活用形を検索する
  .MatchSoundsLike = False  'あいまい検索(英)
  .MatchFuzzy = False     'あいまい検索(日)
  .MatchWildcards = True   'ワイルドカードを使用する
 End With
 Selection.Find.Execute

End Sub
[2] 改行記号を削除して次の改行記号を検索用のマクロ

Sub 改行記号を削除して次の改行記号を検索する()

 If Selection.Type = wdSelectionIP Then
  MsgBox "改行記号を選択してください。", vbExclamation, "お知らせ"
  Exit Sub
 End If

 '文書の末尾の場合にはカーソルを先頭に移動
 If Selection.End = ActiveDocument.Range.End Then
  ActiveDocument.Range(0, 0).Select
  Call 改行記号を検索する
  Exit Sub
 End If
 
 '改行記号が選択されている場合にのみ実行
 With Selection
  If .Text = Chr(13) Or _
    .Text = vbCr Or _
    Asc(.Text) = 13 Then
 
   '改行記号の前後が半角英数字である場合、
   '改行記号を削除後に半角スペースを挿入する処理
   If .Start = ActiveDocument.Range.Start Then
    If .Next.Text Like "[a-zA-Z0-9]" Then
     .Delete
     .TypeText Text:=" "
    Else
     .Delete
    End If
   Else
    If .Previous.Text Like "[a-zA-Z0-9]" And _
      .Next.Text Like "[a-zA-Z0-9]" Then
     .Delete
     .TypeText Text:=" "
    Else
     .Delete
    End If
   End If
 
   '改行記号を削除後に次の改行記号を検索
   Call 改行記号を検索する
 
  Else
   MsgBox "改行記号を選択してください。", vbExclamation, "お知らせ"
  End If
 
 End With
 
End Sub

関連記事

【Word】ネットからのコピペで混ざる「おかしな段落記号」の削除

【動画】Wordマクロをショートカットキーで実行する

新田のマクロ(その弐)

もっときれい! (OCRによる書類のゴミ情報を除去するソフト)

-コード
-, ,