タイトル通りです。
ホントはWordの置換機能と仲良くできたらこんなのを作る必要はなかったと思うんですが、いまいち仲良くなれそうな気配もなければ、例外処理等の自由度がどうなっているのかも分からなかったので、いっその事自分でマクロを組みました。
マクロのいいところは簡単な英語が分かればなんとかなりそうと思えるところです。それくらいシンプルなことしかできないともいう。
'感嘆符と疑問符の後ろに全角スペースを挿入(!?は一文字にする)
Sub findAndInsertSpace()
With Selection.Find
'?か!を見つける
.Text = "[?!]"
.MatchFuzzy = False
.MatchWildcards = True
Do While .Execute
'見つけたら一旦ストップ(鬱陶しかったら、STOPという文字を消してください。自動で連続で処理してくれます。)
Stop
'見つけた文字の次の文字が?か!だったら、文字を置き換えて、なおかつ次の文字を消す(その後の処理のため、選択を一文字分戻す
If Selection.Words.Last.Next = "?" Or Selection.Words.Last.Next = "!" Then
'これはしっぽり明朝だと!?という一文字になりますが、別の文字コードに書き換えても大丈夫です
'変えたい場合は、&Hの後ろの「2049」を変えたい文字コードに書き換えてください。
Selection.Text = ChrW(&H2049)
Selection.Words.Last.Next.Select
Selection.Delete
Selection.Words.First.Previous.Select
End If
'次の文字が全角スペースではなく、」』)でもなく、改行でもない場合には全角スペースを挿入する
'除外したいものがあれば、「Selection.Words.Last.Next <> "" And _」をコピペしてif とthenの間に入れてください。 _
""の中に除外処理したい文字を加えると、その単語が感嘆符・疑問符の次にあった場合は処理をしないという事ができます。
If AscW(Selection.Words.Last.Next) <> 12288 And _
Selection.Words.Last.Next <> "」" And _
Selection.Words.Last.Next <> "』" And _
Selection.Words.Last.Next <> ")" And _
AscW(Selection.Words.Last.Next) <> 13 Then
Selection.Words.Last.InsertAfter " "
End If
Loop
End With
End Sub
文字コードがわからない場合は、Wordの「挿入」タブ→「記号と特殊文字」グループ、その他のグループで選択していけば見られるはずです。
