H0la Roberto, disculpa la demora, pero le había estado dando vueltas a este asunto y finalmente esto es lo que resultó.
Puedes pegar esta función en un módulo
Function fcnContarDST(r As Range, d As Range) As Integer
anio = Year(d.Value)
dia_sem = Weekday(d.Value, vbMonday)
ini_sem = DateAdd("d", 1 - dia_sem, d.Value)
With WorksheetFunction
fcnContarDST = IIf(.CountIf(r, ini_sem) > 0, 1, 0) + IIf(.CountIf(r, ini_sem + 1) > 0, 1, 0) + _
IIf(.CountIf(r, ini_sem + 2) > 0, 1, 0) + IIf(.CountIf(r, ini_sem + 3) > 0, 1, 0) + _
IIf(.CountIf(r, ini_sem + 4) > 0, 1, 0) + IIf(.CountIf(r, ini_sem + 5) > 0, 1, 0) + _
IIf(.CountIf(r, ini_sem + 6) > 0, 1, 0)
End With
End Function
Luego en las celdas de la columna D, puedes agregar esta función (suponiendo que las fechas pueden ocupar hasta 1000 filas)
El ejemplo va para la celda D3, luego arrastras la función.
D3=fcnContarDST(B$3:B$1000;C3)
Esto te actualizará el valor de forma automática en cada celda, pero tiene un costo alto en cuanto a eficiencia (ya con 1000 filas se demoraría bastante).
Si no es vital que se refresque el dato cada vez que haces un cambio, podría agregar un botón que actualice todas las celdas de la columna D cuando lo solicites. La macro asociada al botón sería la siguiente
Sub subContarDST()
Dim rango As Range, c As Range
'Rango de fechas'
Set rango = Range("B3:B" & Range("B" & Rows.Count).End(xlUp).Row)
'Calcular el número de días por cada celda del rango'
For Each c In rango
Range("D" & c.Row).Value = fcnContarDST(rango, c)
Next
End Sub
Toma en consideración que esta macro depende la función anterior, así que ambas son necesarias para que el botón funcione.
Sin son muchos datos, igual toma unos segundos, pero no se me ocurre cómo hacerlo más eficiente.
Me comentas si te sirve.