Copiare i dati che hanno data tra due date definite a nuovo foglio di lavoro che utilizzano VBA
In questo articolo, creeremo una macro per estrarre i dati dal foglio di lavoro dei dati grezzi in un nuovo foglio di lavoro, in base all’intervallo di date specificato.
I dati grezzi sono costituiti da tre colonne. La prima colonna contiene le date, la seconda colonna contiene i nomi degli agenti e la terza colonna contiene i numeri delle vendite effettuate da un agente in quella particolare data.
Prima di eseguire la macro, sono richiesti due input da un utente. L’utente deve definire la data di inizio e di fine. In base alle date specificate, la macro estrarrà i dati tra l’intervallo di date definito in un nuovo foglio di lavoro.
Dopo aver specificato le date di inizio e di fine, l’utente deve fare clic sul pulsante “Invia” per eseguire la macro.
Quando si esegue la macro, ordina i dati nel foglio “RawData”, in base alla colonna della data ed estrae i dati in base all’intervallo di date specificato nel foglio di lavoro appena inserito.
Spiegazione logica
La macro prende l’input per le date di inizio e fine dalle celle J8 e J9, rispettivamente. Questa macro innanzitutto ordina i dati nel foglio “RawData”, in base alla colonna A in ordine crescente. Abbiamo ordinato i dati in base ai valori di data, in modo da poter copiare i dati in un unico intervallo, dopo aver applicato il filtro per l’intervallo definito.
Dopo aver ordinato i dati, applica il filtro su di essi. Il filtro applicato si basa su due condizioni, la prima condizione è che il valore nella colonna A deve essere maggiore o uguale alla data di inizio e la seconda condizione è che il valore nella colonna A deve essere inferiore o uguale alla data di fine.
Dopo aver applicato il filtro, il nuovo foglio di lavoro viene inserito e i dati filtrati vengono copiati e incollati al suo interno.
Spiegazione del codice
Range (“A1”). CurrentRegion.Sort key1: = Range (“A1”), order1: = xlAscending, Header: = xlYes Il codice precedente viene utilizzato per ordinare i dati nell’intervallo definito. Key1 specifica la colonna in base alla quale verranno ordinati i dati. L’ordinamento è fornito da order1. Abbiamo già definito l’ordine crescente. Per definire l’ordine discendente, si può usare la costante xlDescending. L’intestazione viene utilizzata per specificare se l’intervallo di dati contiene l’intestazione.
Range (“A1”). CurrentRegion.AutoFilter Field: = 1, Criteria1: = “> =” & StartDate, Operator: = xlAnd, Criteria2: = “⇐” & EndDate Il codice sopra viene utilizzato per applicare il filtro sull’intervallo di dati . Field1 specifica il numero di colonna su cui verrà applicato il filtro. Criteria1 e Criteria2 definiscono le condizioni in base alle quali i dati verranno filtrati.
L’operatore specifica l’operatore, che verrà utilizzato tra due condizioni.
Worksheets.Add after: = Worksheets (Worksheets.Count)
Il codice sopra viene utilizzato per inserire il nuovo foglio di lavoro dopo l’ultimo foglio di lavoro nella cartella di lavoro.
Si possono facilmente capire i codici, poiché ho inserito commenti insieme ai codici nella macro.
Segui sotto per il codice
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
Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook e Facebook.
Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]