【Wordマクロ】3桁ごとにコンマを入れる | みんなのワードマクロ

みんなのワードマクロ

ワードマクロで、文書作成とオフィス事務を効率化!!

以前、「3桁ごとにコンマを入れるマクロ 」というマクロをご紹介しました。

今回の案件で利用する場面があったので、使ってみました。


使おうと思ったら、今回私が使いたい場面では使えないことがわかりました。


マクロは動きます。でも、実務向けじゃくて、そのままでは仕事で使えないことがあるという意味です。



当時はあまり状況がわからずにとりあえずマクロにしてみました、という感じですね。

自分の実務で使っていなかったので、状況をしっかり想像しきれていませんでした。


そもそも、一括置換にしてしまったらまずいこともありますね。


特許文献であれば、4桁以上の参照符号にコンマを入れたらまずいし、商品の型番などもコンマは不要ですし。


日本語の文章でも英語の文章でもそうですが、様々な半角数字が入っています。

3桁ごとにコンマを入れるマクロ では、段落番号と年号を除外するようになっていますが、それ以外にも除外する場面が出てきます。



というわけで、1回1回確認しながらコンマを入れるマクロに変えてみました。



▼このマクロでできること

カーソルが置かれているストーリー(本文、テキストボックスなど)内の半角数字を探して、3桁毎にコンマを挿入します。

ストーリーの先頭に数字が記載されている場合には、コンマを挿入できません。

ワイルドカードで半角数字を探しているのですが、その都合でこうなりました。


なお、小数、年号、特許の段落番号の場合には4桁以上であっても当然コンマが入りませんので、判定できる範囲で検索対象から除外しています。

カーソル位置から上方向に検索を開始します。


以下の例では、本文の末尾にカーソルをおいて実行したものです。



みんなのワードマクロ




▼マクロの解説

半角数字は、ワイルドカードで探しています。

年号、段落番号、小数ではないと思われる数字をワイルドカードで設定しています。

青文字部分の記載により、探したものをどう置換すればいいのか、ご覧ください。



▼マクロ

Sub 半角数字にコンマ挿入2()

  Dim myRange As Range
  Dim myLen As Integer
  Dim myAnswer As String

  '現在カーソル位置にRangeオブジェクトを設定
  Set myRange = Selection.Range
  
  'ワイルドカードで4桁以上の数字を検索
  '文書の末尾から先頭に向けて検索します
  With myRange.Find
    .text = "([!.\[])([0-9]{1,})([0-9]{3})([!年\]])"
    .Replacement.text = "\1\2,\3\4"

    .Forward = False
    .Wrap = wdFindContinue
    .MatchWildcards = True
  End With

  '4桁以上の数字が見つかったときの処理
  With myRange
   Do While .Find.Execute = True
    myRange.Select
    myAnswer = MsgBox("コンマを挿入しますか?", _
          vbYesNoCancel Or vbQuestion, _
          "3桁毎にコンマを挿入するマクロ")
    Select Case myAnswer
     Case vbYes
      myLen = Len(myRange)
      .Find.Execute Replace:=wdReplaceOne
      .SetRange .End + myLen, .End + myLen
     Case vbNo
      '何もしない
     Case vbCancel
      Exit Sub
    End Select
   Loop
  End With
  
  'Rangeオブジェクトの解放
  Set myRange = Nothing
  
End Sub




▼関連記事

3桁ごとにコンマを入れるマクロ