VB(VBA)で数字を漢数字に変換する

 訳あって、「12 → 十二」のように数字を漢数字に変換する必要があったので、VBAで実装してみた。
 ちなみにExcelだとセル関数に「NUMBERSTRING関数」というものがあるらしく、最初からそれを使えば楽だったかな、と思わなくもなく。

 でも作ってしまったので、せっかくなので備忘録的に残しておく。

<注>

  • 「2010」は「二千十」にしかならず「二〇一〇」のような表記には対応していない。(必要なかったので)
  • 9999兆9999億9999万9999まで対応

 

Private Function convNumberToKanji(strNumber As String) As String
Dim intStart    As Integer
Dim intKeta     As Integer
Dim i           As Integer
Dim rtn         As String

    intStart = Len(strNumber)
    
    For i = intStart To 1 Step -1
        intKeta = intStart - i + 1
        rtn = getKanjiNumber(Mid(strNumber, i, 1), intKeta) & getKetaOfKanji(intKeta) & rtn
    Next
    
    convNumberToKanji = rtn
End Function


'数字(一桁)を漢字に変換
'(ただし「1」については「一千」のようには書かない仕様なので、1の位以外は漢数字なし)
Private Function getKanjiNumber(strNumber As String, intKeta As Integer) As String
    Select Case strNumber
        Case "1"
            If intKeta = 1 Then
                getKanjiNumber = "一"
            End If
        Case "2": getKanjiNumber = "二"
        Case "3": getKanjiNumber = "三"
        Case "4": getKanjiNumber = "四"
        Case "5": getKanjiNumber = "五"
        Case "6": getKanjiNumber = "六"
        Case "7": getKanjiNumber = "七"
        Case "8": getKanjiNumber = "八"
        Case "9": getKanjiNumber = "九"
    End Select
End Function


'桁の漢字表記を返す
Private Function getKetaOfKanji(intKeta As Integer) As String
    Select Case intKeta
        Case 1:     getKetaOfKanji = ""
        Case 2, 6, 9, 13:  getKetaOfKanji = "十"
        Case 3, 7, 10, 14: getKetaOfKanji = "百"
        Case 4, 8, 11, 15: getKetaOfKanji = "千"
        Case 5:     getKetaOfKanji = "万"
        Case 9:     getKetaOfKanji = "億"
        Case 12:    getKetaOfKanji = "兆"
    End Select
End Function

 これで

Sub test()
    MsgBox convNumberToKanji(任意の数字)
End Sub

のように呼び出して使う。


 縦書き文化のお仕事だと、ちょこちょこ(年に1〜2回)必要になるのであった。