「先生、前回の続きですね?」
「うむ、前回時間切れになったからな」
「時間切れって・・・」
「大人の都合じゃ」
「あ!これ?」
「まぁ・・・そのぉ・・・」
「それは誰かの声帯模写ですか?」
「田中角栄じゃないか」
「誰です?その田中なんとかっておっさんは」
「そうかぁ、君は田中角栄を知らない世代なんだな。元総理大臣だった人じゃ」
「へぇ~」
「昔は、大受けだったんだがなぁ」
「はいはい!わっはっは。これでいいですか」
「傷つくなぁ」
「本題に入ってください」
「はい」
「分かりました。まずは、10進数を16進数に変改するマクロから。ちちんぷいぷいのえい!」
Function DEC_TO_HEX_A(DEC_VALUE As Long, myHexDigits As Integer) As String
Dim myVALUE As Long
Dim myRess As Double
Dim myDEC_BIT As Long
Dim myHEX_1BIT As String
Dim i As Integer
myVALUE = DEC_VALUE '<--------(1)
For i = myHexDigits To 1 Step -1 '<--------(2)
myVALUE = myVALUE Mod (16 ^ i) '<--------(3)
myDEC_BIT = Int(myVALUE / (16 ^ (i - 1))) '<--------(4)
Select Case myDEC_BIT '<--------(5)
Case 0 To 9
myHEX_1BIT = CStr(myDEC_BIT) '<--------(6)
Case 10
myHEX_1BIT = "A" '<--------(7)
Case 11
myHEX_1BIT = "B" '<--------(8)
Case 12
myHEX_1BIT = "C" '<--------(9)
Case 13
myHEX_1BIT = "D" '<--------(10)
Case 14
myHEX_1BIT = "E" '<--------(11)
Case 15
myHEX_1BIT = "F" '<--------(12)
End Select
DEC_TO_HEX_A = DEC_TO_HEX_A & myHEX_1BIT '<--------(13)
Next i
End Function
「先生、解説をお願いします」
「うむ、2進数を10進数に変換するマクロと同様に、推移表を作ってみた」
「はい」
「“myVALUE Mod (16 ^ i)”が、(3)のステートメントの結果。“Int(myVALUE / (16 ^ (i - 1)))”が、(3)のステートメントの結果じゃ」
「なるほど・・・1回目の(3)のステートメントは無駄ではありませんか?」
「ドキッ!」
「さては、図星ですね?」
「その通り。ループの1回目で(3)のステートメントは必要ない」
「じゃあ、なんで?」
「Ifステートメントで条件分岐してもよいのじゃが、計算結果は同じじゃ。よって、余計なステートメントは省いたので、このようなマクロになった」
「じゃあ、ループの最後にもってくれば?」
「さらに、ドキッ!」
「まぁ・・・そのぉ・・・」
「わっはっは。満足ですか?」
「しょんぼり」
「(5)~(12)のコードは、ちょっとダサい」
「ほほぅ、君ならどう書く?」
「はい、このように。ちちんぷいぷいの・・・うりゃ!」