• ベストアンサー

午前0時をまたがっての時刻計算

エクセルにて、一日の出勤、帰着などの時刻を記録し、データー加工していますが午前0時をすぎる日があり、うまく処理できません。 列の項目 入力は、出発時刻、帰着時刻。 計算して表示する列は、出発から帰着までの時間、9:30を業務開始時刻としての就業時間、目標出発時刻7:30より実際の出発時刻のずれ+-、目標帰着時刻22:30より実際の帰着時刻のずれ(分)+-です。 行のほうは、 1ヶ月の日にちごとのレコード、合計、平均、最大、最小です。 レコードには、休日は入力しないのでNULL値になっています。これを0としないことが、平均出すために必要です。 いま、起こってる現象としては、目標との差が30分のはずが1410分と表示されたりしてしまう。 とにかく深夜0時をこえるレコードがあるため、うまくいきません。 平均も夜23時と、深夜1時の平均は真夜中0時となってほしいのに正午になってしまいます。 一番遅い帰着時間の日は、午前2時の日になるべきところが23時59分の日になってしまいます。一番早い帰着時間も同様、午前0時過ぎの日になってしまいます。

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

  • ベストアンサー
  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.2

エクセルの表示形式は、普通に時刻を入力すると、"h:mm"になってしまいます。この場合、24時間、60分、60秒を超える表示はできません。hを[]で囲んで"[h]:mm:ss"と表示形式を変更すると、24時間を超える時間を表示できるようになります。ご質問の件の夜23時と、深夜1時の平均が、真夜中0時(24:00)と表示されるはずです。 詳細は以下のURLなどを参照してみてください。

参考URL:
https://azby.fmworld.net/usage/windows_tips/20051031/index.html
yuusukeccc
質問者

お礼

アドバイスにしたがって、表示形式を[h]:mmにして見ましたらうまくいきました。 データーがそのままではうまくいきませんが、1:09→25:09のように入力しなおして見ましたらばっちりです。25時とか26時とかは慣れていないので、入力に戸惑います。1時と入れると25時と変換されるように工夫してみたいと思います。 ありがとうございました。

その他の回答 (3)

  • NCU
  • ベストアンサー率10% (32/318)
回答No.4

0時過ぎたら1を足せ、という諺がありますよね。(ないか) 入力で対応してもいいし、数式で吸収してもいいと思います。 >目標との差が30分のはずが1410分と表示されたりしてしまう。 24*60-30=1410 まさに1日分のズレですね。

yuusukeccc
質問者

お礼

今まで作った計算式は、No1.の方の補足の所に書いておきました。”24:00”を足すという数式は、入れて合ったのですが、アドバイスにしたがって「1」に変えてみました。でも、結果は変わりません。 ありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

>とにかく深夜0時をこえるレコードがあるため、うまくいきません。 >平均も夜23時と、深夜1時の平均は真夜中0時となってほしいのに正午になってしまいます。 エクセル内部では1時間が1/24の値に換算されます。 23:00は23/24、01:00は1/24ですから平均を取ると12/24=昼の12時となってしまいます。 ですから24時を越える場合は数字の1を加算してやらなければなりません。深夜1時は01:00に1を加えて25/24、これと23時の平均を取ると深夜0:00になります。 でもこのような処理をEXCELで実現する場合、「何を以て日またがりと判断するか」は結構難しい問題です。(07:00は当日の7時? 徹夜明けの7時? など) ですから場合によっては25:00、27:00などの表記をした場合が計算しやすい場合もありますので検討されてみてください

yuusukeccc
質問者

お礼

深夜0時を越えるデーターが入る列は決まっておりこの列には、逆に午後5時以前のデーターは入ることはありません。今は、AM9:30を基準に判定を考えましたが、AM7時でも正午でも大丈夫だと思います。 ありがとうございました。

  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.1

実際に使用しているデータ表と数式を提示しないと、回答がつかないと思います。 提示があれば数式の訂正等具体的に回答されるはずです。

yuusukeccc
質問者

補足

エクセルをこの「教えてGOO」に添付する方法がわからず、遅くなってしまいました。 セル連結などしてあるわかりにくい表なのですが。 E列:出発時刻の入力 例8:01:00 画面上の表示は秒は表示していません。 J列:帰着時刻入力 例1:53:00 深夜0時を越えるデータ入力があるのはこの列だけです。 C列:出発時刻の目標(8:00)よりのずれ。早いほど+評価。 M列:数式 =IF(E9="","",IF(J9<"9:30","24:00"-"9:30"+J9,J9-"9:30")) 9:30から帰着までの時間を仮想勤務時間として計算。休日は、入力しないのでnullです。0にしてしまうと平均値が狂うのでわざと判定を入れています。 ここまでは、正しく計算されています(という気がします)。表示形式はh:mm。ただ、ここの”24:00”が曲者のような気もしています。 H列:数式=IF(E9="","",(M9-"13:00")*1400) 帰着時間の目標(22:30)からのずれ。 帰着時間が0時前のときに1440を超える異常値が出ます。 Q列:仮想勤務時間の累積です。 数式 =IF(E8="",0,M8*1440) 次の行は、=IF(E9="",Q8,Q8+M9*1440) ここも帰着時間が0時前のときに異常値が加算されていってるような... 各列に平均、最大、最小を出す数式を入れた行を作っていますが、はっきり言って得られる結果はほとんどむちゃくちゃです。 数式の例 =AVERAGE(E8:E38)      =MAX(E8:E38)      =MIN(E8:E38) このE列は、まともですが、他は... こんなのでわかりますか?

関連するQ&A