【Word VBA】全角のコンマとピリオドを句読点に変換するWordマクロ(その2)

2016年12月13日

前回の記事「【コード】全角のコンマとピリオドを句読点に変換する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

-コード
-, , ,