• ベストアンサー

n進法の変換!

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

質問者が選んだベストアンサー

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.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)
回答No.3

n1 進法 の数字を n2 進法の数字に変換する。 但し,変換する数字の桁数は12桁以上必要 (通常の整数では表現できないほど大きい) という意味ですね。 この場合 n はいくつまで使えればいいのですか。 また、例えば n = 37 とした場合、36に相当する数字は どうやって表現しますか?

kannna-A
質問者

補足

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

noname#9808
noname#9808
回答No.2

ご質問の意味が今ひとつ分かり難いのですが.... 要するに、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から)

kannna-A
質問者

お礼

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

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

n進数はご質問にあるように「16進法10進法8進法2進法」とすると、 実は関数が用意されています。 n : n→10 10→n 16進数:HEX2DEC、DEC2HEX 8進法 :OCT2DEC、DEC2OCT 2進法 :BIN2DEC、DEC2BIN ただし、通常のセットアップのままでは使用できません。 メニュー[ツール]-[アドイン]で「分析ツール」にチェックをいれてください。

kannna-A
質問者

お礼

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

関連するQ&A

  • n進法→m進法への変換

    やりなおしのSPI問題に頭を痛めています。10進法→n進法、n進法→10進法、というやり方はそれぞれ理解できますが、以下のような応用になると、うまくできません。どなたか、宜しくお願いします! 例題1 3進法で3桁の数は何個あるか。 (書き出していくとわかるのですが、それ以外に何か公式のようなもので求める方法がありますでしょうか。他の進数になるとたちまち困ります。) 例題2 3進法の112201は5進法でいくらか。 (いったん10進法に直さずに、n進法→m進法への変換をダイレクトに行なえ、効率的でわかりやすい方法はありますでしょうか。)

  • n進法についての問題です。

    nを2以上の整数とした時 n進法で表されて4桁の数abcd(n)のうちa=d≠0 b=cであるものを n進法の4桁回文とよぶ。 (1) 4進法の4桁回文全ての最大公約数を求めよ。 (2) n進法の4桁文は全てn+1で割り切れる事を示せ。 ※宜しくお願いします。

  • 少数の10進法をn進法に変える方法について

    たとえば10進法の0.304を5進法で表すには 0.304に5をかけて1.52で 1の部分を取り出し 0.52に5をかけて2.6で 2の部分を取り出し 0.6に5をかけて3.0で 3の部分を取り出し 0.123となりますが なぜ10進法の0. の部分は進法をかえても 必ず0. のままになるのでしょうか? 数学は不得意なので簡単に説明してもらえると助かります。

  • n進法の変換

    数字の0~9および英字のA~Z(OおよびIをのぞく)の34文字を使用した34進法の4桁の数字を10進法への変換方法、およびその逆(10進法→34進法)の変換方法をエクセルの計算式またはマクロを使用し作成する方法を教えてください。

  • 10進法

    ここに、質問するのがベストかどうかわかりませんが、 世の中では10進法が使われていますが、これは人間の手や足の指が 10本あったからなんでしょうか? それとは別に、 コンピューターは2進法で動いていると聞きました。2進法ということは、大きい数を表すときには桁が10進法であらわすときの5倍必要だとおもいます。 コンピューターにとって、桁が多いのと、10進法や20進法などといったように進法の数を増やすのでは桁を増やすほうが得意なのでしょうか? うまく説明できませんが、教えてください。

  • 方程式とn進法の問題がわかりません

    問1 A~Dの平均点は70点、クラス平均に比べてAは3点低く、Bは5点低く、Cは8点高かった。また、Dはクラスの平均点よりもたかく、Cよりも低かった。平均点が整数であったとするtき、クラスの平均点を答えよ。 (X-3)+(X-5)+(X+8)+(X+a)=280 (ここまではあってます) 続きを自分で計算したら間違っており 正しい答えが↓なのですが、わかりません 4X+a=70×4 ←どう計算したらこうなるんですか? 4X=70×4-a X=70-a/4  ←何故分数になるんですか? a=4なので69 問2 62.2×(N-1)+a-{63.9×(N-1)+b}=0 (62.2-63.9)×(N-1)+a-b=0 ← (N-1)が1つ消えてるのは何故?bはなぜ-になった? a-b=68を代入 (62.2-63.9)×(N-1)+68=0 -1.7(N-1)+68=0 1.7(N-1)=68÷1.7 ← なぜ÷?=を取って-じゃないの? N-1=40 N=41 問3 る数を5進法で示しても7進法で示しても4ケタであった。この数を3進法で示すと何ケタになるか? 5進法の最小1000 最大4444を10進法すると 1000=125 4444=624 7進法だと 1000=343 6666=2400 5進法でも7進法でも4ケタになる数は10進法で最小125、最大2400と答えたら×で 正解は最小343、最大624なんです 何で343と634なのでしょうか?

  • C言語 n!のプログラミング

    C言語で、入力されたnについてのn!を求めるプログラムを書きました。 #include<stdio.h> int main() { int total=1,i,n; scanf("%d",&n); for(i=1;i<=n;i++){ total*=i; } printf("%d",total); } しかし、このままだとn=13くらいからオーバーフローしてしまって、n=100やn=10000といった大きな数の場合のn!が求められませんよね? 万進法という方法を使って、10000未満の数を配列の要素に割り当てる(説明が正しいかわかりませんが…)と、うまくいくと聞きました。 万進法とはどのようなものでしょうか?やり方を教えてください。 また、C言語での、このプログラムの一例もできれば教えてください。 ですが、今一番知りたいのはどういう手順でプログラムを書けばいいのかということですので、そちらの方を詳しく教えてください。

  • nの0乗が1になる理由 n進法

    題名の通りなのですが、2進法とか3進法とかの計算問題をやっていてふと疑問に思ったのですが。n^0(nの0乗)=1となるのは何故でしょうか? いろいろと調べては見たのですが、そういう約束事だから程度の解説が多く理解できません。どなたか、どの様に考えるべきものなのかアドバイスを下さい。 蛇足ですが、元来数学(算数)はめっぽう苦手なので出来るだけわかりやすくお願いします。

  • 12進法と60進法の数値は

    アナログ時計だと12進法で ↓  ↓  ↓です。 1 2 3 4 5 6 7 8 9 10 11 12 Q1:進法の考え方からすると 10~12は1ケタで表現すべきではないですか?   16進法だと    0 1 2 3 4 5 6 7 8 9 A B C D E F   と1ケタで表現出来てます。 Q2:宇宙人(3000年前かなぁ!)が使用していた60進数は1ケタで60種類の数値を表現していたん    ですか?    数値の種類もわかりますか?

  • nの式で表す・・・?

    a    - a  = 2    a = 1  1+n     n        1 (n:自然数)のときa をnの式で表せ。              n のとき方を教えていただけませんか・・? a  1+n   でaの右下に小文字でn+1と考えてください。 数学の教科書を探したのですが、ヒントすら見つからなかったので・・。 よろしくお願いいたします。