- 締切済み
Accessで、24時間以上の日付/時刻型の計算
Accessで、24時間以上の、47時間59分までの日付/時刻型の計算方法はありませんか? 例:シフト勤務 17:0:000~33:00:00 休憩01:00:00 の勤務時間を計算するために33:00-17:00-01:00:00= ・・勤務時間という計算をしたいのですが、まず33:00:00値を日付/時刻型で持つことができないので、テキスト型で持たせると Accessで計算が出来ません。 よい方法はありますか? つたない質問で申し訳ありませんがよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- MARU4812
- ベストアンサー率43% (196/452)
プログラムの世界において、日付型は必ず年月日時分秒すべてを持っています。 これは日付型の実体が実数と同じで、整数部が年月日、小数部が時分秒を 表すからです。表示上省略される場合はあっても、メモリ上には持ってます。 Format すれば表示できると思います。 但し、0 が 0/1/1を表したり、1900/1/1を表したり、1899/12/30だったり 扱うデータベースの種類やシステムのバージョンによって変わるので確認が 必要です。(AccessVBA と Accessの日付/時刻型でも違ってた気がします) 年月日時分秒をそのまま日付/時刻型に持てば良いのでは? [AccessVBAの例] Dim datStart As Date Dim datEnd As Date datStart = TimeSerial(12, 9, 1) Debug.Print Format$(datStart, "yyyy/mm/dd hh:mm:ss") datStart = DateSerial(2011, 8, 2) + TimeSerial(12, 9, 1) Debug.Print Format$(datStart, "yyyy/mm/dd hh:mm:ss") datEnd = DateSerial(2011, 8, 4) + TimeSerial(3, 9, 1) Debug.Print DateDiff("h", datStart, datEnd) & "時間" 'もしくは0の日付を基準に datStart = TimeSerial(8, 0, 0) Debug.Print Format$(datStart, "yyyy/mm/dd hh:mm:ss") datEnd = TimeSerial(37, 10, 0) Debug.Print Format$(datEnd, "yyyy/mm/dd hh:mm:ss") Debug.Print DateDiff("h", datStart, datEnd) & "時間"
- root_16
- ベストアンサー率32% (674/2096)
実際にやってないので適当ですが、 開始時間と終了時間、どちらも24時間単位で入力し、 終了時間が開始時間より小さい(早い)場合、 で計算式を変えればいいんじゃないですかね? 通常:終了時間-開始時間-1h 終了時間が開始時間より小さい(早い)場合: 24:00-開始時間+終了時間-1h ただ、以前エクセルで勤怠関連のものを 作りましたが、 まともな会社であれば、 昼の休憩時間があるなら、残業で深夜に及ぶ場合の 夜間の休憩時間も規定していると思います (お昼休憩から全く休憩させずに朝まで仕事は駄目)ので 条件式は複雑になり 計算はそう簡単ではないと思います。 あと、早退とか終了時間によって 休憩時間を引く、引かない、が出てきますし。
お礼
回答ありがとうございます。 すみません。今回の場合47:59:00まですでに値が出力されるファイルがあるので 24時間単位に直すほうが大変かもしれません。。
お礼
回答ありがとうございます。 日付を持たせるのは良いですね。 難しそうですが・・。