かなり前の話になります。私がエクセルを使い始めの頃、タイムカードをエクセルに入力して残業時間を計算しようと考えたことがありました。出勤時刻と退勤時刻を入力するだけで残業時間が簡単に計算できるんではないかと思い、やってみました。
計算式は
残業時間 = 退勤時刻 - 出勤時刻 - 休憩時間 - 所定時間
※ただし、残業時間は15分単位で切り捨てる
切り捨てにはFLOOR関数を使用しました。
残業時間のセルに =FLOOR( 退勤時刻 – 出勤時刻 – 休憩時間 – 所定時間 , “00:15” ) と入力し、出勤時刻や退勤時刻を入力してみたんですが….
出勤時刻など、いろいろな時刻を入力した結果です。
月曜日は計算できていません。残業時間はゼロのはずです。
土曜日にいたっては、残業時間が間違っています。正しくは2時間のはずです。
原因は、「桁落ち」です。
コンピュータ内部では、時刻を少数で管理しているために起きる現象です。
1日は 1
1時間は 1/24 = 0.0416666666…..
1分は 1/24/60 = 0.0006944444…..
無限少数を計算するのですから、「桁落ち」や「誤差」が出るのは当たり前ですね。
では、どうしたら良いのでしょうか。・・・・・・少数の計算をさせなければ良い!
今回は、残業時間の計算ですので、最小単位は分で、秒は扱いません、入力された出勤時間などを全て分単位に変換してから計算することにします。
つまり、出勤時刻などを分に直して計算するのです。
例えば、8時12分であれば492分 ( 8 X 60 + 12 ) と変換します。
水曜日の残業時間を計算してみましょう。
出勤時刻 8時40分 = 520分
退勤時刻 17時57分 = 1077分
休憩時間 1時間 = 60分
所定時間 8時間 = 480分
と、全て分単位に変換して計算式にあてはめると、残業時間は17分となります。
15分単位で切り捨てれば、残業時間は15分となります。
整数の加減算ですので誤差はでませんよね。