文字列の日付から当月何回目の何曜日かを表示する

<分類:値変換>
<使用例:文字列の日付(20190324)から当月何回目の何曜日か(日4)を表示する>
<プログラム例>

Sub 使用例()
   Dim date_moji As String
   Dim rtn1 As String

   date_moji = "20190324"
   rtn1 = 共通_文字列の日付から当月何回目の何曜日(date_moji)

   MsgBox ("文字列の日付(" & date_moji & ")は当月" & Right(rtn1, 1) & "回目の" & Left(rtn1, 1) & "曜日です")

End Sub

Function 共通_文字列の日付から当月何回目の何曜日(p1 As String) As String
   
   Dim date_moji As String
   Dim rtn1 As String
   Dim rtn2 As String
   Dim imax As Long
   Dim i01 As Long
   Dim i As Long
   Dim yobi As String
   Dim yobi_cnt As Long
   Dim s As String

   date_moji = p1
   rtn1 = 共通_文字列の日付から末日(date_moji)
   rtn2 = 共通_cov_date_d9(rtn1)
   imax = rtn2
   i01 = Left(rtn2, 6) & "01"
   
   yobi = 共通_文字列の日付から曜日(p1)
   yobi_cnt = 0
   
   For i = i01 To imax
      s = i
      If 共通_文字列の日付から曜日(s) = yobi Then
         If s <= p1 Then
            yobi_cnt = yobi_cnt + 1
         Else
            Exit For
         End If
      End If
   Next i
   
   共通_文字列の日付から当月何回目の何曜日 = yobi & yobi_cnt
   
End Function

Function 共通_文字列の日付から末日(p1 As String) As Date
   Dim date_moji2 As String
   Dim rtn_date As Date
   Dim rtn_date2 As Date
   Dim rtn_date3 As Date
    
   date_moji2 = Left(p1, 6) & "01"
   rtn_date = 共通_cov_date_9d(date_moji2)
   rtn_date2 = DateAdd("m", 1, rtn_date)
   rtn_date3 = DateAdd("d", -1, rtn_date2)
   
   共通_文字列の日付から末日 = rtn_date3
   
End Function

Function 共通_文字列の日付から曜日(date_moji As String) As String
    
   Select Case Weekday(共通_cov_date_9d(date_moji))
          Case "1"
               共通_文字列の日付から曜日 = "日"
          Case "2"
               共通_文字列の日付から曜日 = "月"
          Case "3"
               共通_文字列の日付から曜日 = "火"
          Case "4"
               共通_文字列の日付から曜日 = "水"
          Case "5"
               共通_文字列の日付から曜日 = "木"
          Case "6"
               共通_文字列の日付から曜日 = "金"
          Case "7"
               共通_文字列の日付から曜日 = "土"
   End Select
    
End Function

Function 共通_cov_date_9d(p1 As String) As Date
   Dim d As Date
   d = Left(p1, 4) & "/" & Mid(p1, 5, 2) & "/" & Right(p1, 2)
   共通_cov_date_9d = (Format(d, "yyyy/mm/dd"))
End Function

Function 共通_cov_date_d9(p1 As String) As String
   共通_cov_date_d9 = CStr((Format(p1, "yyyymmdd")))
End Function