進数変換リンク
他の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進数へ変換する
8進数から16進数へ変換する考え方
8進数から16進数に変換するには、一度10進数に変換してからHex関数を使って16進数に変換します。
8進数から10進数の変換は「VBAで8進数から10進数へ変換する」をご参照ください。
8進数から16進数に変換する関数
第一引数に変換元となる8進数文字列を指定し、第二引数が変換後の10進数文字列が返却されます。
例えば第一引数に”37″とセットした場合は第二引数に”1F”がセットされて関数が終了します。
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 |
'// 引数1 (IN) :8進数文字列 '// 引数2 (OUT) :変換後の16進数文字列 Sub OctToHex(a_sOct As String, a_sHex As String) Dim iLen As Integer '// 8進数文字列 Dim i As Integer '// ループカウンタ Dim iOct As Integer '// 8進数値 Dim iDec As Long '// 10進数値 '// 引数8進数文字列が未設定の場合は処理を抜ける If (a_sOct = "") Then Exit Sub End If '// 8進数から10進数に変換 '// 8進数文字列長を取得 iLen = Len(a_sOct) '// 8進数文字列を1文字ずつループ For i = 1 To iLen '// 8進数文字列の1文字を数値で取得 iOct = CInt(Mid(a_sOct, i, 1)) '// 8進数値に8の乗数を掛けて10進数に変換して10進数値に加算 iDec = iDec + CStr(iOct * 8 ^ (iLen - i)) Next '// 10進数から16進数に変換 a_sHex = Hex(iDec) End Sub |
コードは2段階の処理に分かれています。1つ目は8進数から10進数への変換で、2つ目はHex関数を使った10進数から16進数への変換です。
ここではあえて8進数から10進数への変換をコードで書いていますが「VBAで8進数から10進数へ変換する」で紹介しているOctToDec()を使って以下のように書いても同じ意味になります。
厳密には引数の8進数文字列のチェックがOctToHex()とOctToDec()の2回になる違いはありますが処理速度にもほとんど影響はありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
'// 引数1 (IN) :8進数文字列 '// 引数2 (OUT) :変換後の16進数文字列 Sub OctToHex(a_sOct As String, a_sHex As String) Dim sDec As String '// 10進数文字列 '// 引数8進数文字列が未設定の場合は処理を抜ける If (a_sOct = "") Then Exit Sub End If '// 8進数から10進数に変換 Call OctToDec(a_sOct, sDec) '// 10進数から16進数に変換 a_sHex = Hex(sDec) End Sub |
使い方
8進数文字列をいくつか持つ配列を作って、ループでOctToHex関数を呼び出し、変換結果をイミディエイトウィンドウに出力するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub OctToHexTest() Dim a As String Dim b As String Dim ar ar = Array("1", "2", "3", "4", "5", "6", "7", "10", "11", "12", "13", "14", "15", "16", "17", "20", "21", "22", "23", "24", "25", "26", "27", "30", "31", "32", "33", "34", "35", "36", "37", "40", "41", "42", "43", "44", "45") Dim i For i = 0 To UBound(ar) a = ar(i) Call OctToHex(a, b) Debug.Print a & " " & b Next End Sub |
実行結果
1 1
2 2
3 3
4 4
5 5
6 6
7 7
10 8
11 9
12 A
13 B
14 C
15 D
16 E
17 F
20 10
21 11
22 12
23 13
24 14
25 15
26 16
27 17
30 18
31 19
32 1A
33 1B
34 1C
35 1D
36 1E
37 1F
40 20
41 21
42 22
43 23
44 24
45 25