In dit artikel zullen we een macro maken om gegevens uit het werkblad met onbewerkte gegevens te extraheren naar een nieuw werkblad, op basis van het opgegeven datumbereik.
Ruwe data bestaat uit drie kolommen. De eerste kolom bevat datums, de tweede kolom bevat de namen van agenten en de derde kolom bevat het aantal verkopen dat door een agent op die specifieke datum is gedaan.
Voordat de macro wordt uitgevoerd, zijn twee invoer van een gebruiker vereist. De gebruiker moet de start- en einddatum definiëren. Op basis van de opgegeven datums extraheert de macro de gegevens tussen het gedefinieerde datumbereik naar een nieuw werkblad.
Na het specificeren van de start- en einddatum, moet de gebruiker op de knop "Verzenden" klikken om de macro uit te voeren.
Bij het uitvoeren van de macro sorteert het gegevens in het blad "RawData", op basis van de datumkolom en extraheert het gegevens op basis van het opgegeven datumbereik naar het nieuw ingevoegde werkblad.
Logische uitleg
Macro neemt invoer voor start- en einddatums van respectievelijk cellen J8 en J9. Deze macro sorteert eerst de gegevens in het blad "RawData", op basis van kolom A in oplopende volgorde. We hebben de gegevens gesorteerd op datumwaarden, zodat we de gegevens in één bereik kunnen kopiëren, na het toepassen van een filter voor het gedefinieerde bereik.
Pas na het sorteren van de gegevens het filter erop toe. Het toegepaste filter is gebaseerd op twee voorwaarden. De eerste voorwaarde is dat de waarde in kolom A groter is dan of gelijk is aan de startdatum en de tweede voorwaarde is dat de waarde in kolom A kleiner is dan of gelijk is aan de einddatum.
Nadat het filter is toegepast, wordt het nieuwe werkblad ingevoegd en worden gefilterde gegevens erin gekopieerd en geplakt.
Code uitleg
Range("A1").CurrentRegion.Sort key1:=Bereik("A1"), order1:=xlAscending, Header:=xlJa
Bovenstaande code wordt gebruikt om gegevens in het gedefinieerde bereik te sorteren. Key1 specificeert de kolom op basis waarvan gegevens worden gesorteerd. De sorteervolgorde wordt gegeven op bestelling1. We hebben de oplopende volgorde al gedefinieerd. Om aflopende volgorde te definiëren, kan men xlDescending constante gebruiken. Header wordt gebruikt om aan te geven of het gegevensbereik de header bevat.
Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= ">=" & StartDate, Operator:=xlAnd, Criteria2:="<=" & EndDate
Bovenstaande code wordt gebruikt om een filter toe te passen op het gegevensbereik. Veld1 specificeert het kolomnummer waarop het filter wordt toegepast. Criteria1 en Criteria2 definiëren de voorwaarden op basis waarvan gegevens worden gefilterd. Operator specificeert de operator, die tussen twee voorwaarden wordt gebruikt.
Worksheets.Add after:=Worksheets(Worksheets.Count)
Bovenstaande code wordt gebruikt om het nieuwe werkblad in te voegen na het laatste werkblad in de werkmap.
Je kunt de codes gemakkelijk begrijpen, omdat ik opmerkingen bij de codes in de macro heb gezet.
Volg hieronder voor de code:
Sub CopyDataBasedOnDate() 'Schermupdates uitschakelen Application.ScreenUpdating = False 'Declareren van twee variabelen van het datumgegevenstype Dim StartDate, EndDate As Date 'Declareren van variabele voor werkbladobject Dim MainWorksheet As Worksheet 'Initialiseren van de datumvariabelen met startdatum uit cel J8 'en einddatum van cel J9 van het blad "Macro" StartDate = Sheets("Macro").Range("J8").Value EndDate = Sheets("Macro").Range("J9").Waarde 'Werkbladobject initialiseren met " RawData" werkblad Set MainWorksheet = Worksheets("RawData") 'Activeren van het werkblad object MainWorksheet.Activate 'Sorteren van de gegevens op datum in kolom A in oplopende volgorde Range("A1").CurrentRegion.Sort _ key1:=Range("A1 "), order1:=xlAscending, _ Header:=xlYes 'Filter de gegevens op basis van datumbereik tussen begindatum en einddatum Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= _ ">=" & StartDate, Operator:=xlAnd, Criteria2:="<=" & EndDate 'Kopieer de filtergegevens ActiveSheet.AutoFilter.Range.Copy 'Nieuw werk invoegen ksheet na het laatste werkblad in de werkmap Worksheets.Add after:=Worksheets(Worksheets.Count) 'Plakken van de gekopieerde gegevens ActiveSheet.Paste 'Automatisch aanpassen van de grootte van geselecteerde kolommen Selection.Columns.AutoFit Range("A1").Select ' Activeren van het "RawData"-blad MainWorksheet.Activeer 'Filter verwijderen uit het werkblad dat we eerder hebben toegepast Selection.AutoFilter Sheets("Macro").Activate End Sub
Als je deze blog leuk vond, deel hem dan met je vrienden op Facebook. Ook kunt u ons volgen op Twitter en Facebook.
We horen graag van u, laat ons weten hoe we ons werk kunnen verbeteren en voor u kunnen verbeteren. Schrijf ons op de e-mailsite