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.

ArrowRawData

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.

ArrowMainSheet

Al ejecutar la macro, ordenará 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.

ArrowAfterRunningMacro

ArrowOutputSheet

Explicación lógica

La macro toma la entrada para las fechas de inicio y finalización de las celdas J8 y J9, respectivamente. Esta macro, en primer lugar, ordena los datos en la hoja «RawData», según la columna A en orden ascendente. Hemos ordenado los datos de acuerdo con 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 en la columna A debe ser mayor o igual que la fecha de inicio y la segunda condición es que el valor en 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 usa 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 usar la constante xlDescending. El encabezado se usa 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 el 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 incluido comentarios junto con los códigos en la macro.

Siga a continuación el código

Sub CopyDataBasedOnDate()

'Disabling screen updates

Application.ScreenUpdating = False

'Declaring two variables of Date data type

Dim StartDate, EndDate As Date

'Declaring variable for worksheet object

Dim MainWorksheet As Worksheet

'Initializing the Date variables with starting date from cell J8

'and end date from cell J9 of "Macro" sheet

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

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

'Initializing worksheet object with "RawData" worksheet

Set MainWorksheet = Worksheets("RawData")

'Activating the worksheet object

MainWorksheet.Activate

'Sorting the data by date in column A in ascending order

Range("A1").CurrentRegion.Sort _

key1:=Range("A1"), order1:=xlAscending, _

Header:=xlYes

'Filter the data based on date range between starting date and end date

Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= _

">=" & StartDate, Operator:=xlAnd, Criteria2:="<=" & EndDate

'Copy the filter data

ActiveSheet.AutoFilter.Range.Copy

'Inserting new worksheet after the last worksheet in the workbook

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

'Pasting the copied data

ActiveSheet.Paste

'Auto adjusting the size of selected columns

Selection.Columns.AutoFit

Range("A1").Select



'Activating the "RawData" sheet

MainWorksheet.Activate

'Removing filter from the worksheet which we applied earlier

Selection.AutoFilter

Sheets("Macro").Activate

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]