OCRソフト(読取り革命やAcrobat など)から生成されたWordファイル、テキストファイルには、不要な改行記号が含まれる場合があります。
数ページの書類であれば不要な改行記号の除去はそれほど時間がかかりませんが、数百ページにおよぶ書類の場合には大変です。
このような場合に使うことを想定して、「改行記号を検索するマクロ」と「改行記号を削除して次の改行記号を検索するマクロ」を紹介します。
なお、いずれのマクロも以下のWordアドイン(無料)に入っています。
新田のマクロ(その弐)
もっときれい!
(OCRによる書類のゴミ情報を除去するソフト)
▼このマクロでできること
2つのマクロがあります。
[1] 改行記号を検索します。
[2] 改行記号を削除して次の改行記号を検索します。
改行記号が選択されている場合に実行すると、選択されている改行記号を削除して次の改行記号にカーソルが移動します。
改行記号を削除する場合、改行記号の前後に半角の英数字があるときには2つの単語がくっついてしまわないように半角スペースを挿入(赤矢印部分)します。
それぞれをショートカットキーに登録して使うと便利だと思います。
【動画】Wordマクロをショートカットキーで実行する
▼マクロの解説
[1] 改行記号を検索
検索の開始時にカーソルが文書の末尾にある場合には、文書の先頭から検索を開始するように処理します。何かの不具合があったので処理を追加したと思うのですが、かなり前に作成したマクロなので理由は忘れてしまいました。すみません。
赤文字になっているとおり、ワイルドカードで改行記号(=段落記号)を検索します。
OCRから生成されたWordファイルには見かけが改行記号である偽の改行記号が含まれることがよくあります。そのような記号を検索するために、ワイルドカードを使っています。通常の検索時の特殊文字の^p ではこの種の改行記号を検索できません。
以下の参考記事では、このような偽の改行記号(=おかしな段落記号)を通常の改行記号に一括で置換する方法を紹介しました。
参考記事 【Word】ネットからのコピペで混ざる「おかしな段落記号」の削除
[2] 改行記号を削除して次の改行記号を検索
青文字部分で、現在選択されている文字列が改行記号であるかどうかを判定しています。
[1] のマクロの解説の通り、選択されている改行記号が「通常の改行記号」の場合と「おかしな改行記号」の場合の2種類あります。その判定を青文字で対応しています。
改行記号の前後が半角英数字であるかどうかについては、Like演算子を使って判定しています。
選択範囲の前後の文字を特定するにはPreviousメソッドやNextメソッドを使います。
引数を省略すると、前後の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
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マクロをショートカットキーで実行する