ダウンロード

基数変換

10進数から16進数、16進数から10進数のように、
10進数と指定基数の進数変換 を行います。
メニュー
10進数から指定基数の進数に変換 - DecToNum
指定基数の進数から10進数に変換 - NumToDec
サンプルファイルのダウンロード
リンクリスト

10進数から指定基数の進数に変換 - DecToNum

関数仕様

DecToNum(数値,基数)

 数値:元の10進数値−文字型
 基数:進法(2〜16)−数値型

 戻り値:文字型

 例:
   DecToNum("10",2)  → "1010"
   DecToNum("10",16) → "A"
Function DecToNum(数値 As Long, 基数 As Integer) As String
'
' 数値を指定基数の進数に変換
'
    Const num = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    
    Dim q As Long   '商
    Dim r As Long   '余り
    
    DecToNum = ""
    
    If 基数 <= 1 Then
         DecToNum = CVErr(xlErrValue)
         Exit Function
    End If
    
    q = 数値
    Do
        r = q Mod 基数
        q = q \ 基数
        DecToNum = Mid(num, r + 1, 1) & DecToNum
    Loop While q > 0

End Function


指定基数の進数から10進数に変換 - NumToDec

NumToDec(数値,基数)

 数値:元の数値−文字型
 基数:進法(2〜16)−数値型

 戻り値:長整数型


 例:
   NumToDec("110",2)  → "6"
   NumToDec("1A",16) → "26"
Function NumToDec(数値 As String, 基数 As Integer) As Long
'
' 指定基数の進数を10進数に変換
'
    Const num = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    
    Dim i As Integer, k As Integer
    Dim s As String

    If 基数 <= 1 Then
         NumToDec = CVErr(xlErrValue)
         Exit Function
    End If
    
    NumToDec = 0
    For i = 1 To Len(数値)
    
        s = Mid(数値, Len(数値) - i + 1, 1)
        
        If Val(s) >= 基数 Then  '基数以上の数値がある!
            NumToDec = CVErr(xlErrValue)
            Exit For
        End If
        
        k = InStr(1, num, s, vbTextCompare)
        If k = 0 Then Exit For
        NumToDec = NumToDec + (k - 1) * 基数 ^ (i - 1)
        
    Next i

End Function


変換例
変換例


×
PageTop