古庄 潤(ふるしょう じゅん)
本業はエンジニア。ICに様々な機械をつなぎ,電流やら電圧を測定する。もちろん,これらの測定器もVBAでコントロールし,取り込んだデータもマクロで処理する。人呼んで,マクロの鬼軍曹!
今回のサンプルは、Excel2003/Excel2007(Windows XP)での動作を確認しています

「先生、おはようございます」
「おぉ、ゲール君、丁度いいところに来た。ここにシップを貼ってくれんか?」
「愛の力で介の字貼りですね?」
「なんのこっちゃ?」
「だから・・・」
「ここじゃ!ここ!」
「腰ですかぁ? ここに介の字貼りは難しいというか、無駄というか・・・」
「ごちゃごちゃ言っとらんで、早くしてくれたまえ」
「次の患者さん、ど~ぞ~」

今月の相談
 組み込みのマイコンを使ってハードウエアをコントロールしています。マイコンとの間では、バイナリーやヘックスで数値のやり取りをするのですが、数値の変換で行き詰っています。Excelの関数では桁数が足りません。ドクター、どうかお助けを!

「ワイナリーでヘックション?」
「なんじゃ、そりゃ?」
「だって、患者さんが」
「あぁ、バイナリーとヘックスか」
「何ですか、それ?」
「バイナリーは2進数、ヘックスは16進数のことじゃ」
「あぁ、学校で習った覚えがあります」
「そうか、じゃあ説明は不要じゃな」
「習った覚えはありますが、内容は記憶にございません」
「ありゃりゃ!では、ざっと説明しよう」
「お願いします」

「10進数は10倍で桁が上がる」
「はい。1の10倍は10で2桁、10の10倍は100で3桁」
「2進数は2倍で桁が上がる」
「じゃあ、1の2倍は2で2桁?」
「ちょっと違うな」
「どういう風に?」
「1の2倍は“10b”で2桁」
「そんなバナナ! 1の2倍が10だなんて、ありえない」
「うむ、この場合10bは“ジュウ”ではなく“イチマル”或いは“イチゼロ”又は“イチレイ”と読むんじゃ」
「イチマル?」
「そう、イチマル。10b=2の1乗×1 + 2の0乗×0という意味なんじゃ」
「むむう」
「では、110bは、10進数ではいくつになるか」
「パトカーになります」
「ひゃくとう番ではない!」
「見透かされた」
「110b=2^2×1 + 2^1×1 + 2^0×0=6となる」
「むむむぅ」
「つまり、桁数が2のべき乗の指数となり、数字が“1”の場合はある、“0”の場合は無いと判断して、全部を足し合わせると10進数の数値になる。同じように、16進数は、16倍になると桁上がりをする」
「むむぅ」
「例えば16ビットのデータがあるとしよう」
「はい」
「2進数で表すと、“1000 0101 1010 1101b”となる」
「ほほぅ」
「長いじゃろ?」
「長いですね」
「これを、16進数で表すと“85ADh”となる」
「短くなりました。意味はわかりませんが」
「16進数の場合、1~9までは10進数と同じじゃ。そして10進数の“10”は“A”、“11”は“B”、“12”は“C”、“13”は“D”、“14”は“E”、“15”は“F”で表現する」
「なるほどねぇ」
「理系のエンジニアにとって、2進数や16進数は必要不可欠なんじゃ」
「そう言うことかぁ」
「ま、醤油ぅことで、本題に入ってもよろしいかな?」
「はい、どうぞ」
「では、10進数を2進数に変換するマクロから」
「プリーズ!」
「ちちんぷいぷいのえい!」