前回の記事「【コード】全角のコンマとピリオドを句読点に変換するWordマクロ」をブラッシュアップしました。
実は、前回の記事のコードは、大阪から帰宅途中の新幹線の中で酔っ払った状態で作ったものでした。今ひとつ詰めが甘かったのです。
気になる点があったのですが、ひとまず公開しておこうと思って翌朝投稿しました。
しかし、やっぱり気持ち悪かったので今回の記事で書き直しました。
なお、今回の記事もまだ完璧ではないのですが、こういうものは使いながらブラッシュアップしていくものなのでしょうね。
ご利用になって何かおかしと気づいた方は、ぜひ記事にコメントください。
<目次>
このマクロでできること
文中のコンマとピリオドを読点と読点にそれぞれ変換します。
(処理前)
(処理後)
前回の記事で気になっていた箇所を修正しました。
マクロの解説
56行目~86行目を追加しました。
以下の3文字のパターンを見つけて、この場合のコンマとピリオドを読点と句点にそれぞれ変更するようにしました。
数字+コンマ+数字以外 数字+ピリオド+数字以外
ワイルドカードで書くと、以下の通りです。
"[0-9],[!0-9]" "[0-9].[!0-9]"
マクロ
Sub 全角コンマとピリオドを句読点に変換2() Dim myRange As Range Dim i As Integer Dim myFind(2) As String Dim myReplace(2) As String Dim myColor As String Dim myDoc As Document '------------------------------------------- '設定 '------------------------------------------- myFind(1) = "," myReplace(1) = "、" myFind(2) = "." myReplace(2) = "。" '現在の蛍光ペンの色を保存 myColor = Options.DefaultHighlightColorIndex Options.DefaultHighlightColorIndex = wdBrightGreen Set myDoc = ActiveDocument '------------------------------------------- 'コンマとピリオドを句読点に変換(1) '------------------------------------------- For i = 1 To 2 Set myRange = myDoc.Range(0, 0) With myRange.Find .Text = "[!0-9]" & myFind(i) '検索する文字列 .Forward = True .Wrap = wdFindStop .Format = False '書式:オフ .MatchCase = False '大文字と小文字の区別する:オフ .MatchWholeWord = False '完全に一致する単語だけを検索する:オフ .MatchByte = False '半角と全角を区別する:オフ .MatchAllWordForms = False '英単語の異なる活用形を検索する:オフ .MatchSoundsLike = False 'あいまい検索(英):オフ .MatchFuzzy = False 'あいまい検索(日):オフ .MatchWildcards = True 'ワイルドカードを使用する:オン Do While .Execute With myRange .SetRange .Start + 1, .End .Text = myReplace(i) .HighlightColorIndex = wdYellow .Collapse wdCollapseStart End With DoEvents Loop End With Next i '------------------------------------------- 'コンマとピリオドを句読点に変換(2) '------------------------------------------- For i = 1 To 2 Set myRange = myDoc.Range(0, 0) With myRange.Find .Text = "[0-9]" & myFind(i) & "[!0-9]" '検索する文字列 .Forward = True .Wrap = wdFindStop .Format = False '書式:オフ .MatchCase = False '大文字と小文字の区別する:オフ .MatchWholeWord = False '完全に一致する単語だけを検索する:オフ .MatchByte = False '半角と全角を区別する:オフ .MatchAllWordForms = False '英単語の異なる活用形を検索する:オフ .MatchSoundsLike = False 'あいまい検索(英):オフ .MatchFuzzy = False 'あいまい検索(日):オフ .MatchWildcards = True 'ワイルドカードを使用する:オン Do While .Execute With myRange .SetRange .Start + 1, .End - 1 .Text = myReplace(i) .HighlightColorIndex = wdYellow .Collapse wdCollapseStart End With DoEvents Loop End With Next i '------------------------------------------- '残りの全角コンマとピリオドを着色 '------------------------------------------- Set myRange = myDoc.Range(0, 0) With myRange.Find .Text = "[,.]" '検索する文字列 .Replacement.Text = "" .Replacement.Highlight = True .Forward = True .Wrap = wdFindStop .Format = True '書式:オン .MatchCase = False '大文字と小文字の区別する:オフ .MatchWholeWord = False '完全に一致する単語だけを検索する:オフ .MatchByte = False '半角と全角を区別する:オフ .MatchAllWordForms = False '英単語の異なる活用形を検索する:オフ .MatchSoundsLike = False 'あいまい検索(英):オフ .MatchFuzzy = False 'あいまい検索(日):オフ .MatchWildcards = True 'ワイルドカードを使用する:オン .Execute Replace:=wdReplaceAll DoEvents End With '------------------------------------------- '後処理 '------------------------------------------- '蛍光ペンの色を元に戻す Options.DefaultHighlightColorIndex = myColor Set myDoc = Nothing Set myRange = Nothing End Sub