2016/12/13 追記 改良版を以下の記事で紹介しています。 【コード】全角のコンマとピリオドを句読点に変換するWordマクロ(その2)
昨日、大阪大学の先輩の集まりに呼んでいただいて、WordやWordマクロについてお話をさせていただきました。
阪大環境工学科の先輩と言うことで、みんな理系でパソコンを当たり前に使っているしWordもしっかり使っていらっしゃいまして。Excel方眼紙の方は一人もいらっしゃいませんでした(笑)。
で、このミニ講義ででてきたのが、今回のマクロです。大学の先生がいらっしゃいまして、その方が論文チェックをしているときに句読点の表記がばらばらで困るとのことでした。
要は、全角のピリオドやコンマが句読点と混在しているとのことです。この統一に時間がかかるとのことで、かなり面倒な作業なのだそうです。
句読点に統一する場合には、桁区切りのコンマもあるし小数点のピリオドもあるので、単純に一括置換するわけにはいかないですね。
さっそく作ってみました。処理条件がまだ甘いかもしれませんが、残ってしまったコンマとピリオドを着色することで処理の漏れを確認できる仕組みにしてみました。
<目次>
このマクロでできること
文中のコンマとピリオドを読点と読点にそれぞれ変換します。
このとき、数字の直後のコンマとピリオドは変換処理から除外するというルールにしてみました。
一括処理をするので、処理した箇所を蛍光ペンで着色します。
黄色:句読点に書き換えた箇所
明るい緑色:残ったコンマとピリオド
(処理前)
(処理後)
赤矢印のように、句点であるべき部分にピリオドが残っています。場合分けを丁寧にやっていないので、このようなこともありますのでご注意を。
マクロの解説
一括置換で置換後の文字列に蛍光ペンで着色する場合、現在設定されている蛍光ペンの色が用いられます。
今回のように一括置換で「明るい緑色」を指定する場合には以下のプロパティを設定します。
Options.DefaultHighlightColorIndex
19行目のように、置換処理の前に、現在セットされている色をmyColor という変数に保存します。そして、20行目のように、「明るい緑色」を設定します。
そして処理が終わってから、83行目のように保存しておいた色を設定し直します。
マクロ
Sub 全角コンマとピリオドを句読点に変換() 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 '------------------------------------------- 'コンマとピリオドを句読点に変換 '------------------------------------------- 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 '------------------------------------------- '残りの全角コンマとピリオドを着色 '------------------------------------------- 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