6 febrero, 2025

OBTENER FECHA DE INICIO Y FIN DE UNA SEMANA INDICANDO EL NÚMERO DE SEMANA ENTRE DOS FECHAS

Hola a todos:

Aunque ya llevo dos post sobre fechas y ya quería dejar de escribir sobre este asunto para entrar en otros temas, recientemente he recibido una consulta que paso a reproducir:

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.

Pues bien, como sabéis hace unos días publiqué un post: OBTENER RELACIÓN DE SEMANAS ENTRE DOS FECHAS CON VBA en el que precisamente con una UDF se generaba el listado de todas las semanas entre dos fechas. Y esto, como habréis podido suponer nos ayudará prácticamente a realizar el trabajo.

De hecho, podemos utilizar parte del código de la UDF para crear una nueva que nos ofrezca la información que necesitamos. Únicamente debemos tener en cuenta lo siguiente:

  • Debemos modificar el código sustituyendo las referencias a la hoja de cálculo por variables.
  • Debemos pasar los datos a una matriz para mostrar la información.

Vamos a suponer el siguiente ejemplo, donde utilizaremos un listado de todas las semanas entre 01/01/2021 y 31/07/2021:

Pues bien, aquí tenemos las la relación de fechas y el número de semanas (esto lo podéis obtener utilizando la función NUM.DE.SEMANA()). Pues bien, este cuadro es únicamente para ilustrar y que podáis ver cómo la función realiza su trabajo correctamente).

Recordemos que lo que estamos buscando es conseguir la fecha inicio y fecha final de una semana a partir del número de la semana. Bien, para hacerlo os propongo este código:

Function FECHA_SEMANAS(inicio As Date, fin As Date, semana As Integer)
    Dim i As Long, iniciomas As Variant, fechafin As Date, MiCadena As String
    Dim MiArray As Variant, Matriz As Variant, j As Long
    If inicio > fin Then Exit Function
    i = 0
    'Generamos relacion de semanas (fecha inicio y fecha fin)
    Do Until iniciomas > fin
        If iniciomas <> vbNullString Then inicio = iniciomas
        If Year(inicio) <> Year(DateSerial(Year(inicio), Month(inicio), Day(inicio) + IIf(Weekday(inicio, 2) < 7, 7 - Weekday(inicio, 2), 0))) And Month(DateSerial(Year(inicio), Month(inicio), Day(inicio) + IIf(Weekday(inicio, 2) < 7, 7 - Weekday(inicio, 2), 0))) = 1 Then
            fechafin = DateSerial(Year(inicio), Month(1), Day(1))
            iniciomas = DateSerial(Year(fechafin), Month(fechafin), Day(fechafin) + 1)
        Else
            fechafin = DateSerial(Year(inicio), Month(inicio), Day(inicio) + IIf(Weekday(inicio, 2) < 7, 7 - Weekday(inicio, 2), 0))
            iniciomas = DateSerial(Year(fechafin), Month(fechafin), Day(fechafin) + 1)
        End If
        i = i + 1
        'Si llegamos a la semana indicada, pasamos la información a función
        If i = semana Then
            MiCadena = inicio & " " & fechafin
            Matriz = Split(MiCadena, " ")
            ReDim MiArray(0 To UBound(Matriz))
            For j = 0 To UBound(Matriz)
                MiArray(j) = Matriz(j)
            Next j
            FECHA_SEMANAS = MiArray
            Exit Do
        End If
    Loop
End Function

Y ahora, por ejemplo, supongamos que queremos los datos de la semana 11 del rango determinado:

Como podéis observar el resultado de la función devuelve el rango de la semana 11 y solo tenéis que introducir fechas de inicio y final del tramo y número de semana para obtener el rango de la semana.

Y esto es todo, espero que sea de interés y utilidad.

Puedes descargar el archivo pulsando aquí: OBTENER FECHA DE INICIO Y FIN DE UNA SEMANA INDICANDO EL NÚMERO DE 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

Un comentario en «OBTENER FECHA DE INICIO Y FIN DE UNA SEMANA INDICANDO EL NÚMERO DE SEMANA ENTRE DOS FECHAS»

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