Ingrese los días de la semana de lunes a viernes en una hoja de trabajo usando VBA en Microsoft Excel

Anonim

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