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で終了日
として作り出してみました。処理の状況によってレコードを進めたり、足踏みしていたりと注意が必要です
「休日テーブル」のような実データを用意する方向であれば、単純にテーブルをマージすれば日付が連続するデータになるのでクエリでもなんとかなるのかな?と思います。(そのために土・日の日付まで実データで保存するのはどうかと思いますが)
通報 ...