見出し画像

第1土曜日と第3土曜日を特定する VBA

汎用性あるのか、微妙なためUPするか迷いましたが
自分用のメモとしてUPします。

休業日のレコードを自動生成するコードは作成しましたが
第1土曜日と第3土曜日を特定できず、下記のコードを作成しました。
これで、前回作成したタイマーと組み合わせて、特定の土曜日のみ
自動で実行したい処理が出来そうです。

休日_テーブル
列の「休日」休業日の日付
列の「種類」
・ 1は土曜日
・ 2は日曜日
・ 3~6は祭日等
として、同じ年月で、 土曜日のみ番号を振るります。
これで、第1土曜日と第3土曜日を特定できます。

Sub 番号を振る()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSql As String
    Dim currentHoliday As String
    Dim counter As Integer
    
    Set db = CurrentDb()
    
    ' 種類が2で、休日の左7文字でソートされたレコードセットを選択
    strSql = "SELECT * FROM 休日_テーブル WHERE 種類 = 1 ORDER BY Left(休日, 7), 休日"
    Set rs = db.OpenRecordset(strSql, dbOpenDynaset)
    
    If Not rs.EOF Then
        rs.MoveFirst
        currentHoliday = Left(rs!休日, 7)
        counter = 1
        
        Do While Not rs.EOF
            If Left(rs!休日, 7) = currentHoliday Then
                ' 同じ休日のレコードに対して番号を振る
                rs.Edit
                rs!土曜日 = counter
                rs.Update
                counter = counter + 1
            Else
                ' 新しい休日が始まった場合、カウンターをリセット
                currentHoliday = Left(rs!休日, 7)
                counter = 1
                
                rs.Edit
                rs!土曜日 = counter
                rs.Update
                counter = counter + 1
            End If
            rs.MoveNext
        Loop
    End If
    
    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub


この記事が参加している募集

仕事について話そう

この記事が気に入ったらサポートをしてみませんか?