Lo potresti fare con la funzione WeekDay.
Ti ho fatto un esempio:
codice:
Dim Cont1 As Integer
Dim Data1 As Date
Dim NumTemp1 As Byte
Dim StrTemp1 As String

Dim Giorni(6, 4) As Byte
Dim NumGiorni(6, 0) As Byte

Data1 = CDate(Now)
For Cont1 = 1 To GiorniDelMese(Month(Data1), Year(Data1))
  Data1 = CDate(Format(Cont1, "00") & "/" & CStr(Month(Now)) & "/" & CStr(Year(Now)))
  NumTemp1 = (Weekday(Data1) - 1)
  Giorni(NumTemp1, NumGiorni(NumTemp1, 0)) = Cont1
  NumGiorni(NumTemp1, 0) = NumGiorni(NumTemp1, 0) + 1
Next Cont1
Adesso se vuoi sapere ad esempio quanti e quali sono i giovedì puoi fare così:
codice:
MsgBox CStr(NumGiorni(4, 0)) 'Numero di giovedì
For Cont1 = 0 To (NumGiorni(4, 0) - 1)
  StrTemp1 = StrTemp1 & CStr(Giorni(4, Cont1)) & " "
Next Cont1
StrTemp1 = RTrim(StrTemp1)   'Tutti i giovedì del mese in StrTemp1
MsgBox StrTemp1
Serve però anche una funzione che restituisca il numero di giorni del mese scelto:
codice:
Private Function GiorniDelMese(ByVal Mese As Byte, ByVal Anno As Integer) As Byte
Select Case Mese
  Case Is = 1
    GiorniDelMese = 31
  Case Is = 2
    If Anno Mod 4 = 0 Then
      GiorniDelMese = 29
    Else
      GiorniDelMese = 28
    End If
  Case Is = 3
    GiorniDelMese = 31
  Case Is = 4
    GiorniDelMese = 30
  Case Is = 5
    GiorniDelMese = 31
  Case Is = 6
    GiorniDelMese = 30
  Case Is = 7
    GiorniDelMese = 31
  Case Is = 8
    GiorniDelMese = 31
  Case Is = 9
    GiorniDelMese = 30
  Case Is = 10
    GiorniDelMese = 31
  Case Is = 11
    GiorniDelMese = 30
  Case Is = 12
    GiorniDelMese = 31
  Case Else
    GiorniDelMese = 0
End Select
End Function
Ciao