基数変換マクロを作ってみた
横浜へなちょこプログラミング勉強会用に基数変換マクロを作ってみました。2進〜10進数までの間で表記の変換が出来ます。(16進数はint型の変数に格納出来ないからちょっと厄介。とりあえず10進数までネ)
動作状態はこんな感じ。excelのシート上で関数として利用できます。
動作を決定しているソースコードはこんな感じです。かなり格好悪い・・・。
Function 基数変換(input_num As Integer, origin_num As Integer, base_num As Integer)
'引数:input_num(基数変換の対象)origin_num(変換元の基数),base_num(変換したい基数)Dim i As Integer
Dim residue As Integer 'residue:余りの英語表記らしい
Dim ans '基数変換の答え(一時バッファとしても使用)
i = 0
ans = 0
Do While input_num >= base_num
residue = input_num Mod base_num
ans = ans + residue * origin_num ^ i
input_num = (input_num - residue) / base_num
i = i + 1
Loop
residue = input_num Mod base_num
ans = ans + residue * origin_num ^ i
基数変換 = ans
End Function
勉強会に来る人たちはもっと綺麗なコードを書いているのでしょうか?
かなり楽しみです。
ところで・・・
16進数を2進数に変換したり、逆に2進数を16進数に変換したりする関数ってどうやるんだろう?16進→10進→2進とか、一度10進数に置き換えるなら思いつくんだけど・・・。(私の頭は10進数ベースでしか考えられません。悲しい。)
追記 デバックがメンドい。
2進数を3進数に変換とかすると、ますます訳が分からない。3進数だと1〜6が、1,2,10,11,12,20ですぜ。もう頭の中がパニック!
デバックが大変だぁ・・・。