進数変換リンク

他の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進数から8進数へ変換する考え方

VBAでは2進数を表現するには文字列を扱います。

2進数から8進数に変換するには、2進数文字列を3文字ずつ区切り、その3文字を10進数に変換し、さらにそれを8進数に変換し、区切りごとに出来た8進数を連結させることで完成します。

例:2進数文字列”11010110″を8進数に変換する

右側から3桁ごとに区切ると「”11″(”0″を付与して”011″とする)、”010″、”110″」になります。

プログラムでは3桁固定で区切りたいため事前に左に”0″を必要なだけ追加しています。

3桁区切りの2進数文字列を1文字ずつを10進数に変換します。

“011”の場合は、0×2^2 + 1×2^1 + 1×2^0 → 0×4 + 1×2 + 1×1 → 0 + 2 + 1 → 3
“010”の場合は、0×2^2 + 1×2^1 + 0×2^0 → 0×4 + 1×2 + 0×1 → 0 + 2 + 0 → 2
“110”の場合は、1×2^2 + 1×2^1 + 0×2^0 → 1×4 + 1×2 + 0×1 → 4 + 2 + 0 → 6

これらを連結させて8進数文字列”326″となります。

以下のコードはこの考え方を実装しています。

2進数から8進数に変換する関数

上の説明をコードにした関数が以下になります。

第一引数に変換元となる2進数文字列を指定し、第二引数が変換後の8進数文字列が返却されます。

例えば第一引数に”110″とセットした場合は第二引数に”6″がセットされて関数が終了します。

コードの内容はコメントに大体書いているので分かると思いますが、仕様としていることがあります。

引数の2進数文字列が未設定の場合は処理をせずに関数処理を終わるようにしています。

引数の2進数文字列が”0″と”1″で構成されている前提になっておりエラー処理は入れていません。エラー処理が必要な場合は”0″と”1″だけかどうかのチェックを入れるなどで対応してください。

変換結果の8進数文字列からは先頭に”0″があっても除去しています。たとえば変換結果が”00123″だった場合は”123″として第二引数に戻しています。

使い方

2進数文字列をいくつか持つ配列を作って、ループでBinToOct関数を呼び出し、変換結果をイミディエイトウィンドウに出力するサンプルです。

実行結果
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 10
1001 11