Copie datos que tengan fecha entre dos fechas definidas a una nueva hoja de trabajo usando VBA

Tabla de contenido

En este artículo, crearemos una macro para extraer datos de la hoja de trabajo de datos sin procesar a una nueva hoja de trabajo, según el rango de fechas especificado.

Los datos brutos constan de tres columnas. La primera columna contiene las fechas, la segunda columna contiene los nombres de los agentes y la tercera columna contiene el número de ventas realizadas por un agente en esa fecha en particular.

Antes de ejecutar la macro, se requieren dos entradas de un usuario. El usuario debe definir la fecha de inicio y finalización. Según las fechas especificadas, la macro extraerá los datos entre el rango de fechas definido a una nueva hoja de trabajo.

Después de especificar las fechas de inicio y finalización, el usuario debe hacer clic en el botón "Enviar" para ejecutar la macro.

Al ejecutar la macro, clasificará los datos en la hoja "RawData", según la columna de fecha y extraerá los datos según el rango de fechas especificado a la hoja de trabajo recién insertada.

Explicación lógica

La macro toma la entrada para las fechas de inicio y finalización de las celdas J8 y J9, respectivamente. En primer lugar, esta macro ordena los datos en la hoja "RawData", basándose en la columna A en orden ascendente. Hemos ordenado los datos según los valores de fecha, de modo que podamos copiar los datos en un solo rango, después de aplicar el filtro para el rango definido.

Después de ordenar los datos, aplique el filtro sobre ellos. El filtro aplicado se basa en dos condiciones, la primera condición es que el valor de la columna A debe ser mayor o igual que la fecha de inicio y la segunda condición es que el valor de la columna A debe ser menor o igual que la fecha de finalización.

Después de aplicar el filtro, se inserta la nueva hoja de trabajo y los datos filtrados se copian y pegan en ella.

Explicación del código

Rango ("A1"). CurrentRegion.Sort key1: = Rango ("A1"), order1: = xlAscending, Header: = xlYes

El código anterior se utiliza para ordenar los datos en el rango definido. Key1 especifica la columna según la cual se ordenarán los datos. El orden de clasificación se proporciona por order1. Ya hemos definido el orden ascendente. Para definir el orden descendente, se puede utilizar la constante xlDescending. El encabezado se utiliza para especificar si el rango de datos contiene el encabezado.

Rango ("A1"). CurrentRegion.AutoFilter Field: = 1, Criteria1: = "> =" & StartDate, Operator: = xlAnd, Criteria2: = "<=" & EndDate

El código anterior se usa para aplicar un filtro sobre el rango de datos. Field1 especifica el número de columna en la que se aplicará el filtro. Criteria1 y Criteria2 definen las condiciones en función de los datos que se filtrarán. Operador especifica el operador, que se utilizará entre dos condiciones.

Worksheets.Add after: = Worksheets (Worksheets.Count)

El código anterior se usa para insertar la nueva hoja de trabajo después de la última hoja de trabajo en el libro de trabajo.

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

Siga a continuación para obtener el código

 Sub CopyDataBasedOnDate () 'Deshabilitando actualizaciones de pantalla Application.ScreenUpdating = False' Declarando dos variables del tipo de datos Fecha Dim StartDate, EndDate As Date 'Declarando variable para el objeto de hoja de trabajo Dim MainWorksheet As Worksheet' Inicializando las variables de fecha con fecha de inicio desde la celda J8 'y fecha de finalización de la celda J9 de la hoja "Macro" StartDate = Sheets ("Macro"). Range ("J8"). Value EndDate = Sheets ("Macro"). Range ("J9"). Value 'Inicializando el objeto de la hoja de trabajo con " RawData "hoja de trabajo Set MainWorksheet = Worksheets (" RawData ") 'Activando el objeto de hoja de trabajo MainWorksheet.Activate' Ordenar los datos por fecha en la columna A en orden ascendente Rango (" A1 "). CurrentRegion.Sort _ key1: = Rango (" A1 "), order1: = xlAscending, _ Header: = xlYes 'Filtra los datos según el rango de fechas entre la fecha de inicio y el rango de fechas de finalización (" A1 "). CurrentRegion.AutoFilter Field: = 1, Criteria1: = _"> = " & StartDate, Operator: = xlAnd, Criteria2: = "<=" & EndDate 'Copiar los datos del filtro ActiveSheet.AutoFilter.Range.Copy' Insertar nuevo trabajo ksheet después de la última hoja de trabajo en el libro de trabajo Worksheets.Add after: = Worksheets (Worksheets.Count) 'Pegando los datos copiados ActiveSheet.Paste' Ajuste automático del tamaño de las columnas seleccionadas Selection.Columns.AutoFit Range ("A1"). Seleccione ' Activando la hoja "RawData" MainWorksheet.Activate 'Eliminando el filtro de la hoja de trabajo que aplicamos anteriormente Selection.AutoFilter Sheets ("Macro"). Activar 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

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave