【Word VBA】1桁の数字を全角に,2桁以上の数字を半角にするマクロ

みなさん,こんにちは。
シンノユウキ(shinno1993)です。

テキストの編集・校正の際に役立つだろうツールを紹介していきます。

今回は,数字の表記統一(1桁数字→全角,2桁以上数字→半角)を行うWordのマクロを紹介します

はじめに:全角数字と半角数字の使い分け

数字の表記には主に下記3つのパターンがあります:

すべて半角
② 1桁は全角,2桁以上は半角
③ すべて全角

一般的には,「1桁は全角,2桁以上は半角」が使われることが多いのではないでしょうか。

文書内で統一を図ろうとすると,①と③は比較的やりやすいと思えます。

しかし,②は厄介です。1桁の数字と2桁の数字とで目標(半角/全角)が異なるため,置換対象の文字列が1桁か2桁を判定し,置換する必要があるからです。

方法1:Wordの置換機能を使う

とはいえ②に関しても,実はWordの基本機能で行うことができます。

機能としては,Wordのワイルドカードを使った検索機能と,文字種の変換機能を使います。すべての数字を全角に変換し,その後2桁以上の数字を半角に変換していきます。

詳細な手順はこちらの記事を参照してください。

方法2:マクロで手軽に行う

方法1は,Wordの機能でできるとはいえ,面倒です。同様のことは,Word VBA(マクロ)を使用することで行うことができます。コードは下記のようになります:

Sub main()
    Call 半角数字を全角へ一括変換
    Call 二桁以上の全角数字を半角へ一括変換
End Sub

Sub 半角数字を全角へ一括変換()
    Dim rng As Range: Set rng = ActiveDocument.Range(0, 0)
    With rng.Find
        .text = "[0-9]"
        .MatchWildcards = True
        .MatchFuzzy = False
        Do While .Execute
            rng.CharacterWidth = wdWidthFullWidth
            rng.Collapse wdCollapseEnd 
        Loop
    End With
    Set rng = Nothing
End Sub

Sub 二桁以上の全角数字を半角へ一括変換()
    Dim rng As Range: Set rng = ActiveDocument.Range(0, 0)
    With rng.Find
        .text = "[0-9]{2,}"
        .MatchWildcards = True
        .MatchFuzzy = False
        Do While .Execute
            rng.CharacterWidth = wdWidthHalfWidth
            rng.Collapse wdCollapseEnd
        Loop
    End With
    Set rng = Nothing
End Sub

手順は,Wordの基本機能でやるのと同様です。① 数字をすべて全角に変換 → ②2桁以上の数字を半角に変換です。

ポイントはrng.Collapse wdCollapseEndです。その上のrng.CharacterWidth = wdWidthHalfWidthで文字が選択されてしまうので,これを入れておかないと次の検索が実行されず,処理が止まってしまうのです。

まとめ

今回は,1桁の数字を全角に,2桁以上の数字を半角にするWordマクロを紹介しました。

参考になれば!

タイトルとURLをコピーしました