【Word VBA】ワードで数字を漢数字に変換する方法

Wordで数字を漢数字に変換したいときはないでしょうか。

例えば住所の番地や法律などの項番などが該当するかと思います。

けど、そんな中で悩むことは、

・Wordで数字を漢数字に変換したいが方法がわからない
・Word VBAで数字を漢数字に変換したいが複雑でどう組めばよいかわからない

ですよね。

今回はそんなお悩みを解決する

ワードで数字を漢数字に変換する方法

についてまとめます!

Wordで数字を漢数字に変換するイメージ

Wordで数字を漢数字に変換するイメージについて説明をします。

適当な半角数字を含む文書を作成します。

Wordの通常機能では数字を漢数字に変換する機能はありませんので、VBAで機能を追加します。

ワンクリックで半角数字部分がすべて漢数字に変換されます。

さらに漢数字の変換パターンも1設定でカンタンに変えることができます。

■拾、百、阡、萬

■一、二、三

それでは早速使ってみましょう!

Wordでサンプルの文書を用意する

半角数字を含む文書を作成し、開きっぱなしにしておきましょう。

Wordで数字を漢数字に変換するVBA

Wordで数字を漢数字に変換するVBAを準備します。

サンプルコードは以下の通りです。

Sub 数字を漢数字に変換する()

  Dim strChangeWord As String
  Dim strBuf As String
  Dim objWord As Range
  Dim objParagraph As Paragraph
  
  '漢数字変換パターン(書式)を指定します。
  '十、百、千、万⇒1
  '拾、百、阡、萬⇒2
  '一、二、三 ⇒3
  Const intshoshikiNum = 1

'RegExpをオブジェクトにセットします。
Set objRegExp = CreateObject("VBScript.RegExp")

'全体の範囲から1行づつ文字列を読み込みます。
For Each objParagraph In ActiveDocument.Range.Paragraphs

    'Range.Textで1行分読み取った文字列を変数に格納します。
    strBuf = objParagraph.Range.Text
    
    '検索条件を指定します。"([0-9]+)"は数字の塊の指定条件となります。
    objRegExp.Pattern = "([0-9]+)"

    '検索を実行し一致する限り処理を繰り返します。
    For Each objMatchWord In objRegExp.Execute(strBuf)
        
        '検索結果の値を漢数字へ変換し、変数へ代入します。
        strChangeWord = Evaluate("NUMBERSTRING(" & objMatchWord.Value & "," & intshoshikiNum & ")")

        '変換後の文字列と変換前の文字列を置き換え変数へ格納します。※1行に複数条件に該当する文字列があれば順に置換していきます。
        strBuf = objRegExp.Replace(strBuf, strChangeWord)
    
    Next
   
    '作業bufが変更されていたら、1行をまるまる交換します。
    If strBuf <> objParagraph.Range.Text Then
        objParagraph.Range.Text = strBuf
    End If

  Next
  
  MsgBox "数字を漢数字に変換しました!"
  
  Set objParagraph = Nothing
  Set objMatchWord = Nothing
  Set objRegExp = Nothing
End Sub

VBAの設定をする

Wordで数字を漢数字に変換するVBAに設定をしていきましょう。

設定箇所は以下の通りです。

漢数字変換パターン(書式)を指定します。

Const intshoshikiNum = 1

書式パターンにしたい数字を指定してください。

十、百、千、万⇒1
拾、百、阡、萬⇒2
一、二、三 ⇒3

参照設定を追加する

今回はExce lの関数「NUMBERSTRING」を使って漢数字変換をしていますので、VBE(Visual Basic Editor)を開き、「ツール」>「参照設定」から
「Microsoft Excel **.* Object Library」にチェックを入れOKをクリックして実装してください。

VBAを実装し実行する

VBAを実装し実行してみましょう。

実装方法は「VBAを実装する」をご覧ください。

実装できたらマクロから「数字を漢数字に変換する」を見つけ実行します。

数字を漢数字に変換しました!」が表示されたら、
処理結果を確認しましょう。

はい、数字の箇所が漢数字に変わっていますね!

漢数字変換パターンを変更する

サンプルでは1番指定の「十、百、千、万」の変換パターンでしたが、2番の「拾、百、阡、萬」3番の「一、二、三」に変換してみましょう。

はい、こちらも問題なく変換できましたね!

■拾、百、阡、萬

■一、二、三

VBAの説明

Wordで数字を漢数字に変換するVBAについて説明をします。

今回はExce lの関数「NUMBERSTRING」を使って漢数字変換をしています。NUMBERSTRING関数とは、数値を漢数字の文字列に変換する関数です。
NUMBERSTRING関数の式は以下の通りです。

NUMBERSTRING(値, 変換パターン)

値に漢数字へ変換したい数字を、書式に下記変換パターンを指定します。

十、百、千、万⇒1
拾、百、阡、萬⇒2
一、二、三 ⇒3

Evaluateメソッドを利用し、Excelの関数として、NUMBERSTRING関数を呼び出します。

strChangeWord = Evaluate(“NUMBERSTRING(” & objMatchWord.Value & “,” & intshoshikiNum & “)”)

タカヒロ
タカヒロ
WordからExcelの関数を呼び出す方法はなかなかレアですが、
Excel関数の数分、機能の幅がぐっと広がりますね!

RegExpをオブジェクトにセットします。

Set objRegExp = CreateObject(“VBScript.RegExp”)

全体の範囲から1行づつ文字列を読み込みます。

For Each objParagraph In ActiveDocument.Range.Paragraphs

Range.Textで1行分読み取った文字列を変数に格納します。

strBuf = objParagraph.Range.Text

検索条件を指定します。”([0-9]+)”は数字の塊の指定条件となります。

objRegExp.Pattern = “([0-9]+)”

タカヒロ
タカヒロ
Wordでワイルドカードを使うと正規表現風の指定ですと、この数字の塊の指定はできなかったため、
“VBScript.RegExp”を代わりにつかった形となります。

検索を実行し一致する限り処理を繰り返します。

For Each objMatchWord In objRegExp.Execute(strBuf)

変換後の文字列と変換前の文字列を置き換え変数へ格納します。※1行に複数条件に該当する文字列があれば順に置換していきます。

strBuf = objRegExp.Replace(strBuf, strChangeWord)

作業bufが変更されていたら、1行をまるまる交換します。

If strBuf <> objParagraph.Range.Text Then
objParagraph.Range.Text = strBuf
End If

VBAを実装する

実装手順は以下の通りです。

①Wordを新規に開き、「開発」タブをクリックし、

VisualBasic」をクリックします。

もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインの「Nomal」を右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

④「ツール」>「参照設定」から
「Microsoft Excel **.* Object Library」にチェックを入れOKをクリックして実装します。

こちらで完了です。

VBAを実行する

早速VBAの実行をしてみましょう。

①「開発」タブの「マクロ」をクリックし今回実装したマクロ明を選択し、「実行」をクリックします。

VBA エラー 35「Sub または Function が定義されていません。」が表示された場合の対処方法

VBA エラー 35「Sub または Function が定義されていません。」が表示された場合は「参照設定を追加する」の項目を参考に、
Wordへ「Microsoft Excel **.* Object Library」を参照設定するようにお願いします。

タカヒロ
タカヒロ
エラーの詳細はこちらの記事にまとめていますので、こちらもよろしければご参考ください。

VBA エラー 35「Sub または Function が定義されていません。」の原因と対処方法

さいごに

いかがでしょうか。

今回は、

ワードで数字を漢数字に変換する方法

まとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








2 件のコメント

  • 初めまして。論文の執筆に大変便利だと思い、こちらを参考にさせていただきました。
    予備知識が全くなくコピー&ペーストで見様見真似で行いましたところ、

    Sub 数字を漢数字に変換する() に黄色いラインマーカーが表示され、
    「Subまたはfunctionが定義されていません」と表示されてしまいます。

    ご多用のところお手数ですが、御指南いただけますと幸いです。

    • いつもご利用ありがとうございます。

      エラー「Subまたはfunctionが定義されていません」の件ですが、
      変換処理にExcel関数を使用していまして、デフォルトですとWord側でExcelのライブラリがないため、
      そのまま実行をすると関数が読み込めない状態となることが原因となります。

      対応といたしましては
      VBE(Visual Basic Editor)を開き、「ツール」>「参照設定」から
      「Microsoft Excel **.* Object Library」にチェックを入れるようお願いします。
      こちらに記載がございますのでご参考ください。
      https://extan.jp/?p=5603#%E5%8F%82%E7%85%A7%E8%A8%AD%E5%AE%9A%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です