
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
より高い知識が必要ですね。
時間とはシリアル値で管理されているのはご存知ですか?
ま、それはともかく発想を変えてみましょう。
私なら登録時に、開始時間と終了時間から、勤務時間と休憩時間と時間外とを計算し、それぞれ登録しますね。
その方が楽ですよ。
時間も時間と分を分けて計算した方が分かりやすいです。
No.3
- 回答日時:
' 計算するほう
Function CalcWorkingTime(aWorkingDate As Date, aTiem1 As Date, aTime2 As Date) As Variant
Dim time1 As Date
Dim time2 As Date
Dim midTime As Date
time1 = CDate(aWorkingDate & " " & aTime1) ' 開始日時
time2 = CDate(aWorkingDate & " " & aTime2) ' 終了日時
midTime = CDate(aWorkingDate & " " & "22:00") ' 深夜残業に突入する日時
' 午前様まで頑張っちゃった場合は
If time1 > time2 Then
time2 = DateAdd("d", 1, time2) ' 日付を 1日進めて正しい終了日時にする
End If
Dim returnValue(1) As Variant
If midTime < time2 Then
' 深夜残業しちゃった場合
returnValue(0) = DateDiff("n", time1, midTime) ' 通常時間外を算出
returnValue(1) = DateDiff("n", midTime, time2) ' 深夜残業時間を算出
Else
' 深夜残業しなかった場合
returnValue(0) = DateDiff("n", time1, time2) ' 通常時間外を算出
returnValue(1) = 0 ' 深夜残業時間は 0
End If
CalcWorkingTime = returnValue
End Function
' 呼び出し側
Sub hoge()
Dim dat as Variant
dat = CalcWorkingTime("2016/6/1", "17:00", "23:00")
MsgBox "通常時間外は " & dat(0) & "分"
MsgBox "深夜残業は " & dat(1) & "分"
End Sub
1つ目の引数は就業計算日
"2016/6/1" のように年月日を与える。
2つ目の引数は開始時刻
質問者の大前提として朝の始業時刻じゃなくて時間外が始まる 17時を指定したいみたいなので、"17:00" の固定値でもいいんだろうけどね。
3つ目の引数は終了時刻
質問文どおり "23:00" とか。
午前零時を超えてしまった場合もとりあえず "2:30" とか入れてやる。
この 3つの引数を得て通常時間外と深夜残業を配列で返す。
> ちなみに土日祝の場合、時間外は深夜帯になるのでその場合も教えて頂けると幸いです。
自力で頑張ってください。
「土日祝」は「会社が休みの日」という意味に変換する必要があり、会社の休日は何かの形でカレンダー情報を持っておかなければならない。
就業計算日が会社の休日であれば、開始時刻から終了時刻までが丸々深夜残業っていう風に計算すればいいと思う。
No.2
- 回答日時:
(残業終了時間 と 深夜残業開始時間 のどちらか小さい方)ー(残業開始時間 と 深夜残業開始時間 のどちらか小さい方)
MIN("23:00" , "22:00") - MIN("17:00 , "22:00")
で通常時間外の時間を、
(残業終了時間 と 深夜残業開始時間 のどちらか大きい方)ー(深夜残業開始時間 と 残業開始時間 のどちらか大きい方)
MAX("23:00" , "22:00") - MAX("22:00" , "17:00")
で深夜時間外の時間求められるのではないか?
Excelの関数を使うならMIN関数とMAX関数だけでできる基本的な計算です。
・・・
質問文をそのまま計算式にすると
通常時間外の時間を求めるとき、
(残業終了時間 と 深夜残業開始時間 のどちらか小さい方)ー(残業開始時間)
になりますが、
残業開始時間が22:00より後になることも考慮する必要があるので、(残業開始時間)の部分を(残業開始時間 と 深夜残業開始時間 のどちらか小さい方)としています。
なお、
残業開始時間 < 残業終了時間
であることが大前提です。
時間入力時にこのチェックをすることも忘れないでください。
このあたりのアルゴリズムはご理解いただけるでしょうか。
難しいようであれば、市販の時間管理ソフトを購入されることを自分からも勧めます。
No.1
- 回答日時:
こんにちは
Accessで自作作成にとらわれず、市販のソフトの導入も検討してみてください。
初期導入費用はかかりますが、そのほうが、新右衛門さん自作よりもコストや性能や使いってが良い場合もあります。
市販ソフトで対応できない事をしたくなったときにこそ、新右衛門さんの出番です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
accessで残業時間計算
Access(アクセス)
-
Accessの数値から時間に変換する時点で困っています。
その他(データベース)
-
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
-
4
ACCESSの時刻の引き算
Access(アクセス)
-
5
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
6
ACCESSで1月1日~12月31日までの日付を入れる方法
その他(データベース)
-
7
Access→Excelへエクスポートすると日付の表示形式が変化する
Excel(エクセル)
-
8
エクセルをACCESSのレポートに変換する方法
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 隣のセルが空白以外の場...
-
【ACCESS】未定義関数が発生。...
-
ファイルメーカーで学年を表示...
-
エクセルで四捨五入ではなく、5...
-
整列の比較回数を表す数式でよ...
-
ファイルメーカーで時間の表示...
-
コンピューターで2進法が採用...
-
CFLOOPで計算させたいのですが
-
計算結果をCASE WHENで判断した...
-
選択クエリを開けない
-
アクセスである時点での年齢を...
-
ACCESSでの時間外計算方法
-
エクセルでeのマイナス乗の計算...
-
VBAでエクセルシートを更新...
-
マクロボタンを押すと、ファイ...
-
excelで、セル内に文字が入力さ...
-
エクセルのチェックボックスを...
-
エクセルで最高値、最低値の日...
-
「24日の0時」って・・・
-
回覧板の日付について質問です...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 隣のセルが空白以外の場...
-
コンピューターで2進法が採用...
-
エクセルで四捨五入ではなく、5...
-
【ACCESS】未定義関数が発生。...
-
Accessについて教えて下さい。
-
ファイルメーカーで学年を表示...
-
アクセスである時点での年齢を...
-
計算はaccessかexcelか
-
アクセスについて
-
Accessで子供の学年齢を求めた...
-
作業日報作成
-
エクセルで設定したのをアクセ...
-
ファイルメーカープロ8で生年月...
-
Accessの日付計算に関して
-
選択クエリを開けない
-
経過年数の求め方...
-
アクセスの式について
-
発効日から有効期限を求める式...
-
「桐」の定義について
-
mysqlとphpでのデータ表示について
おすすめ情報
ちなみに土日祝の場合、時間外は深夜帯になるのでその場合も教えて頂けると幸いです。