30 septiembre, 2023

FUNCIÓN PARA EXTRAER UN DETERMINADO DÍA DE LA SEMANA ENTRE DOS FECHAS

Hola a todos, cómo estáis?. Espero que bien.

En el post de hoy y siguiendo con la temática de las fechas, he querido programar una función que sea capaz de mostrar lo siguiente: un determinado día de la semana entre dos fechas, por ejemplo, todos los lunes que existen entre el 01/01/2021 y el 31/01/2021. Y que este resultado lo muestre en una lista en formato fecha.

Pues bien, para hacer esto os propongo la siguiente UDF

Function DIA_SEMANA_ENTRE(inicio As Date, final As Date, dia As Integer)
    Dim i As Long, j As Long, ndias As Long
    Dim Mifecha As Date, MiCadena As String, Matriz As Variant, miArray As Variant
    'días entre las dos fechas
    ndias = DateDiff("D", inicio, final)
    'Generamos día y si coincide lo pasamos el string
    For i = 0 To ndias
        Mifecha = DateAdd("D", i, inicio)
        If Weekday(Mifecha, vbMonday) = dia Then
            MiCadena = Trim(MiCadena & " " & Mifecha)
        End If
    Next i
    'pasamos datos a una matriz y resultado a la función.
    Matriz = Split(MiCadena, " ")
    ReDim miArray(0 To UBound(Matriz))
    For j = 0 To UBound(Matriz)
        miArray(j) = Matriz(j)
    Next j
    DIA_SEMANA_ENTRE = Application.Transpose(miArray)
End Function

Como podéis observar tiene tres argumentos, los dos primeros son la fecha inicial y la fecha final y el tercer argumento es el día que queremos obtener, empieza del 1 al 7 (Lunes a Domingo).

Por ejemplo, con esta función podemos obtener todos los Lunes, Martes, Miércoles, Jueves, Viernes, Sábados y Domingos entre la siguiente fecha: 01/01/2021 al 31/07/2021

Creo que esta imagen vale más que mil palabras.Como se puede apreciar, la fórmula muestra en cada columna la relación específica de días seleccionados.

Esta es una función de matriz dinámica (o derramada) válida para versiones actuales de Office 365, en versiones anteriores se mostrará la fórmula expresada como matricial.

Puedes descargar el enlace pulsando aquí: FUNCIÓN PARA EXTRAER UN DETERMINADO DÍA DE LA SEMANA ENTRE DOS FECHAS

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

4 comentarios en «FUNCIÓN PARA EXTRAER UN DETERMINADO DÍA DE LA SEMANA ENTRE DOS FECHAS»

  1. Muy bien

    Con las fechas, tengo una pregunta, teniendo, por ejemplo, la semana = 32 y el año = 2021, ¿cuál es la fecha de inicio y finalización de la semana? ¿Es posible tener una UDF (VBA) para esto? Sabiendo que la semana comienza el lunes y que la primera semana del año comienza el 01/01 / año

      1. Gracias por tu respuesta, vi tu publicación, pero no respondas a mi pregunta. Lo que se pretende es saber para una semana determinada de un año específico, no todas las semanas para un período determinado.

        No sé si me expliqué bien.

        Saludos

        1. Sí te has explicado perfectamente, por ese motivo he hecho referencia al post anterior dado que haciendo unos cambios en la rutina se puede extraer la información perfectamente.

          No obstante, si mañana tengo tiempo publicaré una entrada con tu duda, por si le puede ayudar a otras personas.

          Saludos.

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies