【Word VBA】桁区切りと小数点をヨーロッパ仕様に変更するWordマクロ

2017年12月22日

先日のJTF翻訳セミナーで桁区切りと小数点の変更方法について質問を受けました。

ご存知の方もいらっしゃると思いますが、日本で使われている桁区切り文字(,)と小数点(.)は海外で必ずしも同じではないのです。

この変更をWordで実行する方法の質問でした。

たとえば、ドイツではコンマとピリオドの使い方が、日本での使い方とちょうど逆になるようです。

ややこしいですね。

桁区切り文字として半角スペースを使う国もあるようです。困りました。

Wordで実行するのは難しそうなので、Wordマクロで作ってみました。

このマクロでできること

桁区切りのコンマをピリオドに変更し、小数点のピリオドをコンマに変更します。

対象箇所を1つ1つ目視確認をして、変更するのかどうかを選ぶようにしました。

また、変更箇所を蛍光ペンで着色しました。長い文書で処理をする場合には、後で確認するときに役立つと思います。

実行前

都度、確認メッセージが表示されます。

処理をする場合には「はい」を選び、処理をせずに次の数字を探す場合には「いいえ」を選びます。

処理を終了する場合には「キャンセル」を選びます。

実行後

マクロの解説

対象箇所を見つけて確認しながら処理をするという方法を以下のマクロから流用しました。

【コード】桁区切りのコンマを入れる(その2)

検索対象にしたのは、「コンマやピリオドを含む3桁の半角数字」です。以下のワイルドカードの検索式を使いました(14行目)。

[0-9]{1,}[,.][0-9,.]{1,}

このため、123のようにコンマもピリオドも含まない数字は検索対象外となります。

ただし、上記の検索では、桁区切りではない数字(たとえば、例にあるようなRGBの値やIPアドレスなど)も検索してしまいますし、1,2,3,4,5のように半角スペースで区切らずに列挙された数字も検索されます。

よって、目視で該当する箇所なのかを確認してください。

なお、6行目と7行目の文字列を以下のように変更すれば、桁区切りを半角スペースで小数点をコンマにするような場合に対応できます。

Const mySeparator As String = " " '桁区切り
Const myDecimalPoint = "," '小数点

マクロ


Sub 桁区切り文字と小数点の変更()

 Dim myRange As Range
 Dim myText As String
 Dim myAnswer As String
 Const mySeparator As String = "." '桁区切り
 Const myDecimalPoint = "," '小数点
 
 '現在カーソル位置にRangeオブジェクトを設定
 Set myRange = Selection.Range
 
 'コンマやピリオドを含む3桁の半角数字を検索
 With myRange.Find
  .Text = "[0-9]{1,}[,.][0-9,.]{1,}"
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchFuzzy = False
  .MatchWildcards = True
  
  '数字が見つかったときの処理
  Do While .Execute = True
   
   '処理対象を選択
   myRange.Select
   
   '処理の実行を確認
   myAnswer = MsgBox("桁区切り文字と小数点を変更しますか?", _
         vbYesNoCancel Or vbQuestion, _
         "桁区切り文字と小数点の変更マクロ")
   
   Select Case myAnswer
    
    Case vbYes
     With myRange
      myText = .Text
      myText = Replace(myText, ",", "|")
      myText = Replace(myText, ".", myDecimalPoint)
      myText = Replace(myText, "|", mySeparator)
      .Text = myText
      '処理をした箇所を蛍光ペンで着色
      .HighlightColorIndex = wdBrightGreen
      .Collapse wdCollapseEnd
     End With
     
    Case vbNo
     myRange.Collapse wdCollapseEnd
     
    Case vbCancel
     Exit Do
   
   End Select
  Loop
 End With
 
 'Rangeオブジェクトの解放
 Set myRange = Nothing
 
End Sub

関連記事

【コード】桁区切りのコンマを入れる

【コード】桁区切りのコンマを入れる(その2)

-コード
-, ,