| 
    
     |  | こんにちは 
 簡単な説明を入れときました。
 
 
 Sub Test()
 Dim Myda As Date, cur_date As Date, cur_eddate As Date, lp As Long
 Dim Co As Long, Co1 As Long, DaSt(4) As String, DaSt1(4) As Date
 Dim DaSu(4) As String, DaSu1(4) As Date, C As Range, Ma, Ma1
 
 Myda = Date
 cur_date = DateSerial(Year(Myda), Month(Myda), 1) '現在の月の初日
 cur_eddate = DateSerial(Year(Myda), Month(Myda) + 1, 0) '現在の月の最後
 Co = 1: Co1 = 1
 ''現在の月の初日から'現在の月の最後日までループさせる
 For lp = 0 To DateDiff("d", cur_date, cur_eddate)
 'Weekday関数にて曜日を区分(土曜、日曜のみ)
 Select Case Weekday(Format(DateAdd("d", lp, cur_date), "yyyy/m/d"))
 Case 7
 'その日が土曜なら配列変数に第何土曜日かをセット(変数Coにて1,2,3,4,5を決める)
 DaSt(Co) = "第" & Co & "土曜日"
 'その日を配列変数にセット
 DaSt1(Co) = Format(DateAdd("d", lp, cur_date), "yyyy/m/d")
 Co = Co + 1
 Case 1
 'その日が日曜なら配列変数に第何日曜日かをセット(変数Co1にて1,2,3,4,5を決める)
 DaSu(Co1) = "第" & Co1 & "日曜日"
 'その日を配列変数にセット
 DaSu1(Co1) = Format(DateAdd("d", lp, cur_date), "yyyy/m/d")
 Co1 = Co1 + 1
 End Select
 Next
 'ループにてデータ分回す
 For Each C In Range("A1", Range("A65536").End(xlUp))
 'Match関数にて配列変数の値と一致するのがあるかを確認(土曜日分)
 Ma = Application.Match(C.Value, DaSt, 0)
 '一致したかの有無をIF文で確認
 If Not IsError(Ma) Then
 'あった場合セルへ日付を転記(土曜日分)
 C.Value = DaSt1(Ma - 1)
 Else
 '無かった場合、Match関数にて配列変数の値と一致するのがあるかを確認(日曜日分)
 Ma1 = Application.Match(C.Value, DaSu, 0)
 '一致したかの有無をIF文で確認
 If Not IsError(Ma1) Then
 'あった場合セルへ日付を転記(日曜日分)
 C.Value = DaSu1(Ma1 - 1)
 End If
 End If
 Next
 End Sub
 
 >C.Value = DaSu1(Ma1 - 1)
 なぜ、(Ma1-1)になるかと言うと変数「DaSu1」は
 DaSu1(0),DaSu1(1),DaSu1(2),DaSu1(3),DaSu1(4)となり
 各変数に値がセットされいます。
 Match関数で一致した場合、変数Ma1には「1〜5」の値が返ってきます。
 と言う事は、実際の値を転記するには「1=DaSu1(0)」となるため
 「-1」する必要があるのです。
 
 
 |  |