- ベストアンサー
Excel 10進数と36進数
例えばA1に10進数で数字を入力したとします。 B1にはそれを36進数で表示させたいのです。 B1に関数を書くとしたら、どのように書けばよろしいのでしょうか? また36進数から10進数にする関数も教えていただけませんしょうか。 以上、みなさまの知恵をお貸しください。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
セル A1 の十進数の最大値が 35 なら、その三十六進数は次式で1桁表示 =CHAR(A1+48+7*(A1>9)) セル A1 の十進数の最大値が 1295 なら、その三十六進数は次式で2桁表示 =CHAR(INT(A1/36)+48+7*(INT(A1/36)>9))&CHAR(MOD(A1,36)+48+7*(MOD(A1,36)>9)) セル A1 の三十六進数の最大値が1桁の Z なら、その十進数は次式で表示 =CODE(A1)-48-7*(A1>"9") セル A1 の三十六進数の最大値が2桁の ZZ なら、その十進数は次式で表示 =(CODE(LEFT(A1,1))-48-7*(LEFT(A1,1)>"9"))*36+(CODE(RIGHT(A1,1))-48-7*(RIGHT(A1,1)>"9"))
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
>36進数から10進数にする関数 一発では式が複雑になるので 16進数の文字列を1桁1セルに分解する その各文字をVLOOKUP関数で数値化する。 SUMPRODUCT関数で各桁の対応ウエイトを掛けあわせて足すと10進数になる。 例データ A1:G2 12hd 13 17 2 1 ーー 49873 ーー 1 36 1296 46656 1679616 B2の式 =36^(COLUMN()-2) 右方向に式を複写する。16進の各桁のウエイト(重み)です。 B1の式 =IF(COLUMN()-1>LEN($A$1),"",VLOOKUP(MID($A1,LEN($A1)+2-COLUMN(),1),$J$1:$K$36,2,FALSE)) 36進で、6桁以下でB-G列とする B1の式 =IF(COLUMN()-1>LEN($A1),"",VLOOKUP(MID($A1,LEN($A1)+2-COLUMN(),1),$J$1:$K$36,2,FALSE)) 右方向に式を複写する。 K-J列に 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 a 10 b 11 c 12 d 13 ・・・ のような対応表を作っておく。 H1の式は =SUMPRODUCT(B1:G1,B2:G2) == 上記でウエイトのセルをシートのB2:G2に作らない場合 H1の式は =SUMPRODUCT(B1:G1,{1,36,1296,46656,1679616,60466176}) のようにも(配列で直に)書けます。 B-G列は作業列を使ったことになり、やっていることが判りやすくなると思います。 ただし、どうしても桁数の少ない場合用です。 上記は、十分にはテストして無いので、よく検算・確認して使ってください。
お礼
回答ありがとうございます。 私が対象としている数字が膨大な桁数のため関数で処理するのはとても難しいということがわかりました。 別の処理の仕方を考えてみたいと思います。 回答ありがとうございました。
- okormazd
- ベストアンサー率50% (1224/2412)
36進の表示だと数字が36個必要です。その数字に何を使うか知りませんが、仮に0~9とアルファベット26文字を使うとすれば、その26文字を数値に対応させる必要があるので、それをどこかでやる必要があります。したがって、A1セルの10進数をB1に関数1つで36進で表示するのは無理です。作業領域を使えばできますが。 この変換をしなくていい、すなわち0~9までの数字2つで36進の1ケタを表すということであれば、たとえば、 =RIGHT("00"&INT(INT(A1/36^4)/36),2)&RIGHT("00"&MOD(INT(A1/36^4),36),2)&RIGHT("00"&MOD(INT(A1/36^3),36),2)&RIGHT("00"&MOD(INT(A1/36^2),36),2)&RIGHT("00"&MOD(INT(A1/36),36),2)&RIGHT("00"&MOD(A1,36),2) とでもすれば、2ケタが36進1ケタで表示されます。これで10進10ケタくらいまで36進に変換されます。もっと桁数がほしければ、関数を伸ばせばいい。 作業領域で対応表を作れば、36進1ケタを1文字で表示できます。 36進を10進に変換するのもできますが、36進をどのように表示するのか決めなければダメですね。
お礼
回答ありがとうございます。 私が対象としている数字が膨大な桁数のため関数で処理するのはとても難しいということがわかりました。 別の処理の仕方を考えてみたいと思います。 回答ありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
各桁を求めて淡々と並べるだけの作業です。 B1:とりあえず最大4桁 =IF(A1>=36^3,MID("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",MOD(INT(A1/36^3),36)+1,1),"") &IF(A1>=36^2,MID("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",MOD(INT(A1/36^2),36)+1,1),"") &IF(A1>=36^1,MID("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",MOD(INT(A1/36^1),36)+1,1),"") &MID("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",MOD(INT(A1/36^0),36)+1,1) 戻す方は数しかないのでもっと簡単です。 C1:同上 =SUMPRODUCT((FIND(MID(RIGHT("000"&B1,4),ROW($C$1:$C$4),1),"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")-1)*36^(4-ROW($C$1:$C$4)))
お礼
回答ありがとうございます。 IF関数を使うとなると対象の桁数がとても膨大なためネストの限界にひっかかってしまいます。 私の言葉が足りず、申し訳ございませんでした。 回答ありがとうございました。
標準の関数でできるのはここまで。 http://www.relief.jp/itnote/archives/000925.php 36進数だと外部ツールを使わないとダメだと思います。 http://www.geocities.co.jp/SiliconValley-SanJose/2310/excel/setumei_m/setumei14.htm
お礼
回答ありがとうございます。 やはり単発の関数では2,8,10,16進数しかできないみたいですね。 参考URLのツールでは直接入力が出来なく、私が扱う数字が膨大すぎるのでとても効率が良くなかったです・・・。 この点は私の言葉不足で申し訳なく思います。 回答ありがとうございました。
お礼
回答ありがとうございます。 私が対象としている数字が膨大な桁数のため関数で処理するのはとても難しいということがわかりました。 別の処理の仕方を考えてみたいと思います。 回答ありがとうございました。