【Word VBA】カーソル位置の数字にコンマを挿入するWordマクロ(その1)

2015年3月6日

私は請求書を作成する場合、Excelで管理している業務リストからWordの請求書ファイルに数字を入力しています。

差し込み印刷の機能を使わず、Wordマクロをわざわざ組んで同じようなことをしています(笑)。

そのときに、いつも面倒だと思うことがありました。

金額の数字にコンマが入らないのです。

Excel上ではセルの書式で金額の数字にコンマを表示させています。

つまり、金額の数字データ自身にはコンマが入っていないのです。そのため、金額の数字データをWordにインポートすると、コンマなしの数字が表示されるのです。

請求書には、請求書番号や会社の住所など様々な数字が入っております。ですから、請求書に記載されたすべての4桁以上の数字に対して処理を行ってはいけないわけですね。

そこで、対象箇所(=金額の数字)を自分で特定し、その部分だけを処理するマクロを作りました。

この手のマクロもショートカットキーに登録をしておくと便利だと思います。

右手でマウスを操作して数字を特定し、左手のショートカットキーで変換する、という流れが作れますからね。

このマクロを作った後に別の簡単な方法があると気づいたので、その2に続きます。

このマクロでできること

数字の一部にカーソルを置いた状態で実行します。

すると、カーソル部分の数字にコンマが入ります。

(注:|がカーソル位置を示します。処理後、カーソル位置が数字の先頭に移動します。)

(実行前)
1234567|89

(実行後)
|123,456,789

文字書式がある場合もまあまあ反映できます。

(実行前)

桁区切り

(実行後)

桁区切り

(実行前)

桁区切り

(実行後)

桁区切り

マクロの解説

11行目でカーソル位置の数字を選択しています。単語単位で拡大しました。Rangeオブジェクトで範囲を拡大しているので見た目には何も起こりません。

3桁毎にコンマを入れる方法は、「【Wordマクロ】3桁ごとにコンマを入れる 」を参考にしました。

このコンマを入れる処理を、最初に指定した数字にだけ適用するように、InRange メソッドを用いて判定しています。

この判定で使うために、数字の範囲をmyInRangeに代入しています。(29行目)

マクロ


Sub 数字3桁毎にコンマ()

 Dim myRange As Range
 Dim myInRange As Range
 Dim myLen As Integer

 Set myRange = Selection.Range

 'カーソル位置の数字を選択
 myRange.Expand Unit:=wdWord

 Set myInRange = myRange.Duplicate

 myRange.Collapse wdCollapseEnd

 'ワイルドカードで4桁以上の数字を検索
 '末尾から先頭に向けて検索します
 With myRange.Find
   .Text = "([0-9]{1,})([0-9]{3})"
   .Replacement.Text = "\1,\2"
   .Forward = False
   .Wrap = wdFindStop
   .MatchWildcards = True
 End With

 '数字が見つかったときの処理
 With myRange
   Do While .Find.Execute = True
    If myRange.InRange(myInRange) = True Then
     myLen = Len(.Text)
     .Find.Execute Replace:=wdReplaceOne
     .SetRange .End + myLen, .End + myLen
    Else
     Exit Do
    End If
   Loop
 End With

 'Rangeオブジェクトの解放
 Set myRange = Nothing
 Set myInRange = Nothing

End Sub

 

-コード
-, ,