• ベストアンサー

FLOOR関数について

FLOOR関数を使って勤務時間を計算しているのですが うまく出来ません。 条件) 10分単位で切り捨てする。 例1) 出社時間:20:00 退社時間:22:00 FLOOR("22:00"-"20:00","0:10") 例2) 出社時間:21:00 退社時間:22:00 FLOOR("22:00"-"21:00","0:10") 例3) 出社時間:21:00 退社時間:22:05 FLOOR("22:05"-"21:00","0:10") 出力結果 例1)2時間 例2)50分 例3)1時間 となります。 いろんな時間で試してみましたが、手計算では1時間になる時だけ 50分と出力されます。 例2)の場合、1時間と出力しないのはなぜでしょうか? [補足] 実際はセルを参照して計算しています

質問者が選んだベストアンサー

  • ベストアンサー
  • aigaion
  • ベストアンサー率47% (287/608)
回答No.1

誤差が原因ですね。 コンピュータの計算はすべて2進数で計算されます。 "22:00"と"21:00"のどちらかが誤差を含むような値に変換されて計算されてしまい。 計算結果が1:00ではなく、0:59:59:59となってしまいFLOOR関数が切り捨てて0:50になってしまったのでしょう。 簡単な解決策としては FLOOR("22:00"-"21:00"+"0:00:05","0:10") として、計算結果に支障が出ない程度に計算結果を調整することです。 誤差は非常に小さいものですので計算結果に支障が出ない程度に小さい結果を加えてやればよいのです。 出勤表ではさすがに10秒以下の単位までは記入しないでしょうからここでは 1秒を加えることで誤差を相殺します。

BlackRain
質問者

お礼

解決策までありがとうございました。 その方法で回避したいと思います。 ありがとうございました。

その他の回答 (2)

  • shintaro-2
  • ベストアンサー率36% (2266/6245)
回答No.3

>いろんな時間で試してみましたが、手計算では1時間になる時だけ 50分と出力されます。 エクセルの仕様な気がします。 ちなみに、10:00出社、11:00退社で50分になりますが そこから両方を10分ずつ遡らせると、 9:50、9:30,9:10,9:00,8:40,8:20,8:10,8:00,7:50出社は1hとなりますが、それ以外は全部50分でした。

BlackRain
質問者

お礼

1時間と出力される場合もあったんですね。 十分テストしたつもりでも甘かったです^^;;

  • aigaion
  • ベストアンサー率47% (287/608)
回答No.2

書くのを忘れましたが これはExcelのバグではなく仕様ですのでこのことを知らずに起こりえた 何らかの不利益の責任はExcelを作ったMicrosoftではなく 知らずに表を制作した人にあるということになります。 たまに勘違いしている人がいるのでいちおう書いておきます。

関連するQ&A