20進数対応の基数変換マクロが出来ちゃった。

 意外とあっさり出来ちゃった。正に『案ずるより産むが易し』ですね。
コマッタモンダ。(やろうかやるまいか)悩んでいた時間が馬鹿みたいじゃぁないか・・・。

Function 基数変換改(input_data As Variant, origin As Integer, base As Integer)
'input_data:変換対象数値, origin:変換対象が何進数か, base:変換したい基数
  Dim i As Integer
  Dim ix As Integer '配列の番号
 
  Dim input_num As Integer 'input_dataを10進数に変換した値
  Dim buf As Variant '変換用一時バッファ
  Dim residue As Integer 'residue:余りの英語表記らしい
  Dim ans() '基数変換の答え(一時バッファとしても使用)
  Dim output As String
 
  imax = Len(input_data)
  For i = imax To 1 Step -1
    buf = Mid(input_data, i, 1)
    input_num = 数値変換(buf) * origin ^ (imax - i) + input_num
  Next i
 
  'input_numには10進数に変換した数値が格納されている
  ix = 0
  Do While input_num >= base
    ReDim Preserve ans(ix)
    residue = input_num Mod base
    ans(ix) = 数値逆変換(residue)
    input_num = (input_num - residue) / base
    ix = ix + 1
  Loop
 
  ReDim Preserve ans(ix)
  residue = input_num Mod base
  ans(ix) = 数値逆変換(residue)
 
  imax = ix
  '文字の書き出し
  output = ""
  For i = 0 To imax
    output = ans(i) & output
  Next i
 
  基数変換改 = output
 
End Function
 
Private Function 数値変換(buf As Variant)
  '20進数まで変換可能
  Dim data As Integer
 
  data = Val(buf)
 
  If data = 0 And i <> "0" Then
    buf = StrConv(buf, 1)
    Select Case buf
      Case "A"
        data = 10
      Case "B"
        data = 11
      Case "C"
        data = 12
      Case "D"
        data = 13
      Case "E"
        data = 14
      Case "F"
        data = 15
      Case "G"
        data = 16
      Case "H"
        data = 17
      Case "I"
        data = 18
      Case "J"
        data = 19
      Case Else
        data = 0
    End Select
  End If
 
  数値変換 = data
 
End Function

Private Function 数値逆変換(input_num As Integer)
  Dim data As Variant
 
  Select Case input_num
    Case 10
      data = "A"
    Case 11
      data = "B"
    Case 12
      data = "C"
    Case 13
      data = "D"
    Case 14
      data = "E"
    Case 15
      data = "F"
    Case 16
      data = "G"
    Case 17
      data = "H"
    Case 18
      data = "I"
    Case 19
      data = "J"
    Case Else
      data = input_num
  End Select
  数値逆変換 = data
End Function