Copia de datos que tiene fecha entre dos fechas definidas a nueva hoja de cálculo utilizando VBA
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, 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.
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]