2進数を10進数に変換するBIN2DEC()関数の上限

関数:BIN2DEC、IF、LEN、MID
・関数BIN2DEC(binary to decimal)
・書式=BIN2DEC(2進数)
・内容BIN2DEC 関数を使用して2進数を10進数に変換します。
使用例
=BIN2DEC(11111)
=31

=BIN2DEC(10101)
=21

2進数を10進数に変換するBIN2DEC()関数は上限がります
=BIN2DEC(111111111)(←1が9個
=511

たった??

はい。

111111111+1=1000000000(←10桁になってしまう

10進数の「511」が限界です
なぜ9桁なのか?
どうせならエクセルで表示できる15桁まで対応してほしい

そうだ!足りない分は作ろう

セルH2)に「111111111111111」2進数を入れます



111111111111111と入力すると1.11111E+14となります
111111111111111と表示させるには
セルの書式設定を数式にしておく必要があります

まずは文字数を取得
=LEN(H2)

9文字以下をBIN2DEC関数を使う
=IF(LEN(H2)<10,BIN2DEC(H2),BIN2DEC(MID(H2,LEN(H2)-8,9)))
=MID(H2,LEN(H2)-8,9)

10文字目が1の場合512を足す
=IF(LEN(H2)>9,IF(MID(H2,LEN(H2)-9,1)="1","512","0"),"0")

11文字目が1の場合1024を足す
=IF(LEN(H2)>10,IF(MID(H2,LEN(H2)-10,1)="1","1024","0"),"0")

12文字目が1の場合2048を足す
=IF(LEN(H2)>11,IF(MID(H2,LEN(H2)-11,1)="1","2048","0"),"0")

13文字目が1の場合4096を足す
=IF(LEN(H2)>12,IF(MID(H2,LEN(H2)-12,1)="1","4096","0"),"0")

14文字目が1の場合8192を足す
=IF(LEN(H2)>13,IF(MID(H2,LEN(H2)-13,1)="1","8192","0"),"0")

15文字目が1の場合16384を足す
=IF(LEN(H2)>14,IF(MID(H2,LEN(H2)-14,1)="1","16384","0"),"0")

15文字以上はエクセルでは丸められてしまうので無駄

512から倍々と増える数値はPOWER関数が使えますが文字数が増えます
=POWER(2,9) 512
=POWER(2,10) 1024
=POWER(2,11) 2048
=POWER(2,13) 4096
=POWER(2,14) 8192
=POWER(2,15) 16384

上記の式を全部足します

390文字あります(なげぇよ)

2進数15桁まで計算可能です

2 進数 111111111111111(←1が15個
10進数 32767 まで対応

気が向いたら
10進数→2進数(DEC2BIN関数)もチャレンジしてみたいと思います
追記:チャレンジしてみました→DEC2BIN()関数の上限

以上 2進数を10進数に変換するBIN2DEC()関数の上限でした



ここから下は暇つぶし程度にご覧ください

おまけ
実は上記の方法は2進数を2進数として扱っていないので
数値として扱える15桁を超えても
32ビットの限界である
11111111111111111111111111111111(←1が32個)
を超えても計算できます

セルH2は数値として表示するのは無理なので
セルの書式設定で「文字列」にしておく必要があります

全部1ならばREPT関数を使うことができます
例)=REPT(1,32) ←1を32回繰り返し
結果:11111111111111111111111111111111
結果は文字列として表示されます

10進数が15桁まではできることになります
10進数が15桁になるのは49桁目562949953421311になります

上記から16桁以上を取得します

16文字目
=IF(LEN(H2)>15,IF(MID(H2,LEN(H2)-15,1)="1","32768","0"),"0")
17文字目
=IF(LEN(H2)>16,IF(MID(H2,LEN(H2)-16,1)="1","65536","0"),"0")
18文字目
=IF(LEN(H2)>17,IF(MID(H2,LEN(H2)-17,1)="1","131072","0"),"0")
19文字目
=IF(LEN(H2)>18,IF(MID(H2,LEN(H2)-18,1)="1","262144","0"),"0")
20文字目
=IF(LEN(H2)>19,IF(MID(H2,LEN(H2)-19,1)="1","524288","0"),"0")
21文字目
=IF(LEN(H2)>20,IF(MID(H2,LEN(H2)-20,1)="1","1048576","0"),"0")
22文字目
=IF(LEN(H2)>21,IF(MID(H2,LEN(H2)-21,1)="1","2097152","0"),"0")
23文字目
=IF(LEN(H2)>22,IF(MID(H2,LEN(H2)-22,1)="1","4194304","0"),"0")
24文字目
=IF(LEN(H2)>23,IF(MID(H2,LEN(H2)-23,1)="1","8388608","0"),"0")
25文字目
=IF(LEN(H2)>24,IF(MID(H2,LEN(H2)-24,1)="1","16777216","0"),"0")
26文字目
=IF(LEN(H2)>25,IF(MID(H2,LEN(H2)-25,1)="1","33554432","0"),"0")
27文字目
=IF(LEN(H2)>26,IF(MID(H2,LEN(H2)-26,1)="1","67108864","0"),"0")
28文字目
=IF(LEN(H2)>27,IF(MID(H2,LEN(H2)-27,1)="1","134217728","0"),"0")
29文字目
=IF(LEN(H2)>28,IF(MID(H2,LEN(H2)-28,1)="1","268435456","0"),"0")
30文字目
=IF(LEN(H2)>29,IF(MID(H2,LEN(H2)-29,1)="1","536870912","0"),"0")

倍々と増える数値が次は「"1073741824"」になります
「"1073741824"」←12文字を超えるので文字数を少なくするため
「POWER(2,30)」←11文字のPOWER関数を使います

31文字目
=IF(LEN(H2)>30,IF(MID(H2,LEN(H2)-30,1)="1",POWER(2,30),"0"),"0")
32文字目
=IF(LEN(H2)>31,IF(MID(H2,LEN(H2)-31,1)="1",POWER(2,31),"0"),"0")
33文字目
=IF(LEN(H2)>32,IF(MID(H2,LEN(H2)-32,1)="1",POWER(2,32),"0"),"0")
34文字目
=IF(LEN(H2)>33,IF(MID(H2,LEN(H2)-33,1)="1",POWER(2,33),"0"),"0")
35文字目
=IF(LEN(H2)>34,IF(MID(H2,LEN(H2)-34,1)="1",POWER(2,34),"0"),"0")
36文字目
=IF(LEN(H2)>35,IF(MID(H2,LEN(H2)-35,1)="1",POWER(2,35),"0"),"0")
37文字目
=IF(LEN(H2)>36,IF(MID(H2,LEN(H2)-36,1)="1",POWER(2,36),"0"),"0")
38文字目
=IF(LEN(H2)>37,IF(MID(H2,LEN(H2)-37,1)="1",POWER(2,37),"0"),"0")
39文字目
=IF(LEN(H2)>38,IF(MID(H2,LEN(H2)-38,1)="1",POWER(2,38),"0"),"0")
40文字目
=IF(LEN(H2)>39,IF(MID(H2,LEN(H2)-39,1)="1",POWER(2,39),"0"),"0")
41文字目
=IF(LEN(H2)>40,IF(MID(H2,LEN(H2)-40,1)="1",POWER(2,40),"0"),"0")
42文字目
=IF(LEN(H2)>41,IF(MID(H2,LEN(H2)-41,1)="1",POWER(2,41),"0"),"0")
43文字目
=IF(LEN(H2)>42,IF(MID(H2,LEN(H2)-42,1)="1",POWER(2,42),"0"),"0")
44文字目
=IF(LEN(H2)>43,IF(MID(H2,LEN(H2)-43,1)="1",POWER(2,43),"0"),"0")
45文字目
=IF(LEN(H2)>44,IF(MID(H2,LEN(H2)-44,1)="1",POWER(2,44),"0"),"0")
46文字目
=IF(LEN(H2)>45,IF(MID(H2,LEN(H2)-45,1)="1",POWER(2,45),"0"),"0")
47文字目
=IF(LEN(H2)>46,IF(MID(H2,LEN(H2)-46,1)="1",POWER(2,46),"0"),"0")
48文字目
=IF(LEN(H2)>47,IF(MID(H2,LEN(H2)-47,1)="1",POWER(2,47),"0"),"0")
49文字目
=IF(LEN(H2)>48,IF(MID(H2,LEN(H2)-48,1)="1",POWER(2,48),"0"),"0")
50文字目
=IF(LEN(H2)>49,IF(MID(H2,LEN(H2)-49,1)="1",POWER(2,49),"0"),"0")
全部足します


2620文字です(・・・・・・・)

ちなみにエクセルでは1セルの中に32767文字入れられますが
セルに表示されるのは1024文字までで
それ以上は数式バーでしか確認できません

すべて1の場合2進数49桁で
1111111111111111111111111111111111111111111111111
10進数は
562949953421311
になります
2進数を10進数に変換するのであれば49桁が上限です

10進数にまだ余裕があります
10進数15桁の限界
999999999999999 までで
2進数は50桁
11100011010111111010100100110001100111111111111111
になります

上記を実行して999999999999999を超えてもエラーにはなりません
15桁以上は最後の数字が丸められるので0になります
正しい数字ではなくなるのでエクセルでは

10進数の15桁
999999999999999(999兆9999億9999万9999)
2進数50桁
11100011010111111010100100110001100111111111111111
が限界です

以上 2進数を10進数に変換する 暇人でした

2進数を10進数にするのは999999999999999は無理でした
DEC2BIN()関数の上限


他のN進数変換は
BIN2DEC 2進数(BIN)から10進数(DEC)
BIN2HEX 2進数(BIN)から16進数(HEX)
DEC2BIN 10進数(DEC)から2進数(BIN)
DEC2OCT 10進数(DEC)から 8進数(OCT)

2進数(BIN)8進数(OCT)10進数(DEC)16進数(HEX)として
おそらく
BIN to OCT で BIN2DEC 2進数から8進数だと思われます

2進数(BIN)はバイナリ (binary) の bin
8進数(OCT)はオクタル (octal) の oct
10進数(DEC)はデシマル (decimal) の dec
16進数(HEX)はヘキサデシマル (hexadecimal) の hex

16進数(HEX)を10進数(DEC)にしたい場合
HEX to DEC なので関数は HEX2DECになります
=HEX2DEC(100) =256
=HEX2DEC("FF") =256
※16進数がアルファベットの場合「"」ではさみます


ISERRORとIFERRORTOP
(C) 2001-2018 Digital World