En este artículo, crearemos una macro para extraer los días de la semana entre dos fechas.

En este ejemplo, tenemos que especificar la fecha de inicio y la fecha de finalización antes de ejecutar la macro. Macro elige el valor de la fecha de inicio de la celda J8 y el valor de la fecha de finalización de la celda J9. Después de especificar la fecha de inicio y finalización, la macro se puede ejecutar presionando el botón «Enviar» o presionando las teclas de acceso directo Alt + F8.

ArrowMainSheet

Al ejecutar la macro, devolverá los días de la semana entre dos fechas en una nueva hoja. La hoja de trabajo recién insertada contiene los días de la semana en la columna A, seguidos de la fecha respectiva en la columna B. La fecha de salida en la columna B estará en formato dd.mm.aa

Cada semana irá seguida de una fila en blanco para diferenciar entre dos semanas consecutivas.

ArrowAfterRunningMacro

Explicación lógica

En la macro, hemos utilizado la función Día de la semana para diferenciar entre días laborables y fines de semana. La función de formato se utiliza para mostrar la fecha en el formato requerido.

Función de día de la semana

La función Weekday devuelve un valor entero que representa el día de la semana.

Sintaxis

Día de la semana (Date_Value, [First_Day_Of_Week])

Date_Value especifica el valor de fecha para el que desea encontrar el día de la semana.

First_Day_Of_Week especifica qué día de la semana se considerará como el primer día de la semana. Toma un valor entero o el valor elegido de la enumeración FirstDayOfWeek como entrada. Si no se especifica ningún valor, se utiliza FirstDayOfWeek.Sunday como valor predeterminado.

Enumeration value

Integer value

Remarks

FirstDayOfWeek.System

0

First day of week specified in system

settings

FirstDayOfWeek.Sunday

1

Sunday (default)

FirstDayOfWeek.Monday

2

Monday

FirstDayOfWeek.Tuesday

3

Tuesday

FirstDayOfWeek.Wednesday

4

Wednesday

FirstDayOfWeek.Thursday

5

Thursday

FirstDayOfWeek.Friday

6

Friday

FirstDayOfWeek.Saturday

7

Saturday

Como se ve en el código de la macro, hemos utilizado Weekday (i, 2) para especificar el lunes como primer día de la semana.

Función de formato

La función Formato toma una expresión de fecha como entrada y la devuelve como una cadena formateada.

Sintaxis de la función de formato

Formato (Date_Value, formato)

Date_Value especifica el valor del tipo de datos de fecha.

El formato utiliza un valor de cadena para especificar qué tipo de formato de fecha se requiere.

La siguiente tabla define algunos caracteres populares que se pueden usar para crear formatos de fecha / hora requeridos:

Character

Description

d

displays the day as a number without a leading zero (1–31)

dd

displays the day as a number with a leading zero (01–31)

ddd

displays the day as an abbreviation (Sun–Sat)

dddd

displays the day as a full name (Sunday–Saturday)

w

displays the day of the week as a number (1 for Sunday through 7 for

Saturday)

ww

displays the week of the year as a number (1–54)

m

displays the month as a number without a leading zero (1–12)

mm

displays the month as a number with a leading zero (01–12)

mmm

displays the month as an abbreviation (Jan–dec)

mmmm

displays the month as a full month name (January–december)

q

displays the quarter of the year as a number (1–4)

y

displays the day of the year as a number (1–366)

yy

displays the year as a 2-digit number (00–99)

yyyy

displays the year as a 4-digit number (100–9999)

h

displays the hour as a number without leading zeros (0–23)

hh

displays the hour as a number with leading zeros (00–23)

n

displays the minute as a number without leading zeros (0–59)

nn

displays the minute as a number with leading zeros (00–59)

s

displays the second as a number without leading zeros (0–59)

ss

displays the second as a number with leading zeros (00–59)

Para dejar una fila en blanco al final de cada semana, hemos verificado los domingos usando la función de día de la semana e incrementamos el valor de la variable «StartingRow» en 1 para que la siguiente fila permanezca vacía.

Como se ve en el código de la macro, hemos utilizado la función Format dos veces de diferentes formas. En primer lugar, hemos utilizado Format (i, «ddd») para obtener el día de la semana y, en segundo lugar, hemos utilizado Format (i, «dd.mm.yy») para obtener la fecha en formato dd.mm.yyyy.

Explicación del código

Dim NewWorksheet As Worksheet Set NewWorksheet = Worksheets.Add El código anterior se utiliza para declarar el nombre del objeto Worksheet como “NewWorksheet”.

El método Worksheets.Add se utiliza para agregar la nueva hoja de trabajo a la colección Worksheets. La instrucción Set se usa para inicializar el objeto declarado con la hoja recién insertada.

For i = StartDate To EndDate El bucle FOR se utiliza para recorrer desde la fecha de inicio hasta la fecha de finalización.

Si Weekday (i, 2) <6, entonces la instrucción IF se usa para verificar la condición y ejecutar el código según la condición. La condición anterior verificará el retorno de valor mediante la función Día de la semana. Si es menor que 6, la condición IF devuelve verdadero y el código dentro de la instrucción IF se ejecutará. De lo contrario, se omitirá.

InitialRow = 1 StartingRow = StartingRow + 1 La variable StartingRow se utiliza para moverse por las filas de la hoja de trabajo. Al principio, la variable se inicializa en la primera fila. Con cada ejecución exitosa de la instrucción IF, el valor de la variable se incrementa en 1, moviéndose a la siguiente fila en la hoja.

Celdas (InitialRow, 1)

La propiedad Cells se usa para hacer referencia a una celda particular en la hoja de trabajo.

Las celdas (número_fila, número_columna) se pueden usar para hacer referencia a cualquier celda en la hoja de trabajo ingresando un número de fila y un número de columna en particular como parámetros. En el código Cells (StartingRow, 1), 1 especifica la primera columna y la variable «StartingRow» define el número de fila.

Uno puede entender fácilmente los códigos ya que he incluido comentarios junto con códigos en la macro.

Siga el código a continuación

Option Explicit

Sub ExtractWeekdays()

'Declaring two variables of Date data type

Dim StartDate As Date, EndDate As Date

'Declaring worksheet variable

Dim NewWorksheet As Worksheet

Dim StartingRow, i As Long



'Getting start date and end date values from worksheet

StartDate = Sheets("Macro").Range("J8").Value

EndDate = Sheets("Macro").Range("J9").Value

'Initializing the starting row number for output

StartingRow = 1

'Inserting new worksheet

Set NewWorksheet = Worksheets.Add

For i = StartDate To EndDate



'Using Weekday method to check whether it is Weekday or weekand

If Weekday(i, 2) < 6 Then



'Inserting value on newly inserted worksheet

'Format method is used for formatting the date value

NewWorksheet.Cells(StartingRow, 2) = Format(i, "dd.mm.yy")

NewWorksheet.Cells(StartingRow, 1) = Format(i, "ddd")



'Updating StartingRow variable value for moving to next row

StartingRow = StartingRow + 1

End If



'Inserting blank row for weekend

If Weekday(i, 2) = 7 Then

StartingRow = StartingRow + 1

End If

Next i

Set NewWorksheet = Nothing

End Sub

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]