━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆◆◆◆ エクセルの限界に挑む ◆◆◆◆
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
先月、ある会員さんからこんな質問を受けました。
「エクセルのセルの中に16桁以上の数字を入れるのはどうしたらいいのか」
という質問です。
-----------------------------------
エクセルの有効桁は15桁まで
-----------------------------------
エクセルの1つのセルに数字を以下のように入力してみます。
「12345678901234567890」
そうすると、
「123457E+19」と表示されます。
そこで、このセルを右クリックして、「セルの書式設定」を選択し、
表示形式を「数値」に変更して、OKボタンを押します。
そうすると、セルの中の数値は、
「12345678901234500000」
と表示されます。
ここで、最後の5つの数字がすべてゼロになっていることに気づきます。
つまり、「エクセルの有効数字は15桁まで」という限界にぶつかるわけです。
これは、エクセル2003でもエクセル2007でも同様です。
このことは、エクセルは日常生活レベルの計算は問題ないが、宇宙の計算
や複雑な数学計算には向かないということなんです。
残念ながら、VBA上での計算や表示もこの15桁の制約の中で行われており、
VBAでプログラムを書けば、有効数字15桁以上の計算が可能になるというわけ
ではありません。
----------------------------
アクセサリの電卓で試す
----------------------------
それでは、パソコンに付属している電卓ソフトではどうでしょう。
電卓ソフトを起動して、数字を入力していくと、最大桁数は以下のように
なりました。
「12345678901234567890123456789012」
つまり、電卓では32桁までの有効数字を扱えるようです。
エクセルにしても、電卓にしても有効桁数以上の計算ができないというわけ
ではないのですが、有効数字より大きい桁数で計算を何度も行うと、本当の
計算値とのずれが生じてくることが考えられます。
----------------------------------------------
有効数字を自分で決められる電卓フリーソフト
----------------------------------------------
どうしても、長い桁の計算で、正確な値が知りたいという方は、
フリーソフト「多倍長電卓LM」を使ってください。
http://www.vector.co.jp/soft/win95/personal/se242555.html
上記のアドレスからダウンロード可能です。
圧縮ファイルを解凍すると、その中に「lm.exe」というプログラムがあるの
でそれをダブルクリックして起動します。
画面が出てきたら、一番上の入力欄に
「123456789012345*123456789012345」などと入力してEnterキーを押すと
下の表示部分に計算結果が表示されます。
「111^9」は111の9乗の計算ができます。
「SQRT(2)」は2のルートを計算できます。
「pi」でパイの値がでます。
有効数字については、メニューの「オプション」の「設定」から自分の
希望する有効桁数を設定可能です。(メモリの許す限りの桁数が可能)
------------------------------------------
エクセルで有効数字以上の計算をするには
------------------------------------------
それでは、エクセルで有効数字以上の計算をするにはどうすればいいので
しょうか?
答えは、長い数字を短い数字のあつまりとして計算すればいいのです。
単純にするために、以下のような計算を考えてみましょう。
(その1) 11×11 の計算を考える。(2桁)
11
×11
----------
11
11
----------
121
(その2) 1111×11の計算を考える。(3桁)
1111
× 11
------------
1111
1111
------------
12221
(その3) 1111×1111の計算を考える。(4桁)
1111
×1111
------------
1111
1111
1111
1111
----------------
1234321
(その4) 11111111×11111111の計算を考える。(8桁)
11111111
×11111111
--------------------
11111111
11111111
11111111
11111111
11111111
11111111
11111111
11111111
--------------------------------
123456787654321
(その5) 1111111111×1111111111(10桁)を考える。
1111111111
×1111111111
------------------------
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
----------------------------------------
1234567900987654321
(その6)4桁ずつに分けて10桁の掛け算を計算する。
※ 「・」は4桁どうしの区切りを意味しています。
※ その1〜3を参照してください。
11・1111・1111
× 1111
----------------------------
123・4321
123・4321
1・2221
----------------------------------------
1つ目の合計 1・2344・4444・4321
---------------------------------------------------------------------
11・1111・1111
× 1111
----------------------------
123・4321
123・4321
1・2221
--------------------------------------
2つ目の合計 1・2344・4444・4321
---------------------------------------------------------------------
11・1111・1111
×11
----------------------------
1・2221
1・2221・
121・
--------------------------------------
3つ目の合計 122・2222・2221
---------------------------------------------------------------------
1つ目の合計 1・2344・4444・4321
2つ目の合計 1・2344・4444・4321
3つ目の合計 122・2222・2221
--------------------------------------------------
123・4567・9009・8765・4321
それでは説明しましょう。
長い数字を計算する場合、4桁ずつに数字を区切ります。
それぞれの4桁どうしが、総当たり戦で掛け算されると考えればいいわけです。
4a4b4c×4d4e4fという計算をする場合、以下の表のようにセルを組みます
┌────┬────┬────┐
│ (4a) │ (4b) │ (4c) │
─┬────┬────┼────┼────┼────┼────┐
│ │ │ 4a*4f │ 4b*4f │ 4c*4f │ (4f) │
─┼────┼────┼────┼────┼────┼────┤
│ │ 4a*4e │ 4b*4e │ 4c*4e │ │ (4e) │
─┼────┼────┼────┼────┼────┼────┤
│ 4a*4d │ 4b*4d │ 4c*4d │ │ │ (4d) │
─┼────┼────┼────┼────┼────┼────┘
↓ ↓ ↓ ↓ ↓
足し算 足し算 足し算 足し算 足し算
↓ ↓ ↓ ↓ ↓
┌───────────────────────┐
│ 4桁を超えたものは、上の桁に繰り上げる │
└───────────────────────┘
↓
結果は4桁ずつセルの中に表示させる
↓ ↓ ↓ ↓ ↓
┌────┬────┬────┬────┬────┐
│ │ │ │ │ │
└────┴────┴────┴────┴────┘
以上が、4桁づつに分けてエクセルで計算する方法です。
------------------------------------------
4桁を超えたものを上の桁に渡すためには
------------------------------------------
上記の計算で足し算をしたものが4桁より大きくなっていたときに、
5桁目以上を4桁目までと分けて、5桁目以上は上の区画に足し算をする
という操作が必要になります。
このような時に有効な関数について説明します。
例えば、足し算した合計が、「34567」になったとします。
このような場合、以下の計算をします。
上の桁に持ってゆく数=INT(34567/10000)=3
現在の桁に残す数=MOD(34567/10000)=4567
※INTは小数点以下を切り捨てる関数です。
※MODは剰余を出す関数なので、割り算のあまりとなります。
-------------------------------------
最後に別々のセルの値をつなげるには
-------------------------------------
異なるセルどうしの数字をまとめて1つのセルに表示する方法があります。
もちろん、数字としてつなげてしまうと、再び有効数字15桁の呪縛がありま
すので、この場合は文字列としてつなげるということが必要です。
もし、A3,B3,C3,D3,E3のセルに4桁の数字がある場合には、以下のような
関数で文字列を連結します。
=CONCATENATE(A3,B3,C3,D3,E3)
このコンカテナテ関数は、すべて文字列として連結しますので、数字が長く
なっても大丈夫です。
2008/7/27 第186号 反・資格宣言 copyright(c)NokoTech Lab. All Right Reserved.