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に設定をしていきましょう。
設定箇所は以下の通りです。
漢数字変換パターン(書式)を指定します。
書式パターンにしたい数字を指定してください。
拾、百、阡、萬⇒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関数の式は以下の通りです。
値に漢数字へ変換したい数字を、書式に下記変換パターンを指定します。
拾、百、阡、萬⇒2
一、二、三 ⇒3
Evaluateメソッドを利用し、Excelの関数として、NUMBERSTRING関数を呼び出します。
Excel関数の数分、機能の幅がぐっと広がりますね!
RegExpをオブジェクトにセットします。
全体の範囲から1行づつ文字列を読み込みます。
Range.Textで1行分読み取った文字列を変数に格納します。
検索条件を指定します。”([0-9]+)”は数字の塊の指定条件となります。
“VBScript.RegExp”を代わりにつかった形となります。
検索を実行し一致する限り処理を繰り返します。
変換後の文字列と変換前の文字列を置き換え変数へ格納します。※1行に複数条件に該当する文字列があれば順に置換していきます。
作業bufが変更されていたら、1行をまるまる交換します。
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」を参照設定するようにお願いします。
さいごに
いかがでしょうか。
今回は、
まとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
初めまして。論文の執筆に大変便利だと思い、こちらを参考にさせていただきました。
予備知識が全くなくコピー&ペーストで見様見真似で行いましたところ、
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