Calcular una fecha de inicio de la semana usando VBA en Microsoft Excel
En este artículo, crearemos una función definida por el usuario (UDF) o función personalizada para encontrar la primera fecha de una semana determinada, considerando el lunes como el primer día de la semana. Crearemos una función personalizada que devolverá la primera fecha de la semana después del número especificado de semanas del año, mes o fecha dado.
En este artículo, los datos brutos consisten en número de semana, día, mes y año.
La función personalizada tendrá el número de día, mes, año y semana como parámetros de entrada. Según estos valores de entrada, la función devolverá el primer día de la semana.
La sintaxis de la función personalizada “WeekStartDate” es WeekStartDate (WeekNumber, Year, Month, Day)
El mes y el día son parámetros opcionales.
Esta función asume el lunes como primer día de la semana.
La función WeekStartDate devuelve el primer día de la semana después del número especificado de semanas a partir de la fecha especificada por el parámetro Día, Mes y Año. Si no se especifica el parámetro Día, devolverá el primer día de la semana después del número de semanas especificado en el mes especificado por el parámetro Mes del año especificado. Si no se especifican los parámetros de mes y día, devolverá el primer día de la semana especificada del año.
Explicación lógica
Hemos creado la función personalizada «WeekStartDate» para encontrar el primer día de la semana. La lógica utilizada para esta función es que si el día de la semana de la fecha dada es menor que 4, entonces la semana actual se considerará como la primera semana. De lo contrario, si el día de la semana de la fecha indicada es mayor que 4, la próxima semana se considerará como la primera semana.
Explicación del código
DateSerial (intYear, intMonth, intDay)
La función DateSerial se utiliza para obtener la fecha del valor del día, mes y año.
Día de la semana (FromDate, vbMonday)
La función de día de la semana se utiliza para obtener el día de la semana para la fecha, considerando el lunes como el primer día de la semana.
If WKDay> 4 Then WDays = (7 intWeek) – WKDay + 1 Else WDays = (7 (intWeek – 1)) – WKDay + 1 End If Above código se utiliza para encontrar el número de días que se incluirán para encontrar la primera fecha de la semana. Si el valor del día de la semana es inferior a 4, la semana actual se considera la primera semana. Es por eso que hemos restado 1 es decir
(semana int – 1). Se agrega 1 ya que queremos encontrar el primer día de la semana.
Siga a continuación el código
Option Explicit Function WeekStartDate(intWeek As Integer, intYear As Integer, Optional intMonth As Integer = 1, Optional intDay As Integer = 1) 'Declaring variables Dim FromDate As Date, lngAdd As Long Dim WKDay, WDays As Integer WDays = 0 'Checking that year should not have negative value If intYear < 1 Then WeekStartDate = "Year cann't have negative value" Exit Function End If 'Calculating the date FromDate = DateSerial(intYear, intMonth, intDay) 'Getting the week day of the specified date considering monday as first day WKDay = Weekday(FromDate, vbMonday) 'If value of week day is less than 4 then subtracting 1 from the week number If WKDay > 4 Then WDays = (7 * intWeek) - WKDay + 1 Else WDays = (7 * (intWeek - 1)) - WKDay + 1 End If 'Return the first day of the week WeekStartDate = FromDate + WDays End Function
Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.
Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]