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回)必要になるのであった。