こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルでの時間の計算

お世話になります。

エクセルで時間の計算をしています。
ある時間、例えば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

投稿日時 - 2011-04-02 22:05:36

QNo.6639977

すぐに回答ほしいです

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

minute関数で「分」の部分を数値として取り出す。

mod(minute(A1),15)

投稿日時 - 2011-04-02 22:33:14

お礼

回答ありがとうございます。

なんと! minuteを使って数値として取り出す。
単純明快、ちょっとの工夫でこんなに楽にできるとは。

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

投稿日時 - 2011-04-03 01:30:13

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

浮動小数点誤差によって,しばしばそういう問題が起こります。

たとえば
=MOD(ROUND(A1/"0:1",0),15)
などのようにして,誤差を丸めて計算してみます。



#参考
同じ2時間でも,20:00-18:00の2時間では問題が起こりません。

問題の19:00-17:00の2時間をA1において
=MOD(A1,TIME(0,15,0))-TIME(0,15,0)
という計算式を別に置き,セルの表示形式を標準に変えてみると
-6.93889E-17
という計算結果が出ています。
つまりMOD(A1,TIME(0,15,0))は15:00と表示は出ますが,実際の数値は15分よりもこれだけ僅かに小さい値として(計算誤差のせいで)計算されていることが判ります。


#参考
最新版のExcel2010を使って計算させてみると,もしかすると改善されているかもしれません。

投稿日時 - 2011-04-02 22:30:01

お礼

回答ありがとうございます。

誤差を丸めて計算、2時間を1分で割ってroundですか。
120となって、教えて頂いたようにmodを使ってちゃんと判別できるようになりました。

参考ありがとうございます。
いろいろやってみました。小数点以下をいっぱい表示させて
微妙な誤差があることがわかりました。
結構イラっと悩んでいたんです。

ただ、No2さんのようなminute関数なんてのを使えば単純なようです。
でもエクセルの工夫の仕方勉強になりました。
ご親切、ありがとうございました。

投稿日時 - 2011-04-03 01:28:02

あなたにオススメの質問