22:00以降の勤務の場合、時給の1.25倍を支払います。
深夜勤務時間分: DateDiff("n","22:00",[退勤])
分からないのは、24:00を超えたが場合ですが、Switch関数とかで場合分けすると思います。
深夜勤務時間分: Switch([退勤]<=#0:00:00#,DateDiff("n","22:00",[退勤]))
この時点で、深夜勤務時間分が空白になりすが、[退勤]<=#0:00:00#がおかしいのでしょうか?
回答いただけると幸いです
[退勤]<=#0:00:00# になることはないはずですからそうなりますね。(0以下の時刻をどのように入力するのか?)
退勤管理では、[出勤]、[退勤]フィールドに日付成分も含める方法と、時刻成分のみににする方法があります。
おそらく時刻成分のみの方法を採用しているということだと思いますが、その場合、#0:00:00#を超えて勤務した場合の対策に工夫が必要です。
24時間以上連続で勤務することはないはずですから、[出勤] > [退勤] なら#0:00:00#を超えて勤務していると判断できます。その場合は、[退勤]に24時間(1440分)を加算すればいいでしょう。
深夜勤務時間分: DateDiff("n",#22:00#,[退勤])+IIf([出勤]>[退勤],1440,0)
#0:00:00#はデータ的には数値の「0」です。[退勤]<=#0:00:00#は基本的にFalseになるでしょう
#0:00:00#
[退勤]<=#0:00:00#
False
Switch 関数
質問の式では、Switch関数はNullを返しているので空白になっているのでしょう
【Excel VBA】24時間以上の合計を求める方法(後編)(prtn-blogさん)
タイトルはExcelですが、VBA部分がACCESSに相当します。要約すると、24以上の時間表示はそのままでは使えません(「以上」です。24:00もNGです)
24時以降の場合、「[退勤]」をどのように記録してるのでしょうか? 最終的にはTimeSerial関数を経由して時間計算させるのがいいんじゃないでしょうか?
?DateDiff("n","22:00",TimeSerial(25, 30, 0)) 210
hatena様、hiroton様 回答ありがとうございました。 感謝します。
データ型を日付/時刻型にしてあり、時刻のみ保存しているならば、
TimeValue(1-#22:00#+[退勤])
なんて方法でもいいかもしれません
hiroton様 ありがとうございます。
通常気勤務時間分と深夜勤務時間分に分けて表示したいのだと思います。
下記の3パターンが考えられます。 通常勤務時間のみ 例 15:00 ~ 22:00
通常勤務時間から深夜勤務時間まで 例 16:00 ~ 23:00 18:00 ~ 01:00
深夜勤務時間のみ 例 22:00 ~ 03:00
最後のパターンはない、考慮しないということなら、下記のような式を作成すればいいでしょう。
退勤1: [退勤]+IIf([出勤]>[退勤],1,0) 通常勤務時間分: DateDiff("n",[出勤],IIf([退勤1]>#22:00:00#,#22:00:00#,[退勤])) 深夜勤務時間分: IIf([退勤1]<=#22:00:00#,0,DateDiff("n",#22:00:00#,[退勤1]))
退勤1 は後の式で参照するための式です。
もし、深夜勤務時間のみ、あるいは 03:00 ~ 10:00 というような勤務がありえる、となるともっと複雑な式になります。
hatena様 ありがとうございました。
これ、残業加算される場合や、24時間以上、休憩時間がからむので、かなりやっかいなのです。 特に厄介なのは、休憩時間の処理でした。 どこで休憩したかによって、単価が違ってくるからです。 逆に、休憩時間を無視していいなら、なんの工夫も必要ないです。
私の場合は、勤務開始から終了まで追っていく過程で、集計中の時間が通常時間帯と、深夜時間帯のどちらのブロックに属しているかを判定することで、正しく計算できるようになりました。 4打刻制から、6打刻制に対応させることも可能です。
端的に、説明する事が出来なくてすみません。 これは、プログラムの技術的な問題というより、処理する方法の問題だと思います。 正解も、たくさんあるはずです。
不適切なコンテンツとして通報するには以下の「送信」ボタンを押して下さい。 現在このグループでは通報を匿名で受け付けていません。 管理者グループにはあなたが誰であるかがわかります。
どのように不適切か説明したい場合、メッセージをご記入下さい。空白のままでも通報は送信されます。
通報履歴 で、あなたの通報と対応時のメッセージを確認できます。
トピックをWIKIWIKIに埋め込む
次のコードをWIKIWIKIのページに埋め込むと最新のコメントがその場に表示されます。
// generating...
プレビュー
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
Markdown Tables generator
ここまでがあなたのコンテンツ
ここからもあなたのコンテンツ
[退勤]<=#0:00:00# になることはないはずですからそうなりますね。(0以下の時刻をどのように入力するのか?)
退勤管理では、[出勤]、[退勤]フィールドに日付成分も含める方法と、時刻成分のみににする方法があります。
おそらく時刻成分のみの方法を採用しているということだと思いますが、その場合、#0:00:00#を超えて勤務した場合の対策に工夫が必要です。
24時間以上連続で勤務することはないはずですから、[出勤] > [退勤] なら#0:00:00#を超えて勤務していると判断できます。その場合は、[退勤]に24時間(1440分)を加算すればいいでしょう。
#0:00:00#
はデータ的には数値の「0」です。[退勤]<=#0:00:00#
は基本的にFalse
になるでしょうSwitch 関数
質問の式では、Switch関数はNullを返しているので空白になっているのでしょう
【Excel VBA】24時間以上の合計を求める方法(後編)(prtn-blogさん)
タイトルはExcelですが、VBA部分がACCESSに相当します。要約すると、24以上の時間表示はそのままでは使えません(「以上」です。24:00もNGです)
24時以降の場合、「[退勤]」をどのように記録してるのでしょうか?
最終的にはTimeSerial関数を経由して時間計算させるのがいいんじゃないでしょうか?
hatena様、hiroton様 回答ありがとうございました。
感謝します。
データ型を日付/時刻型にしてあり、時刻のみ保存しているならば、
なんて方法でもいいかもしれません
hiroton様
ありがとうございます。
通常気勤務時間分と深夜勤務時間分に分けて表示したいのだと思います。
下記の3パターンが考えられます。
通常勤務時間のみ
例 15:00 ~ 22:00
通常勤務時間から深夜勤務時間まで
例 16:00 ~ 23:00
18:00 ~ 01:00
深夜勤務時間のみ
例 22:00 ~ 03:00
最後のパターンはない、考慮しないということなら、下記のような式を作成すればいいでしょう。
退勤1 は後の式で参照するための式です。
もし、深夜勤務時間のみ、あるいは 03:00 ~ 10:00 というような勤務がありえる、となるともっと複雑な式になります。
hatena様
ありがとうございました。
これ、残業加算される場合や、24時間以上、休憩時間がからむので、かなりやっかいなのです。
特に厄介なのは、休憩時間の処理でした。
どこで休憩したかによって、単価が違ってくるからです。
逆に、休憩時間を無視していいなら、なんの工夫も必要ないです。
私の場合は、勤務開始から終了まで追っていく過程で、集計中の時間が通常時間帯と、深夜時間帯のどちらのブロックに属しているかを判定することで、正しく計算できるようになりました。
4打刻制から、6打刻制に対応させることも可能です。
端的に、説明する事が出来なくてすみません。
これは、プログラムの技術的な問題というより、処理する方法の問題だと思います。
正解も、たくさんあるはずです。