hex309’s diary

備忘録としてぼちぼちやります。VBAネタが多くなりそうです

基数変換(n進数を10進数に変換)

10進数をn進数に変換するコードを紹介したので、今回は逆です。

以前、10進数をn進数に変換するコードはコチラです。

hex309.hatenablog.com
hex309.hatenablog.com

というわけで、コチラ。

'n進数を10進数に変換
Private Sub ConvertIntoDecimalTest()
    'ConvertIntoDecimalプロシージャに指定する引数は「変換する値」「変換する値の基数」
    Debug.Print ConvertIntoDecimal("309", 16)
End Sub

Private Function ConvertIntoDecimal(ByVal ConvertValue As String, ByVal Radix As Long) As Long
    Dim NumOfDigits As Long
    Dim temp As String
    Dim Answer As Long
    Dim i As Long
    
    temp = StrReverse(ConvertValue)
    NumOfDigits = Len(ConvertValue)
    
    For i = 1 To NumOfDigits
        Answer = Answer + GetDecimalNumber(Mid$(temp, i, 1)) * Radix ^ (i - 1)
    Next
    ConvertIntoDecimal = Answer
End Function

Private Function GetDecimalNumber(ByVal Digit As String) As Long
    Dim temp As Variant
    temp = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F")
    GetDecimalNumber = Application.Match(Digit, temp, 0) - 1
End Function