重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Excelの時間計算(引き算)の端数処理について教えて下さい。

以下Excelの内容です
 セルA1:22:00
 セルA2:22:30
 セルA3:=A2-A1
  ※表示形式は"[h]:mm"です。
上記の場合、A3は「0:30」となると思います。
ここまでは良いと思いますが、同じ表示形式でセルA4に「0:30」と手入力し、
セルA3とセルA4をif文で比較すると、一致しない結果となってしまいます。
セルA5:=if(A3=A4,TRUE,FALSE) ⇒結果はFALSE

数式の検証で確認したところ、
 セルA3=0.0208333...334
 セルA4=0.0208333...333
と、確かに小数点第16位が異なっています。
もっと追いかけるとセルA2の「22:30」に端数が発生しており、整数のセルA1と無限小数のセルA2を引き算を行ったため、丸め誤差によりこのような現象となっているようです。

時間の引き算を行う場合は、時分秒毎に計算し直さなければならないのでしょうか?
または、TEXTで変換やtimevalu等を利用する等の回避策は有るのでしょうか?
時間計算を行う際の鉄則などありましたら、ご教授頂ければと思います。

皆様のお知恵をおかしくださいm(_ _)m

A 回答 (2件)

・方法1


A3とA4セルをTEXT関数で文字列にしてから比較

セルA1:22:00
セルA2:22:30
セルA3:=A2-A1
セルA4:0:30
セルA5:=TEXT(A3,"hh:mm")=TEXT(A4,"hh:mm")

・方法2
「A2-A1」を時刻シリアル値の「0:30」と等しい値にする

セルA1:22:00
セルA2:22:30
セルA3:=VALUE(TEXT(A2-A1),"hh:mm")
セルA4:0:30
セルA5:=A3=A4

・方法3
A3とA4の差が誤差範囲内かどうか調べる

セルA1:22:00
セルA2:22:30
セルA3:=A2-A1
セルA4:0:30
セルA5:=ABS(A3-A4)<1e-16

以下蛇足。

「=IF(条件式,TRUE,FALSE)」と言う式は無駄なので書いてはいけません。

「=IF(A3=12345,TRUE,FALSE)」は「=A3=12345」とだけ書けば済みます。

同様に「=IF(A3<12345,TRUE,FALSE)」は「=A3<12345」とだけ書けば済みます。
    • good
    • 0
この回答へのお礼

chie65535さん、ありがとうございます。
やはり、文字列比較かシリアル値による処理がシンプルな対応ってことですね。
後は誤差が発生しないよう整数化するなど処理を入れるしかないでしょうかね。
比較処理ではチェックを行いたいため、比較処理にロジックを入れる方法3がよさそうですね。

ありがとうございました。

(条件式には実際は処理を書いているので分かり易く(?)書かせていただきました。)

お礼日時:2010/05/07 13:49

微少数誤差は避けられない問題です。



これは Excelが日付と時間をシリアル値で管理していることに起因します。
(1日を1、1週間を7、12時間を0.5、1時間を 1/24 で管理している)
正直、比較を必要とすることがなければ無視できるほど小さい誤差ですので、普段はそこまで気にする必要はありません。

どうしても気になるのでしたら、HOUR関数 や MINUTE関数を使って時分をそれぞれ整数に直した後に計算でしょうか。
または、時間を1440倍して小数点以下を切り捨てたのちに計算を行い、
計算後にもう一度1440で割ってシリアル値に戻すということも検討してはいかがでしょう。
(24時間=1440分)
    • good
    • 0
この回答へのお礼

Cupperさん、ありがとうございます。

仰るとおり小さい誤差なので見た目上は全く問題はないのですが、
比較した結果によって処理を変えている(色を付けている)ため、
厳密な比較を必要としています。

時間計算処理を入れるという対応は考えてはいましたが、
なんとか関数だけで対応出来ないものかと考えていました。
1440倍するというのも一つの手ですね!

ありがとうございました!

お礼日時:2010/05/07 13:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!