Copiați datele care au o dată între două date definite în foaia de lucru nouă utilizând VBA

Anonim

În acest articol, vom crea o macrocomandă pentru a extrage date din foaia de lucru de date brute într-o foaie de lucru nouă, pe baza intervalului de date specificat.

Datele brute sunt formate din trei coloane. Prima coloană conține date, a doua coloană conține nume de agenți și a treia coloană conține cifre de vânzări realizate de un agent la acea dată anume.

Înainte de a rula macro-ul, sunt necesare două intrări de la un utilizator. Utilizatorul trebuie să definească data de începere și de sfârșit. Pe baza datelor specificate, macrocomanda va extrage datele între intervalul de date definit într-o nouă foaie de lucru.

După specificarea datelor de începere și de sfârșit, utilizatorul trebuie să facă clic pe butonul „Trimite” pentru a executa macrocomanda.

La rularea macro-ului, va sorta datele în foaia „RawData”, pe baza coloanei de date și va extrage datele pe baza intervalului de date specificat în foaia de lucru nou inserată.

Explicație logică

Macro preia datele de început și de sfârșit din celulele J8 și respectiv J9. Această macrocomandă sortează mai întâi datele în foaia „RawData”, pe baza coloanei A în ordine crescătoare. Am sortat datele în funcție de valorile datei, astfel încât să putem copia datele într-un singur interval, după aplicarea filtrului pentru intervalul definit.

După sortarea datelor, aplicați filtrul peste acesta. Filtrul aplicat se bazează pe două condiții, prima condiție este ca valoarea din coloana A să fie mai mare sau egală cu data de începere și a doua condiție este ca valoarea din coloana A să fie mai mică sau egală cu data de încheiere.

După aplicarea filtrului, noua foaie de lucru este inserată și datele filtrate sunt copiate și lipite în ea.

Explicarea codului

Range ("A1"). CurrentRegion.Sort key1: = Range ("A1"), order1: = xlCscending, Header: = xlDa

Codul de mai sus este utilizat pentru a sorta datele în intervalul definit. Cheia1 specifică coloana pe baza căreia vor fi sortate datele. Ordinea de sortare este furnizată de order1. Am definit deja ordinea ascendentă. Pentru a defini ordinea descendentă, se poate utiliza constanta xlDescending. Antet este folosit pentru a specifica dacă intervalul de date conține antetul.

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

Codul de mai sus este utilizat pentru a aplica filtrul peste intervalul de date. Câmpul 1 specifică numărul coloanei pe care se va aplica filtrul. Criteriile 1 și Criteriile 2 definesc condițiile pe baza cărora se vor filtra datele. Operatorul specifică operatorul, care va fi utilizat între două condiții.

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

Codul de mai sus este folosit pentru a insera noua foaie de lucru după ultima foaie de lucru din registrul de lucru.

Se pot înțelege cu ușurință codurile, deoarece am pus comentarii împreună cu codurile din macro.

Vă rugăm să urmați codul de mai jos

 Sub CopyDataBasedOnDate () 'Dezactivarea actualizărilor de ecran Application.ScreenUpdating = False' Declararea a două variabile ale tipului de date Date Dim StartDate, EndDate as Date 'Declararea variabilei pentru obiectul foii de lucru Dim MainWorksheet As Sheet' Inițializarea variabilelor de dată cu data de pornire din celula J8 'și data de încheiere din celula J9 a foii "Macro" StartDate = Foi ("Macro"). Interval ("J8"). Valoare EndDate = Foi ("Macro"). Interval ("J9"). Valoare 'Inițializarea obiectului cu " RawData "worksheet Set MainWorksheet = Worksheets (" RawData ") 'Activarea obiectului foii de lucru MainWorksheet.Activate' Sortarea datelor după dată în coloana A în ordine crescătoare Range (" A1 "). CurrentRegion.Sort _ key1: = Range (" A1 "), order1: = xlAscending, _ Header: = xlYes 'Filtrați datele pe baza intervalului de date între data de început și data de sfârșit Range (" A1 "). CurrentRegion.AutoFilter Field: = 1, Criteria1: = _"> = " & StartDate, Operator: = xlAnd, Criteria2: = "<=" & EndDate 'Copiați datele filtrului ActiveSheet.AutoFilter.Range.Copy' Inserting new WOR ksheet după ultima foaie de lucru din registrul de lucru Worksheets.Add after: = Worksheets (Worksheets.Count) 'Lipirea datelor copiate ActiveSheet.Paste' Reglarea automată a dimensiunii coloanelor selectate Selection.Columns.AutoFit Range ("A1"). Selectați ' Activarea foii „RawData” MainWorksheet.Activate 'Eliminarea filtrului din foaia de lucru pe care am aplicat-o anterior Selection.AutoFilter Sheets („Macro”). Activați End Sub 

Dacă ți-a plăcut acest blog, distribuie-l prietenilor tăi de pe Facebook. De asemenea, ne puteți urmări pe Twitter și Facebook.

Ne-ar plăcea să aflăm de la dvs., să ne anunțați cum putem îmbunătăți munca noastră și o putem îmbunătăți. Scrieți-ne pe site-ul de e-mail