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

編集・校正

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

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

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

全角数字と半角数字の使い分け

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

  1. すべて半角
  2. 1桁は全角,2桁以上は半角
  3. すべて全角

一般的には,2が使われることが多いのではないでしょうか(たぶん)。

文書内で統一を図ろうとすると,1と3は比較的やりやすいと思えます。何も考えずに,数字のすべてを半角/全角に一括置換すれば良いだけですから,難しくありません。

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

Wordの置換機能を使う

とはいえ2に関しても,実はWordの基本機能で行うことができます(少し面倒ですが)。

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

詳細な手順は下記を参照してください:

マクロで手軽に行う

Wordの機能でできるとはいえ,面倒です。面倒なことはマクロにさせてしまいましょう,ということでコードは下記のようになります:

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をコピーしました