プロが教えるわが家の防犯対策術!

現在Excelのマクロにて勤怠の時間計算を行っています。

終わった時間から開始時間を引いて何時間働いたかを出したいです。
ただ夜勤の場合日付が変わって就業時刻が終わる為
24時を超えた計算を行いたいです。


FM9時開始AM6時終わりの場合
30時-21時を引いた9時間という感じの計算を行いたいです。

行ってみた事。
TimeValue("30:00")-TimeValue("21:00")という計算を行ったところエラーとなってしまいました。(型が一致しませんとでました)

TimeValueだと24:00以上の値は使えないのでしょうか?
また、どの関数なら24時以降の計算が行えるのでしょうか?

初歩的な質問で申し訳ございませんが宜しくお願いします。

A 回答 (2件)

Double型として時間を取得してみてはいかがでしょう



dim d1 as double, d2 as double, d3 as double
dim t1 as date
' 6:00として入力
d1 = TimeValue("6:00")
d2 = TimeValue("21:00")
d3 = d1 - d2
if d3 < 0 then
  ' マイナスの場合は 1日分加算する
  d3 = d3 + 1.0
end if
' シリアル値を日付型に代入して時間を取得
t1 = d3
debug.print t1

といった具合です ...
    • good
    • 2
この回答へのお礼

なるほど!!!
これなら日勤の場合も夜勤の場合も1つの計算式でいけます!

日付が変わった場合だけの式を考えておりました。
一つの式で両方をまかなえる式を書き込んで頂ありがとうございます♪

お礼日時:2009/03/10 17:24

こんにちは


Timevalue 関数は、時間ではなくて時刻をシリアル値(一日は、0 から0.99999999の範囲)に変換する関数です。
24:00以上の値は使えません。また24:00は、シリアル値で 0 (=0:00)になってしまいます。
シリアル値の性質を考えると単純に日付を含めて引き算すると時間が求められます(2009/3/10 9:30 のセルB1から 2009/3/9 8:15のセルA1を引く例 =B1-A1)。
24:00以上のシリアル値を表示するときは、表示形式を [h]:mm にします。
    • good
    • 0
この回答へのお礼

書き込みありがとうございます。

Timevalue関数は24:00以降は使用できなかったんですね。

>24:00以上のシリアル値を表示するときは、表示形式を [h]:mm にします。
これはセルの表示形式を変更するという事でしょうか?
セルの表示形式ではなくマクロ内で24:00以降の値を使用する場合はどうしたらいいのでしょうか?

お礼日時:2009/03/10 17:20

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