Top小ネタ色々Excelで有効数字

Excelで有効数字

2010年1月23日


はじめに

その頃、私は仕事でExcelで有効数字を揃えるという必要に迫られていた。
Excelを使っている人は分かると思うが、「小数点以下●桁」という表示の設定はできても
「有効数字●桁」という設定は存在しないのだ。
結果、手動で小数点以下の桁数を調節するという作業を行っていた。

「面倒くさい、実に面倒くさい。これを自動化するアドインは無いものか?」
と、いう事でちょっと探してみたが見つからなかった。そこで、
「だったら自分で作ればいい」
という事で作ってみた。

これ以降のページではその制作の過程を実際のスクリプトを示しながら、いつもながらの無責任な文体で
解説してみたいと思う。
アドインを作ってみたいという人へのささやかな参考資料となればいいかな、と(自分の為の覚書も兼ねています)。
全くの素人の方は分からないかもしれません。申し訳ないです。
アドインに限らず、プログラミングをしてみたいという人は読んでみたら思考の過程が分かって
面白いかもしれません。

そんなもん、読みたくないという人はこちらからダウンロードしていってください。
アドインのインストールについては、ヘルプで「アドインの登録」などで検索すると出てくるので
各自でお願いします。
動作確認は
Windows:Excel 2007
Macintosh:Excel 2004
で行っています。
2007ではリボンのアドインタブ内に、2004ではツールバーが出ますので、セルを選択してボタンを叩けば終了です。
選択したセルの中に、空白のセルや文字のセルがあっても問題ありません。

エラーなどの報告は大歓迎です。環境とどんな数字を選択してボタンを押したらどんなエラーが出たのかを
教えていただけると助かります。


ここから本題です。読みたくない人は、この先を読む必要はありません。

1.仕様について

上に書いたように、仕事で使おうと思っていたので、最初の仕様はごくごく単純なものだった。
必要な機能は

最後のものは、仕事の周りの状況との関係で必要だったので、地味だけど絶対に必要な条件。
書式をいじっていいならもっと簡単だったかもしれない。でも、いろいろな場面を想定すると
書式を変えない方が汎用性があるでしょ?

有効数字をある桁数にする為の数式はすでに分かっていた。

Excelで
=ROUND(「数字」,「有効数字の桁数-1」-INT(LOG10(数字)))
とすればいいのだ。
それぞれの詳しい説明はexcelのヘルプなどに頼って頂くとして、
簡単に書くと

ROUND: 数字を指定した小数点以下の桁数が残るように四捨五入する
INT: その数を越えない最大の整数を返す。正の数なら小数部分を切り捨てたもの
LOG10: 指定した数の常用対数を返す

つまり、LOG10で何桁の数か(もしくは、小数点以下第何位まで0か)を調べて、
INTで整数に直して、その数字を使って元々の数を四捨五入しているわけだ。

INT(LOG10(数字))は慣れると分かるのだが、
数字INT(LOG10(数字))
12343
4512
511
40
0.8-1
0.036-2
0.005314-3
のように、1以上の数であれば実際の桁数-1が
小数であれば、0以外の数が初めて出てくる小数点以下の桁数がマイナス付きで出てくる。
ROUNDの桁数の指定のところに負の数を入れると、-1だと1の位、-2だと10の位、-3だと・・・を
四捨五入する。つまり、
=ROUND(「数字」,-INT(LOG10(数字)))
とすると、1桁だけ残る事になる。

有効数字を考えると、その桁数の数字を残すように四捨五入するので、有効数字の桁数-1だけ
四捨五入する位を下にずらせばいいのだ。こう考えて出てくるのが
=ROUND(「数字」,「有効数字の桁数-1」-INT(LOG10(数字)))
という式である。

世間的には数字の桁数を求めるのに、バイト数を調べるLENを使う人もいるようですが、
この場合は小数には対応できないので、使いませんでした。

さぁ、方針は決まったので、後はガリガリとプログラムを書くだけである。
ここから先は、Visual Basicのヘルプとのにらめっこになる。
このにらめっこと頻発するエラーに耐えられる忍耐力こそが、
アドインを作る上で最も重要なものかもしれない。


[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14]

小ネタTOP | NEXT>>