次の方法で共有

ACCESSにおいて休憩時間を除いた時間の算出

Anonymous
2025-03-24T00:59:42+00:00

VBA初心者です。

以前、このコミュニティでの回答事例を参考にし以下のモジュールを

入れて使用しておりました。

内容的には休憩時間を差し引いた休暇時間を算出するためのものです。

概ね使えていたのですが

開始時間を8:00 終了時間を11:00とした場合に

休暇時間を2:50としたいのですが0:50と出てしまいます。

終了時間が10:00~12:00を入力すると希望する時間が算出され

ないようです。

Public Function 休暇時間(開始時間, 終了時間)

Const BeginTime = #8:00:00 AM#

Const AMRestBegin = #10:00:00 AM#

Const AMRestEnd = #10:10:00 AM#

Const LunchBbreakBegin = #12:00:00 PM#

Const LunchBbreakEnd = #12:40:00 PM#

Const PMRestBegin = #3:00:00 PM#

Const PMRestEnd = #3:10:00 PM#

Const EndTime = #5:00:00 PM#

If IsNull(開始時間) Or IsNull(終了時間) Then Exit Function

If 終了時間 < 開始時間 Then Exit Function

Dim h1 As Date, h2 As Date

'始業時間~AM休息

h1 = BeginTime: h2 = AMRestBegin

If h1 < 開始時間 Then h1 = 開始時間

If 終了時間 < h2 Then

    休暇時間 = CDate(終了時間 - h1)

    Exit Function

ElseIf h1 < h2 Then

    休暇時間 = CDate(h2 - h1)

End If

'AM休息~昼休憩

h1 = AMRestEnd: h2 = LunchBbreakBegin

If 終了時間 < h1 Then Exit Function

If h1 < 開始時間 Then h1 = 開始時間

If 終了時間 < h2 Then

    休暇時間 = CDate(終了時間 - h1)

    Exit Function

ElseIf h1 < h2 Then

    休暇時間 = 休暇時間 + CDate(h2 - h1)

End If

'昼休憩~PM休憩

h1 = LunchBbreakEnd: h2 = PMRestBegin

If 終了時間 < h1 Then Exit Function

If h1 < 開始時間 Then h1 = 開始時間

If 終了時間 < h2 Then

    休暇時間 = 休暇時間 + CDate(終了時間 - h1)

    Exit Function

ElseIf h1 < h2 Then

    休暇時間 = 休暇時間 + CDate(h2 - h1)

End If

'PM休憩~終業時間

h1 = PMRestEnd: h2 = EndTime

If 終了時間 < h1 Then Exit Function

If h1 < 開始時間 Then h1 = 開始時間

If 終了時間 < h2 Then

    休暇時間 = 休暇時間 + CDate(終了時間 - h1)

Else

    休暇時間 = 休暇時間 + CDate(h2 - h1)

End If

End Function

Microsoft 365 と Office | アクセス | ビジネス向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2025-03-24T01:41:10+00:00

> 開始時間を8:00 終了時間を11:00とした場合に> 休暇時間を2:50としたいのですが0:50と出てしまいます。

「AM休息~昼休憩」部分における休暇時間の計算が誤っているからです。

> If 終了時間 < h2 Then> 休暇時間 = CDate(終了時間 - h1)> Exit Function


If 終了時間 < h2 Then
休暇時間 = 休暇時間 + CDate(終了時間 - h1)
Exit Function

> 以前、このコミュニティでの回答事例を参考にし

参考元のスレッドにおいても同様。

> If 退勤時間 < t2 Then> 勤務時間 = CDate(退勤時間 - t1)> Exit Function


    If 退勤時間 < t2 Then
        勤務時間 = 勤務時間 + CDate(退勤時間 - t1)
        Exit Function

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

2 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2025-03-24T02:30:13+00:00

    sk.exe様

    ご教示いただきありがとうございました。

    助かりました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. 削除済み

    この回答は当社の行動規範に違反したため削除されました。 アクションを実行する前にこの回答を手動で報告したか、自動検出機能により特定しました。 詳細については、当社の行動規範を参照してください。


    コメントはオフになっています。 詳細情報