今回の案件で利用する場面があったので、使ってみました。
使おうと思ったら、今回私が使いたい場面では使えないことがわかりました。
マクロは動きます。でも、実務向けじゃくて、そのままでは仕事で使えないことがあるという意味です。
当時はあまり状況がわからずにとりあえずマクロにしてみました、という感じですね。
自分の実務で使っていなかったので、状況をしっかり想像しきれていませんでした。
そもそも、一括置換にしてしまったらまずいこともありますね。
特許文献であれば、4桁以上の参照符号にコンマを入れたらまずいし、商品の型番などもコンマは不要ですし。
日本語の文章でも英語の文章でもそうですが、様々な半角数字が入っています。
3桁ごとにコンマを入れるマクロ では、段落番号と年号を除外するようになっていますが、それ以外にも除外する場面が出てきます。
というわけで、1回1回確認しながらコンマを入れるマクロに変えてみました。
▼このマクロでできること
カーソルが置かれているストーリー(本文、テキストボックスなど)内の半角数字を探して、3桁毎にコンマを挿入します。
ストーリーの先頭に数字が記載されている場合には、コンマを挿入できません。
ワイルドカードで半角数字を探しているのですが、その都合でこうなりました。
なお、小数、年号、特許の段落番号の場合には4桁以上であっても当然コンマが入りませんので、判定できる範囲で検索対象から除外しています。
カーソル位置から上方向に検索を開始します。
以下の例では、本文の末尾にカーソルをおいて実行したものです。
![みんなのワードマクロ](https://stat.ameba.jp/user_images/20121109/11/gidgeerock/19/6f/p/t02200128_0531030812277394146.png?caw=800)
▼マクロの解説
半角数字は、ワイルドカードで探しています。
年号、段落番号、小数ではないと思われる数字をワイルドカードで設定しています。
青文字部分の記載により、探したものをどう置換すればいいのか、ご覧ください。
▼マクロ
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桁ごとにコンマを入れるマクロ