Introduzca la semana L – vie en una hoja de cálculo utilizando VBA en Microsoft Excel
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.
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.
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]