VBAサンプル集
漢数字→数値変換:漢数字=NUMBERSTRING(数値,1)

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2025-09-22 最終更新日:2025-09-22

漢数字→数値変換:漢数字=NUMBERSTRING(数値,1)


シートの隠し関数で、「NUMBERSTRING関数」があります。
数値を漢数字の文字列に変換する関数です。


この関数で変換した漢数字をもとに戻すVBAになります。

X(Twitter)で出されたお題はシートの数式でしたが、参考としてVBAを作成しました。
https://x.com/yamaoka_ss/status/1969726575567614179


NUMBERSTRING関数

=NUMBERSTRING(数値, 形式)

数値
漢数字に変換したい数値、またはその数値が入力されているセルを指定します。
形式
漢数字の表記方法を指定します。
1: 十、百、千などの位取り表示をします。
2: 漢数字を「大字」で表示します(例:「壱拾弐参」)。
3: 「一、二、三」のように、位取りの文字なしでそのまま表記します。

使用例
A1セルに「123456」という数値を入力します。
=NUMBERSTRING(A1,1)  → 「十二万三千四百五十六」
=NUMBERSTRING(A1,2)  → 「壱拾弐萬参阡四百伍拾六百」
=NUMBERSTRING(A1,3)  → 「一二三四五六」

マクロ VBA サンプル画像

注意点
NUMBERSTRING関数はExcelの候補には表示されない関数です。
したがって、関数名を全て直接入力する必要があります。


漢数字→数値変換のVBA

'**********************************************************
' 関数名: KanjiToNumber
' 機能: 漢数字の文字列を数値(LongLong型)に変換する
' 引数: kanjiText As String - 変換対象の漢数字文字列
' 戻り値: LongLong - 変換された数値
' 例: "千二百三十四" → 1234
'**********************************************************
Function KanjiToNumber(kanjiText As String) As LongLong
  ' 空文字チェック - 空文字の場合は0を返す
  If Len(kanjiText) = 0 Then Exit Function
  
  ' 基本数字(一?九)のDictionary作成
  Dim digitDict As Object
  Set digitDict = createDict("一 二 三 四 五 六 七 八 九", "1 2 3 4 5 6 7 8 9")
  
  ' 小単位(十、百、千)のDictionary作成
  Dim sUnitDict As Object
  Set sUnitDict = createDict("十 百 千", "10 100 1000")
  
  ' 大単位(万、億、兆)のDictionary作成
  Dim lUnitDict As Object
  Set lUnitDict = createDict("万 億 兆", "10000 100000000 1000000000000")
  
  ' 変数の初期化
  Dim result As LongLong   ' 最終結果(大単位での累計)
  Dim currentNum As LongLong ' 現在の数値(万未満の値)
  Dim tempNum As LongLong   ' 一時的な数値(基本数字を格納)
  Dim i As Long, char As String
  result = 0: currentNum = 0: tempNum = 0
  
  ' 漢数字を1文字ずつ処理
  For i = 1 To Len(kanjiText)
    char = Mid(kanjiText, i, 1)
    
    Select Case True
      Case digitDict.Exists(char) ' 基本数字(一?九)の処理
        tempNum = digitDict(char)
        
      Case sUnitDict.Exists(char) ' 小単位(十、百、千)の処理
        If tempNum = 0 Then tempNum = 1 ' "十"だけ等の場合は1を補完
        ' 現在の数値に小単位を掛けた値を加算
        currentNum = currentNum + tempNum * CLngLng(sUnitDict(char))
        tempNum = 0 ' 一時的な数値をリセット
        
      Case lUnitDict.Exists(char) ' 大単位(万、億、兆)の処理
        ' "万"だけの場合など、前に数字がない場合は1を補完
        If currentNum = 0 And tempNum = 0 Then
          currentNum = 1
        Else
          ' 一時的な数値を現在の数値に加算
          currentNum = currentNum + tempNum
        End If
        ' 結果に大単位を掛けた値を加算
        result = result + currentNum * CLngLng(lUnitDict(char))
        ' 変数をリセット
        tempNum = 0
        currentNum = 0
    End Select
  Next i
  
  ' 最終結果の計算(残りの数値を全て加算)
  KanjiToNumber = result + currentNum + tempNum
End Function

'**********************************************************
' 関数名: createDict
' 機能: 2つの文字列からDictionaryオブジェクトを作成する
' 引数: aKanji As String - キーとなる文字列(スペース区切り)
'    aNum As String - 値となる文字列(スペース区切り)
' 戻り値: Object - 作成されたDictionaryオブジェクト
' 例: createDict("一 二 三", "1 2 3") → {"一":1, "二":2, "三":3}
'**********************************************************
Function createDict(ByVal aKanji As String, ByVal aNum As String) As Object
  Dim i As Long
  ' 文字列をスペースで分割して配列に格納
  Dim aryKanji: aryKanji = Split(aKanji)
  Dim aryNum: aryNum = Split(aNum)
  
  ' Dictionaryオブジェクトを作成
  Set createDict = CreateObject("Scripting.Dictionary")
  
  ' 配列の要素をDictionaryに登録
  For i = LBound(aryKanji) To UBound(aryKanji)
    createDict.Add aryKanji(i), aryNum(i)
  Next
End Function




同じテーマ「マクロVBAサンプル集」の記事

ボタンに表示されているテキストを取得(Application.Caller)
Excelの表をPowerPointへ図として貼り付け
VBAで表やグラフをPowerPointへ貼り付ける
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除
Shift_JISのテキストファイルをUTF-8に一括変換
VBAコードの全プロシージャー・プロパティ一覧を取得
数式バーの高さを数式の行数で自動設定
図形オートシェイプ(Shape)の複数選択
GoogleスプレッドシートをExcelにインポートする
多階層フォルダ(ディレクトリ)の作成
漢数字→数値変換:漢数字=NUMBERSTRING(数値,1)


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ