最新閲覧日:

数学が得意で、Excelの達人の方!(じゃなくてもいいんですが……)
たとえば、Windowsに載っている、電卓を関数モードで使うと、16進法10進法8進法2進法の変換ができるんですが、ほかには変換できません。
と、言うことで、数字(12桁以上必要)を入れると、ほかの進法に変わるシートを作りたいんですが、ぜんぜんうまくいきません。
誰か、うまいのを教えてください。体裁は気にしません。
 ※変換前のn進法のnを、たとえばA2に入力
 ※変換後のn'進法のn'を、たとえばA3に入力
 ※変換する、n進数を入力
と、こんなシートを作りたいんです。
よろしくお願いいたします。

A 回答 (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進法で表示した値が出たわけです。え?先頭にゼロがいっぱい付いているのが気に入らない?
    • good
    • 0

n1 進法 の数字を n2 進法の数字に変換する。


但し,変換する数字の桁数は12桁以上必要
(通常の整数では表現できないほど大きい)
という意味ですね。

この場合 n はいくつまで使えればいいのですか。
また、例えば n = 37 とした場合、36に相当する数字は
どうやって表現しますか?

この回答への補足

回答ありがとうございます。
そうだった。0から、zまで行ったら……だめですね。(汗)
すいません、とりあえずは18進法以上は必要ないんです。説明不足でした。

補足日時:2001/09/09 12:59
    • good
    • 0

ご質問の意味が今ひとつ分かり難いのですが....


要するに、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から)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
つまり、「あまり」をだせばいいんですね!あまりを下から順に書いていけば、答えがわかるのか。
ぜんぜん的外れではないです!

お礼日時:2001/09/09 12:53

n進数はご質問にあるように「16進法10進法8進法2進法」とすると、


実は関数が用意されています。

n : n→10 10→n
16進数:HEX2DEC、DEC2HEX
8進法 :OCT2DEC、DEC2OCT
2進法 :BIN2DEC、DEC2BIN

ただし、通常のセットアップのままでは使用できません。

メニュー[ツール]-[アドイン]で「分析ツール」にチェックをいれてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど、そんな関数もあったんですか、DECというのは10進のことですね?
早速セットアップをしてみよう。

お礼日時:2001/09/09 12:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報