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.

ArrowRawData

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.

ArrowMainSheet

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.

ArrowAfterRunningMacro

ArrowOutputSheet

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]