2016年1月17日日曜日

Excelの[1]秒は 0.00001157407 ? の怪

Excelの[1]秒は 0.00001157407   の怪






この数字って何だかわかりますか? この数字、Excelでいうところの[1秒]なんですよね。 

ご承知の通り、Excelの日付や時刻は、1900/1/1を[1]としたシリアル値で管理されています。
シリアル値は小数で表されますが、
 ☆日付はシリアル値の整数部分に割り当てられ、
 ☆時刻はシリアル値の小数部分に割り当てられています








日付のシリアル値は[1~2,958,465]の範囲で、それに対応する日付は[1900/1/1~9999/12/31]となります。
 ①シリアル値が負(マイナス)であったり[2,958,466]以上の場合は、エラーとなります。
 ②シリアル値がゼロ[0]の場合、何故かエラーにはならず[1900/1/0]とあり得ない日付になってしまいます。

時刻のシリアル値は、[0~0.99…]の範囲で、
それに対応する時刻は[00:00:00(AM12:00:00)~23:59:59(PM11:59:59))となります。
1日は、60秒/分×60分/時間×24時間/日=86400秒/日なので、[1]秒に相当するシリアル値は、
逆数をとると[1/86400=0.00001157407…] となります。
(=TIME()関数で[00:00:01]をシリアル値に変換しても[0.00001157407…]となります)

しかし、よく調べてみるとExcelの[1]秒に相当するシリアル値は[0.00001157407…]ピッタリではなく、
どうやら、
0.00001157407±0.00001157407/2 の範囲のシリアル値は全て[1]秒と判定されるようです。
下図を見ていただくとお分かりの通り、シリアル値が0.00000579でも0.00001735でも[1]秒と見なされるということです。
従って、
 0.00000579を[1]秒のつもりで使って2倍しても2秒にはならず1秒のままです。
 0.00001735を[1]秒のつもりで使って2倍すると2秒にはならず3秒となります。
  
 これがExcel  0.00001157407 の怪 です。

 時刻をエクセルで扱う場合には、誤差には細心の注意が必要です。 
覚えておくと役に立つ(?)日付や時刻の入力方法など
・西暦年    例 2016/1/18,2016-1-18 何れでもOK
・和暦年    例 H28.1.18,H28/1/18,H28-1-18 何れでもOK(H:平成,S:昭和,T:大正,M:明治)
・今日の日付 [Ctrl]キー+[;](セミコロン)
・現在の時刻 [Ctrl]キー+[:](コロン)
・24時間以上の時間表示 ユーザー定義で [h]:mm と設定する