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 método abreviado 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.yy.
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.
Primer dia de la semana especifica qué día de la semana debe considerarse 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.
Valor de enumeración |
Valor entero |
Observaciones |
FirstDayOfWeek.System |
0 |
Primer día de la semana especificado en la configuración del sistema |
FirstDayOfWeek.Sunday |
1 |
Domingo (predeterminado) |
FirstDayOfWeek.Monday |
2 |
lunes |
FirstDayOfWeek.Tuesday |
3 |
martes |
FirstDayOfWeek.Wed Wednesday |
4 |
miércoles |
FirstDayOfWeek.Thursday |
5 |
jueves |
FirstDayOfWeek.Friday |
6 |
viernes |
FirstDayOfWeek.Saturday |
7 |
sábado |
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 de 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.
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:
Personaje |
Descripción |
D |
muestra el día como un número sin un cero inicial (1 - 31) |
dd |
muestra el día como un número con un cero a la izquierda (01 - 31) |
ddd |
muestra el día como una abreviatura (dom - sáb) |
dddd |
muestra el día como un nombre completo (domingo - sábado) |
w |
muestra el día de la semana como un número (1 para el domingo al 7 para el sábado) |
ww |
muestra la semana del año como un número (1 - 54) |
metro |
muestra el mes como un número sin un cero inicial (1 - 12) |
mm |
muestra el mes como un número con un cero a la izquierda (01 - 12) |
mmm |
muestra el mes como una abreviatura (enero - diciembre) |
mmmm |
muestra el mes como un nombre de mes completo (enero - diciembre) |
q |
muestra el trimestre del año como un número (1 - 4) |
y |
muestra el día del año como un número (1 - 366) |
aa |
muestra el año como un número de 2 dígitos (00 - 99) |
aaaa |
muestra el año como un número de 4 dígitos (100 - 9999) |
h |
muestra la hora como un número sin ceros a la izquierda (0-23) |
S.S |
muestra la hora como un número con ceros a la izquierda (00-23) |
norte |
muestra el minuto como un número sin ceros a la izquierda (0 - 59) |
nn |
muestra el minuto como un número con ceros a la izquierda (00 - 59) |
s |
muestra el segundo como un número sin ceros a la izquierda (0 - 59) |
ss |
muestra el segundo como un número con ceros a la izquierda (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
Atenuar nueva hoja de trabajo como hoja de trabajo
Establecer NewWorksheet = Worksheets.Add
El código anterior se utiliza para declarar el nombre del objeto de la hoja de trabajo como "Nueva hoja de trabajo". 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.
Para i = StartDate to EndDate
El bucle FOR se utiliza para recorrer desde la fecha de inicio hasta la fecha de finalización.
Si el día de la semana (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á.
StartingRow = 1
InitialRow = StartingRow + 1
La variable StartingRow se usa 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 (StartingRow, 1)
La propiedad Cells se usa para hacer referencia a una celda en 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 a continuación para obtener el código
Option Explicit Sub ExtractWeekdays () 'Declarando dos variables de tipo de datos Fecha Dim StartDate As Date, EndDate As Date' Declarando variable de hoja de trabajo Dim NewWorksheet As Worksheet Dim StartingRow, i As Long 'Obteniendo valores de fecha de inicio y fecha de finalización de la hoja de trabajo StartDate = Sheets ( "Macro"). Rango ("J8"). Valor EndDate = Hojas ("Macro"). Rango ("J9"). Valor 'Inicializando el número de fila inicial para la salida StartingRow = 1' Insertando una nueva hoja de trabajo Establecer NewWorksheet = Worksheets. Agregar para i = StartDate To EndDate 'Usando el método Weekday para verificar si es Weekday o weekand If Weekday (i, 2) <6 Then' Insertar valor en la hoja de trabajo recién insertada 'El método de formato se usa para formatear el valor de fecha NewWorksheet.Cells ( StartingRow, 2) = Format (i, "dd.mm.yy") NewWorksheet.Cells (StartingRow, 1) = Format (i, "ddd") 'Actualizando el valor de la variable StartingRow para pasar a la siguiente fila StartingRow = StartingRow + 1 End If 'Insertar una fila en blanco para el fin de semana If Weekday (i, 2) = 7 Then StartingRow = StartingRow + 1 End If N ext i Establecer NewWorksheet = Nothing End Sub
Si te gustó este blog, compártelo con tus amigos en Facebook. Además, puede seguirnos en Twitter y Facebook.
Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos al sitio de correo electrónico