Microsoft Access 掲示板

営業日ベースの日付の羅列から連続する開始日と終了日を計算 / 2

15 コメント
views
4 フォロー
2
hiroton 2022/09/16 (金) 17:13:13 b1aad@f966d

例えば

Sub test()
Dim rs As Recordset
Dim 氏名 As String
Dim 終了日 As Date

Set rs = CurrentDb.OpenRecordset("SELECT 氏名, 休暇取得日 FROM 素データ ORDER BY 氏名, 休暇取得日;")
Debug.Print rs!氏名, rs!休暇取得日, ;
氏名 = rs!氏名
終了日 = rs!休暇取得日
rs.MoveNext

Do Until rs.EOF
    If rs!氏名 <> 氏名 Then
        Debug.Print 終了日
        Debug.Print rs!氏名, rs!休暇取得日, ;
        氏名 = rs!氏名
        終了日 = rs!休暇取得日
        rs.MoveNext
    ElseIf rs!休暇取得日 = 終了日 + 1 Then
        終了日 = 終了日 + 1
        rs.MoveNext
    Else
        If Is休日(終了日 + 1) Then
            終了日 = 終了日 + 1
        Else
            Debug.Print 終了日
            Debug.Print rs!氏名, rs!休暇取得日, ;
            終了日 = rs!休暇取得日
            rs.MoveNext
        End If
    End If
Loop
Debug.Print 終了日
rs.Close
Set rs = Nothing

End Sub

Function Is休日(mydate As Date) As Boolean
    If Weekday(mydate) = 1 Or Weekday(mydate) = 7 Then
        Is休日 = True
    Else
        Is休日 = Is祝日(mydate)
    End If
End Function

Function Is祝日(mydate As Date) As Boolean
    '(略)
End Function

その日が祝日かどうかを判断する方法はいろいろあるのでひとまず省略します


「存在しないデータ」を評価するのは大変です。処理中に適切に作り出す必要があります

上記例ではVBAで終了日として作り出してみました。処理の状況によってレコードを進めたり、足踏みしていたりと注意が必要です

「休日テーブル」のような実データを用意する方向であれば、単純にテーブルをマージすれば日付が連続するデータになるのでクエリでもなんとかなるのかな?と思います。(そのために土・日の日付まで実データで保存するのはどうかと思いますが)

通報 ...