Buenos días, traigo el día de hoy la solución que me facilito el Sr. Jose Rubi en su foro, por si a alguien le puede servir.
Código PHP:
Function FechaEfectiva(Fecha As Date) As Date
'dada una fecha comprueba si es el primer día hábil del mes y en caso de serlo, devuelve el último hábil del mes anterior. En otro caso devuelve la fecha recibida
Dim PrimerHabil As Date, UltimoHabil As Date, DiaSemana As Long
'por defecto devuelvo la fecha recibida sin modificar
FechaEfectiva = Fecha
'el primer día hábil del mes como mucho será el día 3
If Day(Fecha) > 3 Then Exit Function
'calculo el primer día hábil del mes
PrimerHabil = DateValue("1/" & Month(Fecha) & "/" & Year(Fecha))
DiaSemana = Weekday(PrimerHabil, vbMonday)
'si es sábado o domingo le sumo los días que resten hasta el lunes
If DiaSemana >= 6 Then PrimerHabil = DateAdd("d", (7 - DiaSemana + 1), PrimerHabil)
'si la fecha no es el primer día hábil devuelvo la fecha recibida
If Fecha <> PrimerHabil Then Exit Function
'si quieres que al recibir un día no hábil del principio del mes (ej.: 1/2/2015) también devuelva el último hábil del mes anterior cambia la línea por : If Fecha > PrimerHabil Then Exit Function
'calculo el último día habil del mes anterior
UltimoHabil = DateSerial(Year(Fecha), Month(Fecha), 1 - 1) 'esto significa un día antes del día uno del mes y año de la fecha recibida
'también valdría : UltimoHabil = DateAdd("d", -1, "1/" & Month(Fecha) & "/" & Year(Fecha))
DiaSemana = Weekday(UltimoHabil, vbMonday)
'si es sábado o domingo le resto los días que pasen del viernes
If DiaSemana >= 6 Then UltimoHabil = DateAdd("d", (5 - DiaSemana), UltimoHabil)
'devuelvo el último día hábil
FechaEfectiva = UltimoHabil
End Function