- ベストアンサー
n進法の変換!
数学が得意で、Excelの達人の方!(じゃなくてもいいんですが……) たとえば、Windowsに載っている、電卓を関数モードで使うと、16進法10進法8進法2進法の変換ができるんですが、ほかには変換できません。 と、言うことで、数字(12桁以上必要)を入れると、ほかの進法に変わるシートを作りたいんですが、ぜんぜんうまくいきません。 誰か、うまいのを教えてください。体裁は気にしません。 ※変換前のn進法のnを、たとえばA2に入力 ※変換後のn'進法のn'を、たとえばA3に入力 ※変換する、n進数を入力 と、こんなシートを作りたいんです。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
マクロ(visual basic)を使えば何とでもなります。でもマクロなしでやってみたいですね。 とりあえず符号は付けないものとします。n進法から10進法への変換、10進法からm進法への変換、の二つを作れば便利ですね。 n進法から10進法への変換 cell $A$1 にnの数値を入力し、(n≦18) cell $B$1 にn進法で表した値(文字列)を入力することにします。取りあえず12桁以内ということにしましょう。$B$1 は文字列である事が確実であるように、先頭に ' (quote)を付けて入力します。cellの中で左寄せに表示されることを確認してね。 さて$C$1 には次の式を入力。 =SUM(IF(LEN(B1)-{11,10,9,8,7,6,5,4,3,2,1,0}<1,0,(SEARCH(MID(B1,LEN(B1)-{11,10,9,8,7,6,5,4,3,2,1,0},1),"0123456789abcdefghi")-1))*$A$1^{11,10,9,8,7,6,5,4,3,2,1,0}) そして、数式表示バーの中にカーソルを置いた状態(数式のどこかをクリック)で、Control キーを押しながらEnter (Macならリンゴマークのキーを押しながらEnter)します。この操作は複数のセルに答を表示させるような、配列を返す関数に使うもので、数式バーには(入力したおぼえのない){}が自動的に付加されて {=SUM(IF(LEN(B1)-{11,10,9,8,7,6,5,4,3,2,1,0}<1,0,(SEARCH(MID(B1,LEN(B1)-{11,10,9,8,7,6,5,4,3,2,1,0},1),"0123456789abcdefghi")-1))*$A$1^{11,10,9,8,7,6,5,4,3,2,1,0})} と表示されるはずです。 10進法からm進法への変換。 cell $A$2 にmの数値を入力し、cell $C$1に表示されている10進数値をm進法に変換した文字列をcell $B$2に表示させます。 残念ながら、文字列をくっつける関数concatenateが融通が利かないもんですから、以下のようにする必要があります。 まず、cell $D$2に =(MID("0123456789ABCDEFGHI",MOD(INT(C1/$A$2^{15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0}),$A$2)+1,1)) を入力して、取りあえずenterを押します。 それから、cell $D$2から $S$2までを選択します(このとき、cell $D$2を最初に選ぶことが重要です。)すると、数式バーに今入れた式が表示されてますね。この式のなかのどこでも良いからカーソルを置き、そしてControl キーを押しながらEnter (Macならリンゴマークのキーを押しながらEnter)します。すると、$D$2から$S$2までのセルに1文字ずつ表示されます。これが各桁の数字を表している。 最後にこれをひとまとめにするために、cell $C$2に =CONCATENATE(D2,E2,F2,G2,H2,I2,J2,K2,L2,M2,N2,O2,P2,Q2,R2,S2) を入力します。 これでcell $C$2にm進法で表示した値が出たわけです。え?先頭にゼロがいっぱい付いているのが気に入らない?
その他の回答 (3)
- terra5
- ベストアンサー率34% (574/1662)
n1 進法 の数字を n2 進法の数字に変換する。 但し,変換する数字の桁数は12桁以上必要 (通常の整数では表現できないほど大きい) という意味ですね。 この場合 n はいくつまで使えればいいのですか。 また、例えば n = 37 とした場合、36に相当する数字は どうやって表現しますか?
ご質問の意味が今ひとつ分かり難いのですが.... 要するに、3進数とか5進数を作りたいということでしょうか? 何に使われるんでしょう。私には16進数・・・以外が必要になる場面は思いつかないのですが...... ですが、考え方を書いておきます。 例えば 255を2進数にする場合。 次々に2で割っていけばいいわけです。 2 255 1 255/2=127...1 2 127 1 127/2=63...1 2 063 1 63/2=31...1 2 031 1 ・ 2 015 1 ・ 2 007 1 ・ 2 003 1 ・ 2 001 こうやって 出てきた1を下から順に、左から書いてやれば良いわけです。 一番下の001(本当は1です。桁揃えのために敢えて0を入れてあります。)から、上に11111111bと書けば、255を2進数にした答えです。 的が外れていたらごめんなさい。 因みにbは前の数値は2進数ですよ、ということです。 8進数はhだったと思います。(Hexから)
お礼
回答ありがとうございます。 つまり、「あまり」をだせばいいんですね!あまりを下から順に書いていけば、答えがわかるのか。 ぜんぜん的外れではないです!
- bin-chan
- ベストアンサー率33% (1403/4213)
n進数はご質問にあるように「16進法10進法8進法2進法」とすると、 実は関数が用意されています。 n : n→10 10→n 16進数:HEX2DEC、DEC2HEX 8進法 :OCT2DEC、DEC2OCT 2進法 :BIN2DEC、DEC2BIN ただし、通常のセットアップのままでは使用できません。 メニュー[ツール]-[アドイン]で「分析ツール」にチェックをいれてください。
お礼
回答ありがとうございます。 なるほど、そんな関数もあったんですか、DECというのは10進のことですね? 早速セットアップをしてみよう。
補足
回答ありがとうございます。 そうだった。0から、zまで行ったら……だめですね。(汗) すいません、とりあえずは18進法以上は必要ないんです。説明不足でした。