進数変換リンク
他のn進数からn進数への変換は以下をご参照ください。
VBAで2進数から8進数へ変換する
VBAで2進数から10進数へ変換する
VBAで2進数から16進数へ変換する
VBAで8進数から2進数へ変換する
VBAで8進数から10進数へ変換する
VBAで8進数から16進数に変換する
VBAで10進数から2進数へ変換する
VBAで10進数から8進数へ変換する
VBAで10進数から16進数へ変換する
VBAで16進数から2進数へ変換する
VBAで16進数から8進数へ変換する
VBAで16進数から10進数へ変換する
2進数から10進数へ変換する考え方
VBAでは2進数を表現するには文字列を扱います。
2進数から10進数に変換するには、2進数文字列を1文字ずつ切り出し、その数字に2の桁位置の乗数を掛けて、各桁を加算することで変換できます。
“101”であれば、1×2の2乗+0×2の1乗+1×2の0乗→1×4+0×2+1×1→4+0+1→5、となります。
以下のコードはこの考え方を実装しています。
2進数から8進数に変換する関数
上の説明をコードにした関数が以下になります。
第一引数に変換元となる2進数文字列を指定し、第二引数が変換後の10進数文字列が返却されます。
例えば第一引数に”1111″とセットした場合は第二引数に”15″がセットされて関数が終了します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
'// 引数1 (IN) :2進数文字列 '// 引数2 (OUT) :変換後の10進数文字列 Sub BinToDec(a_sBin As String, a_sDec As String) Dim i As Integer '// ループカウンタ Dim sParts As String '// 2進数文字列を切り出した一部 Dim iDec As Double '// 10進数値 Dim iLen As Integer '// 2進数文字列長 '// 引数の2進数文字列が未設定の場合は処理せず抜ける If (a_sBin = "") Then Exit Sub End If '// 10進数値を初期化 iDec = 0 '// 2進数文字列長を取得 iLen = Len(a_sBin) '// 2進数文字列を左から1文字ずつループ For i = 1 To iLen '// 2進数文字列を1文字切り出し sParts = Mid(a_sBin, i, 1) '// 2進数値×2のn乗の値を加算する iDec = iDec + 2 ^ (iLen - i) * CInt(sParts) Next '// 10進数値を文字列に変換 a_sDec = CStr(iDec) End Sub |
コードは特殊なことはないので内容はコメントの通りです。
1文字ずつ2のn乗数を掛けて足し合わせた結果を文字列にしています。
使い方
2進数文字列をいくつか持つ配列を作って、ループでBinToDec関数を呼び出し、変換結果をイミディエイトウィンドウに出力するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub BinToDecTest() Dim a As String Dim b As String Dim ar ar = Array("1", "10", "11", "100", "101", "110", "111", "1000", "1001") Dim i For i = 0 To UBound(ar) a = ar(i) Call BinToDec(a, b) Debug.Print a & " " & b Next End Sub |
実行結果
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9