dポイントプレゼントキャンペーン実施中!

例えばA1に10進数で数字を入力したとします。
B1にはそれを36進数で表示させたいのです。

B1に関数を書くとしたら、どのように書けばよろしいのでしょうか?

また36進数から10進数にする関数も教えていただけませんしょうか。

以上、みなさまの知恵をお貸しください。
よろしくお願いいたします。

A 回答 (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"))
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

私が対象としている数字が膨大な桁数のため関数で処理するのはとても難しいということがわかりました。

別の処理の仕方を考えてみたいと思います。

回答ありがとうございました。

お礼日時:2011/12/25 23:43

>36進数から10進数にする関数


一発では式が複雑になるので
16進数の文字列を1桁1セルに分解する
その各文字をVLOOKUP関数で数値化する。
SUMPRODUCT関数で各桁の対応ウエイトを掛けあわせて足すと10進数になる。
例データ
A1:G2
12hd131721ーー49873
ーー1361296466561679616
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列に
11
22
33
44
55
66
77
88
99
a10
b11
c12
d13
・・・
のような対応表を作っておく。
H1の式は =SUMPRODUCT(B1:G1,B2:G2)
==
上記でウエイトのセルをシートのB2:G2に作らない場合 
H1の式は
=SUMPRODUCT(B1:G1,{1,36,1296,46656,1679616,60466176})
のようにも(配列で直に)書けます。
B-G列は作業列を使ったことになり、やっていることが判りやすくなると思います。
ただし、どうしても桁数の少ない場合用です。
上記は、十分にはテストして無いので、よく検算・確認して使ってください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

私が対象としている数字が膨大な桁数のため関数で処理するのはとても難しいということがわかりました。

別の処理の仕方を考えてみたいと思います。

回答ありがとうございました。

お礼日時:2011/12/25 23:43

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進をどのように表示するのか決めなければダメですね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

私が対象としている数字が膨大な桁数のため関数で処理するのはとても難しいということがわかりました。

別の処理の仕方を考えてみたいと思います。

回答ありがとうございました。

お礼日時:2011/12/25 23:42

各桁を求めて淡々と並べるだけの作業です。



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)))
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

IF関数を使うとなると対象の桁数がとても膨大なためネストの限界にひっかかってしまいます。
私の言葉が足りず、申し訳ございませんでした。

回答ありがとうございました。

お礼日時:2011/12/25 23:36

標準の関数でできるのはここまで。


http://www.relief.jp/itnote/archives/000925.php

36進数だと外部ツールを使わないとダメだと思います。
http://www.geocities.co.jp/SiliconValley-SanJose …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やはり単発の関数では2,8,10,16進数しかできないみたいですね。
参考URLのツールでは直接入力が出来なく、私が扱う数字が膨大すぎるのでとても効率が良くなかったです・・・。

この点は私の言葉不足で申し訳なく思います。

回答ありがとうございました。

お礼日時:2011/12/25 23:32

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