エクセルパズル:DEC2BINを使わずに2進数に変換

今日、10進数→2進数変換を2進変換関数のDEC2BINを使わずに1つのセルだけで計算する方法を思いつき、早速書いてみました。



最初に書いた式はコチラです↓

=IF(A1>32768,#NUM!,SUM(IF(MOD(A1,2^ROW(A1:A16))>=2^(ROW(A1:A16)-1),1,0)*10^(ROW(A1:A16)-1)))

セルA1に32768以下の値を入力し
セルB1に上記の式を貼り付けて「Ctrl+Enter」で決定、セルの書式設定→表示形式を数値(桁数0)でOKを押して下さい。
これでA1の2進化された値が表示されるようになると思います。


これは配列数式ってやつを使っています。
DEC2BINで充分だろとも思いますが一応良いとこを探すとしたら、DEC2BINでは512以上の値を入力すると#NUM!とエラーになりますが、これなら32768まで表示可能です。

=IF(A1>32768,#NUM!,SUM(IF(MOD(A1,2^ROW(A1:A16))>=2^(ROW(A1:A16)-1),10^(ROW(A1:A16)-1),0)))

→ 90文字

=IF(A1>32768,#NUM!,SUM(IF(MOD(A1,2^ROW(1:16))>=2^(ROW(1:16)-1),10^(ROW(1:16)-1),0)))

→ 84文字(A1:A16→1:16でマイナス6文字)

=IF(A1>32768,#NUM!,SUM(MOD(INT(A1/2^(ROW(1:16)-1)),2)*10^(ROW(1:16)-1)))

→ 72文字(2番目のif文をMOD関数&INT関数に置き換えでマイナス12文字)

=IF(A1>32768,#NUM!,SUM(MOD(INT(2*A1/2^ROW(1:16)),2)*10^ROW(1:16)/10))

→ 69文字(ROW(1:16)-1→ROW(1:16)でマイナス3文字)

=IF(A1>2^15,0^0,SUM(MOD(INT(2*A1/2^ROW(1:16)),2)*10^ROW(1:16)/10))

→ 66文字(32768→2^15、#NUM!→0^0でマイナス3文字)

=(A1<=2^15)^0*SUM(MOD(INT(2*A1/2^ROW(1:16)),2)*10^ROW(1:16)/10)

→ 63文字(ifを消してマイナス3文字)

とまあこんな感じで現在この63文字が現在思いつく最短式です。
まだ一段くらいイケそうな気がするんで、思いついたらまた追記しときます。


ついでに亜流を。
上記式は配列数式を使っているので、式を入力してから「Ctrl+Shift+Enter」で決定しますが、次の式はそれが不要(つまり普通の式)です。

=(A1<=2^15)^0*SUMPRODUCT(MOD(INT(2*A1/2^ROW(1:16)),2),10^ROW(1:16)/10)

更に書式設定不要版。(文字列を返します)

=TEXT((A1<=2^15)^0*SUMPRODUCT(MOD(INT(2*A1/2^ROW(1:16) ),2),10^ROW(1:16)/10),0)


以上です。よければ使ってみて下さい!


【関連記事】
ファミコンぽいエクセル表示バグ見つけた - Koonies/こりゃいいな!
今まで全然知らなかった、エクセルのセル結合方法 - Koonies/こりゃいいな!
Ctrl+C、Ctrl+Vで超簡単にエクセルのセルの結合を解除する方法 - Koonies/こりゃいいな!
エクセルのツールバーを圧縮して作業効率を上げる方法 - Koonies/こりゃいいな!
「あなたは知ってる?ダブルクリックだけでできるExcelの小技いろいろ」にもう1個 - Koonies/こりゃいいな!