** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Ayuda funcion contar dias festivos entre dos fecha
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoAyuda funcion contar dias festivos entre dos fecha

 Responder Responder Página  12>
Autor
Mensaje
seralmo Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 31/Enero/2020
Localización: madrid
Estado: Sin conexión
Puntos: 20
Enlace directo a este mensaje Tema: Ayuda funcion contar dias festivos entre dos fecha
    Enviado: 31/Enero/2020 a las 12:14
Buenos dias, necesito ayuda para realizar la funcion que me devuelva los sabados y domingos existentes entre dos fechas. Os dejo lo que he echo yo: 

Function dias_festivos(ByVal fechaInicial As Date, fechaFinal As Date)


Dim fechainicio As Date
Dim fechafin As Date
Dim diferenciadias As Integer
Dim diasemana As Integer
Dim contador As Integer
Dim i As Integer
   

    On Error GoTo controlaerror
    
    diferenciadias = fechafin - fechainicio
    

    
    For i = 1 To diferenciadias
    diasemana = Weekday(fechainicio, vbMonday)
    
        If diasemana = 6 And diasemana = 7 Then
            contador = contador + 1
            
    
   End If

   fecha inicio = fechainicio + 1

Next i

controlerror: Exit Function

End Function
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 31/Enero/2020 a las 16:21
Hola seralmo y bienvenido al foro,

Curiosa técnica...

Yo lo haría así:

Function DiasFestivos(dtmFechaInicial As Date, dtmFechaFinal As Date) As Long
    Dim l       As Long
    
    For l = CLng(dtmFechaInicial) To CLng(dtmFechaFinal)
        If Weekday(l) = vbSunday Or Weekday(l) = vbSaturday Then
            DiasFestivos = DiasFestivos + 1
        End If
    Next

End Function

Un bucle desde el primer día hasta el último. La conversión a Long por igualar tipos de variables.
Después evalúo la fecha sin indicar el primer día de la semana para poder utilizar las constantes vbSunday y vbSaturday.

Ese código se pude complicar si tienes una tabla de festivos...

Un saludo


Xavi, un minyó de Terrassa

Mi web
Arriba
seralmo Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 31/Enero/2020
Localización: madrid
Estado: Sin conexión
Puntos: 20
Enlace directo a este mensaje Enviado: 31/Enero/2020 a las 18:22
Buenas tardes, gracias por la ayuda. Correcto, tengo una tabla de festivos que hay que incluir entre las fechas y ademas tengo que hacer otra función donde aparezca el detalle, por ejemplo si son 3 sábados, 4 domingos y 2 festivos. Me podéis ayudar, como puedo incluir los festivos de la lista y que funcion seria para sacar los detalles.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 01/Febrero/2020 a las 09:33
En lugar de que la función devuelva un solo valor, utiliza variables públicas para diferenciar sábados de domingos.
Para los festivos necesitas utilizar una tabla dónde, o bien indicas las fechas una por una (con el mantenimiento que eso conlleva) o bien indicas dia y mes de la festividad para que la tabla te valga para siempre. El problema son siempre las fiestas "moviles": semana santa... pero también existen funciones para calcular eso.

En definitiva la técnica como yo lo haría es:

- Tener una tabla con los campos DiaFestivo y MesFestivo
- Tener una función para calcular la semana santa (aquí tienes una: http://excelgali.foroactivo.com/t155-calcular-semana-santa-y-pascua)
- Utilizar 3 variables para devolver los 3 valores o una esytructura Type
- Tener una función parecida a la anterior dónde:
  + creas un array con todos los festivos del periodo (función DateSerial)
  + recorres las fechas del intervalo y, en cada registro, realizas una evaluación de la fecha:
    * si es sabado incrementas el contador de sábados
    * si es domingo incrementas el contador de domingos
    * si está dentro del array, y no es sábado ni domingo (porque ya estan en cualquiera de los otros contadores), incrementas el contador de festivos.

En esencia esa es la táctica que utilizaría. Para todo ello encontraras literatura abundante. Cuando te encalles con algo puntual, preguntas.
 
Un saludo



Xavi, un minyó de Terrassa

Mi web
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 01/Febrero/2020 a las 10:02
A ver si te ayuda este hilo que abrí hace un tiempo.
http://www.mvp-access.com/foro/buscando-funcion-de-chea_topic84686.html?KW=Sabados
Arriba
seralmo Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 31/Enero/2020
Localización: madrid
Estado: Sin conexión
Puntos: 20
Enlace directo a este mensaje Enviado: 01/Febrero/2020 a las 12:57
Buenas, lo que necesito es incluir en el contador de festivos (sábado y domingos) que hay entre el 01/01/2017 y el 31/12/2017 el festivo 01/01/2019 y sucesivos y después sacar en otra función el detalle de los sábados y domingos y numero de festivos, como por ejemplo 43 sábados, 44 domingos y 4 festivos. Gracias
Arriba
emiliove Ver desplegable
Administrador
Administrador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5694
Enlace directo a este mensaje Enviado: 01/Febrero/2020 a las 14:54
Con la tabla números es fácil hacerlo mira aquí

Saludos.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 01/Febrero/2020 a las 17:22
http://sqlraipon.blogspot.com/2018/03/calculo-de-dias-laborables-entre-fechas_20.html
o

https://www.maximoaccess.com/t11173-resolvidocontar-sabados-entre-duas-datas

Public Function ContaSabados(DataInicio As Date, DataFim As Date) As Long
'By JPaulo ® Maximo Access
Dim ContaDias As Long
Dim PercorreDatas As Date
Dim inConta As Long

    ContaDias = 0
    For PercorreDatas = DataInicio To DataFim
    inConta = Weekday(PercorreDatas)
    '1-Domingo 7-Sábado
    If inConta = 7 Then
     ContaDias = ContaDias + 1
    End If
    Next PercorreDatas
    ContaSabados = ContaDias
    MsgBox ContaSabados


Editado por rokoko - 01/Febrero/2020 a las 17:34
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 01/Febrero/2020 a las 18:20
Con lo que te he puesto justo arriba(ContaSabados) tienes sabados, para domingos la modificas. Para festivos con un DCount  que ataque a la tabla donde guardas los festivos...pero lo dejo para que indages...a mi ya me a salido.Smile
Arriba
seralmo Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 31/Enero/2020
Localización: madrid
Estado: Sin conexión
Puntos: 20
Enlace directo a este mensaje Enviado: 01/Febrero/2020 a las 20:13
Buenas, la función para sacar los sábados y domingos ya me la puso xavi mas arriba, lo que necesito y sigo indagando es como incluir el listado de 10 festivos que tengo. Por otro lado no consigo sacar la función donde se detalle con números y palabras el numero de festivos como puse en el ejemplo (32 sabados, 33 domingos y 3 festivos). Eso es lo que necesito, pero vamos estoy superagradecido por la ayuda que me estáis facilitando todos. Este foro es fantastico para ayudar y que te ayuden, y para seguir aprendiendo dia a dia este lenguaje maravilloso a la par que complicado que es VBA.
Arriba
seralmo Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 31/Enero/2020
Localización: madrid
Estado: Sin conexión
Puntos: 20
Enlace directo a este mensaje Enviado: 02/Febrero/2020 a las 03:11
Buenas noches ya he conseguido con vuestra ayuda incluir mi tabla de festivos. Ahora necesito una funcion que me detalle los dias festivos entre la fecha inicio y la fecha fin. Es decir que en la celda me aparezca por ejemplo 11 sabados 12 domingos 1 festivo. Me podeis ayudar con esta funcion? Muchas gracias
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 02/Febrero/2020 a las 08:33
Has conseguido que por separado te de los resultados que quieres??

Si es asi solo tendrias que asignar esos resultados a un cuadro de texto....

Algo asi.

Me.nombrecuadrotexto= la funcion ...
O
Guardar el resultado de la funcion en una variable y me.nombrecuadrotexto= la varibla
Arriba
seralmo Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 31/Enero/2020
Localización: madrid
Estado: Sin conexión
Puntos: 20
Enlace directo a este mensaje Enviado: 02/Febrero/2020 a las 09:50
No, he conseguido realizar la funcion primera, es decir obtener el total de sabados y domingos entre dos fechas incluidos los dias festivos de la tabla. Ahora necesito el detalle.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 02/Febrero/2020 a las 12:03
El detalle a que llamas?? el resultado de esa funcion?? no acabo de entenderte.....
Arriba
seralmo Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 31/Enero/2020
Localización: madrid
Estado: Sin conexión
Puntos: 20
Enlace directo a este mensaje Enviado: 02/Febrero/2020 a las 12:06
Con el detalle me refiero a que la función tiene que devolver en la celda el detalle de los dias festivos que se comprenden entre esa fecha, es decir x domingos, y sabados y z festivos.

Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable