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

このQ&Aのポイント
  • Excelの時間計算での端数処理についてご質問です。具体的には、セルA1とセルA2の時間を引き算する際に発生する端数の処理について教えてください。
  • また、時間計算を正確に行うための鉄則や回避策についても教えていただきたいです。
  • 皆さんのお知恵をお聞かせください。
回答を見る
  • ベストアンサー

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

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

  • h-g-s
  • お礼率100% (3/3)

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8514/19356)
回答No.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」とだけ書けば済みます。

h-g-s
質問者

お礼

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

その他の回答 (1)

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

微少数誤差は避けられない問題です。 これは Excelが日付と時間をシリアル値で管理していることに起因します。 (1日を1、1週間を7、12時間を0.5、1時間を 1/24 で管理している) 正直、比較を必要とすることがなければ無視できるほど小さい誤差ですので、普段はそこまで気にする必要はありません。 どうしても気になるのでしたら、HOUR関数 や MINUTE関数を使って時分をそれぞれ整数に直した後に計算でしょうか。 または、時間を1440倍して小数点以下を切り捨てたのちに計算を行い、 計算後にもう一度1440で割ってシリアル値に戻すということも検討してはいかがでしょう。 (24時間=1440分)

h-g-s
質問者

お礼

Cupperさん、ありがとうございます。 仰るとおり小さい誤差なので見た目上は全く問題はないのですが、 比較した結果によって処理を変えている(色を付けている)ため、 厳密な比較を必要としています。 時間計算処理を入れるという対応は考えてはいましたが、 なんとか関数だけで対応出来ないものかと考えていました。 1440倍するというのも一つの手ですね! ありがとうございました!

関連するQ&A

  • エクセル2003での時間の引き算

    Excel2003での時間の引き算について質問です。    A   B    C 1 4:00  4:00  1:00 =IF(A1>=B10,A1-B1,C1) の計算をすると####と表示されてしまいます。   =0:00と表示するにはどのようにしたら良いでしょうか? 表示形式はユーザー定義で〔h〕:mmとなっています。 よろしくお願いします。

  • EXCELでの時間計算(引き算)

    EXCELで時間計算をしたいのですが EXCELのセルって時間ではなく時刻しか入らないのでしょうか? 各セルabc・・・に時間(○○:××=○○時間××分 の意)を入れておき X=a+b+c+・・・ と計算したい。 ただしマイナスの時間も有る。 そのまま行うと24時間を過ぎると25時間は01を表示してしました。 時間ではなく時刻なのか? そこで色々試したところ プラスの時間だけなら セル書式設定で表示形式を ユーザー定義の [h]:mm にして 可能でした。 しかしマイナスの数字が入れられませんでした。 (マイナスの時刻と言うモノが存在しないから?) そもそも、セルの書式設定の表示形式のユーザー定義で設定できる形式って ヘルプかどこかに全部載っていますでしょうか? 人からもらったEXCEL表に たまに見たことも無い書式設定が書いてあることがあり 「そこで初めて知る」見たいなものがありましたので・・・ よろしくお願いいたします。 

  • エクセルの計算

    エクセルで、セルに 1.9999、3.9999、2.9999と入力、隣にオートサムで結果が8.9997 同じように下の段に 2.7896、4.5678、1.111と入力、隣にオートサムで結果が8.4685 とします。 このとき、オートサムした結果同士を引き算します。 8.9997-8.4685となります。この結果を小数点を 何十位までも表示すると、 0.5311999・・・・・と表示されます。 小数点第4位まで同士の引き算なのに、 どうして、それより下の桁が表示されるのでしょうか・・??

  • 時間の引き算

    例えば 開始時刻をセルA1に「1100」、終了時刻をセルA2に「1335」と入力して、引き算の計算式をセルA3に入れてみて、A3の表示が「2:35」と表示させるにはどうしたらいいのでしょうか? できればA1も「11:00」A2も「13:35」と表示されるようにしたいです。

  • excelで時間の引き算でマイナス表示にしたい

    残業時間の計算をしたいのです。 時刻部分の書式設定は「時刻」(でしたか?自宅PCにexcelがなく確認できず) うろ覚えなので、突っ込みはご容赦ください。 ともかく時間の引き算でマイナスを表示できたらよいのです。 先月 5:00:00 今月 3:00:00 引き算2:00:00 これは単純に引き算したらokです。 先月 3:00:00 今月 5:00:00    -2:00:00 としたいのですが(マイナスじゃなくて△でもよい) エクセル上では、時刻の引き算で負の数かセルの幅より大きい数は####になりますよね。 今月は、先月より残業減ったね/増えたね という表を作りたいので、 マイナスはマイナスで表示させたいです。 そういう計算式、関数は組み立てれませんでしょうか?

  • エクセルで時間計算

    エクセルで時間計算をしているのですが A1セルに開始時刻  B1セルに終了時刻  C1セルは作業時間   9:00         4:00           7:00 このような表を作っています 「C1」には(B1+12:00)マイナス「A1」と数式があるのですが 「B1」に入る時刻が午後でなく午前11:00だと 「C1」の数式のままでは (11:00+12:00)- 9:00 で 14:00 となってしまいます 「B1」には24時間形式で午後4:00を16:00と入力すればよいのですが 24時間形式を使わず9:00マイナス4:00を正しく計算するには どのような数式にすればよいのでしょうか IF文を使うのかなとも思うのですが 見当がつきません。宜しくお願いいたします。

  • EXCELで経過時間計算および作図

    実験データをEXCELで計算させ、結果を作図する場合なのですが、 (1)経過時間計算:入力として測定した時間をセルの書式指定で「日付、2006/6/2 16:20」と言った形式を指定したセルに入力し、経過時間を引き算し、その結果をセルの書式指定「時刻 13:30」とすると、経過時間が24時間以内であれば良いのですが、それ以上の時間では24進法で区切られてしまいます。25:00とか100:00時間と言った経過時間を表示させるのはどうしたらよいでしょうか? (2)作図:経過時間を横軸にして、結果を縦軸として作図したところ、横軸がやっぱり24進法で区切られます。これも25:00とか100:00時間と言った経過時間を表示させるのはどうしたらよいでしょうか?

  • エクセルでの時間の計算

    お世話になります。 エクセルで時間の計算をしています。 ある時間、例えば2:00を0:15で割ると、 シリアル値では8.0000...で割り切れます。 小数点以下が時間になるので、時間で表現すると0:00です。 ところが、19:00引く17:00をすると2:00になりますが、 これをイコールで別のセル(例えばA1)に表示させ、 さらに別のセルで、mod(A1,time(0,15,0))にすると割り切れず、0:15となって余りがでます。 仮にA1/time(0,15,0)とすると、シリアル値は8で割り切れます。 なぜでしょうか? やりたいのは、時間計算した結果が15分単位になっているかどうかを判別したのです。 時間計算していない2:00を0:15で割るとシリアル値では少数以下がゼロとなって 割り切れるからOKとなるのに、 時間計算された2:00をtime(0,15,0)で割ると0:15になってしまいます。 これがもし30分単位のtime(0,30,0)だと、時間計算されたセルの2:00でも 少数以下がちゃんとゼロになってくれます。(modを使った余りの計算) また、この他にもなにか15分単位になっているかを判別する方法は有るでしょうか? intをつかって時間-int時間で余りが出ないかで判別等もやってみましたが どうもうまくいきません。 どうかご教授下さい。m(_ _)m

  • エクセルで時間の引き算

    エクセルで時間の引き算をするにはどうすれば良いのでしょうか? 終了時刻から開始時刻を引いた数字を工数に表示したいです。 引いた結果が30分なら0.5のようにしたいです。 又、開始時刻等を編集しようとすると 表示では2010/1/18 16:30なのに2010/1/18 16:30:00とでてしまいます。 この秒を消すことはできないのでしょうか? エクセルデータ   A(開始時刻)  B(終了時刻)  C(工数) 1  2010/1/18 9:00  2010/1/18 10:00  1.0 2  2010/1/18 10:00  2010/1/18 12:00  2.0

  • エクセルの引き算で・・・

    こんにちは。 エクセルで引き算をするとき、 結果がマイナスである場合は、全て 計算結果を0と表示するには どうすればいいのでしょうか? (例えば、34-45=-11ですが、  この結果を0と表示させたいのです。  結果がプラスの場合は、その値を正しく  表示させたいです。     45-34=11  この場合は11と表示) よろしくお願いします。

専門家に質問してみよう