次の方法で共有

時間計算 答えが違う

Anonymous
2012-02-21T03:43:13+00:00

お世話になります。

モコ太郎といいます。

Win XP HOME 仕様

オフィス2003 エクセルで

就業時間管理のため、5分単位の時間に揃えようとしたところ

20分の単位が25分に関数計算されるものがありました。

とりあえず20分の計算になるものを7つ並べて確認したところ

不規則に25分になるものがあるようです。(他の数字では確認が取れていません)

念のため、ビスタ、オフィス2007の組み合わせで確認しても

同じ結果がでました。

説明が下手なので下記表に数字と数式を記入しましたので

この現象をご存じの方がいましたら、教えていただければと思います。

開始時間 終了時間 稼働時間 時間切上げ作業
1 14:00 14:20 0:20 0:20
2 12:00 12:20 0:20 0:25 ???
3 14:55 15:15 0:20 0:20
4 14:03 14:23 0:20 0:20
5 13:43 14:03 0:20 0:25 ???
6 8:07 8:27 0:20 0:20
7 0:43 1:03 0:20 0:20
7番、入力の式 =RC[-2]-RC[-3] =CEILING(RC[1],TIME(0,5,0))
Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2012-02-21T04:24:00+00:00

こんにちは。

時刻(時間)シリアル値は、実数の 小数 部分で表現されます。

小数同士の演算には小数誤差が含まれます(下記参照)。

日経PC21 エクセル「演算誤差」対策講座

http://pc.nikkeibp.co.jp/pc21/special/gosa/

提示の 0:25 になるデータ(終了 - 開始)には、その小数誤差によって、

ピッタリ 0:20 の値よりも、ほんの少し大きな値が入っています。

稼働時間セルの表示形式を「数値 小数20桁」にしてみると判りますよ。

手入力した 0:20 ⇒ 0.01388888888888890000

[12:20 - 12:00 ]  ⇒ 0.01388888888888900000

一旦、文字列編集を通せば誤差を取り除けます。

=CEILING(TEXT(RC[1],"hh:mm")*1,TIME(0,5,0))

*1 は、 時間文字列 を数値演算の中に組み入れる事でエクセルに

「時間文字列⇒シリアル値」変換させる役目をします(結果が変わらないように、掛けるのは 1)。

変換関数を使って下記でも同じです。

=CEILING(VALUE(TEXT(RC[1],"hh:mm")),TIME(0,5,0))

この回答は役に立ちましたか?

3 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2012-02-21T05:20:38+00:00

    簡単明瞭な回答ありがとうございます。

    時間と実数?の関係って深いですね。

    Ceilingの認識がありませんでした。

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

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2012-02-21T05:14:17+00:00

    早速の返信ありがとうございます。

    20桁まで確認すればあらわれたのですね^_^;

    丁寧な解説と対処ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2012-02-21T04:23:06+00:00

    浮動小数点の計算につき物の計算誤差です。

    5分によるCeilingということは、0.0034722222・・・・

    により計算されているわけで、時間の差/Time(0,5,0) は12:00の時は4.0よりわずかに大きくなり、それ以外の場合は4.0よりわずかに小さくなっているようです。

    対象療法ですが、=RC[-2]-RC[-3] を =RC[-2]-RC[-3]-1E-13 等にしてみてください。 -Time(0,0,1) で一秒引いてやっても良いかと思います。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません