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 ・・・新着記事一覧を見る

最長連続出現数(ランレングス)の算出|エクセル練習問題(2025-11-15)
SQL基礎問題11:連続期間の開始月と終了月を抽出|SQL入門(2025-11-14)
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)


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

1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門




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


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



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