Copier des données ayant la date entre deux dates définies à l’aide d’une nouvelle feuille de calcul VBA
Dans cet article, nous allons créer une macro pour extraire les données d’une feuille de calcul de données brutes vers une nouvelle feuille de calcul, en fonction de la plage de dates spécifiée.
Les données brutes se composent de trois colonnes. La première colonne contient les dates, la deuxième colonne contient les noms des agents et la troisième colonne contient le nombre de ventes effectuées par un agent à cette date particulière.
Avant d’exécuter la macro, deux entrées sont requises d’un utilisateur. L’utilisateur doit définir la date de début et de fin. En fonction des dates spécifiées, la macro extrait les données entre la plage de dates définie dans une nouvelle feuille de calcul.
Après avoir spécifié les dates de début et de fin, l’utilisateur doit cliquer sur le bouton «Soumettre» pour exécuter la macro.
Lors de l’exécution de la macro, il triera les données dans la feuille «RawData», en fonction de la colonne de date et extraira les données en fonction de la plage de dates spécifiée dans la feuille de calcul nouvellement insérée.
Explication logique
La macro prend les entrées pour les dates de début et de fin des cellules J8 et J9, respectivement. Cette macro trie d’abord les données de la feuille «RawData», en fonction de la colonne A dans l’ordre croissant. Nous avons trié les données en fonction des valeurs de date, afin de pouvoir copier les données dans une seule plage, après avoir appliqué un filtre pour la plage définie.
Après avoir trié les données, appliquez le filtre dessus. Le filtre appliqué est basé sur deux conditions, la première condition est que la valeur de la colonne A doit être supérieure ou égale à la date de début et la seconde condition est que la valeur de la colonne A doit être inférieure ou égale à la date de fin.
Après avoir appliqué le filtre, la nouvelle feuille de calcul est insérée et les données filtrées y sont copiées et collées.
Explication du code
Range (« A1 »). CurrentRegion.Sort key1: = Range (« A1 »), order1: = xlAscending, Header: = xlYes Le code ci-dessus est utilisé pour trier les données dans la plage définie. Key1 spécifie la colonne en fonction de laquelle les données seront triées. L’ordre de tri est fourni par order1. Nous avons déjà défini l’ordre croissant. Pour définir l’ordre décroissant, on peut utiliser la constante xlDescending. L’en-tête est utilisé pour spécifier si la plage de données contient l’en-tête.
Range (« A1 »). CurrentRegion.AutoFilter Field: = 1, Criteria1: = « > = » & StartDate, Operator: = xlAnd, Criteria2: = « ⇐ » & EndDate Le code ci-dessus est utilisé pour appliquer le filtre sur la plage de données . Field1 spécifie le numéro de colonne sur lequel le filtre sera appliqué. Les critères 1 et 2 définissent les conditions en fonction des données filtrées.
L’opérateur spécifie l’opérateur, qui sera utilisé entre deux conditions.
Worksheets.Add after: = Feuilles de travail (Worksheets.Count)
Le code ci-dessus est utilisé pour insérer la nouvelle feuille de calcul après la dernière feuille de calcul du classeur.
On peut facilement comprendre les codes, car j’ai mis des commentaires avec les codes dans la macro.
Veuillez suivre ci-dessous pour le code
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 vous avez aimé ce blog, partagez-le avec vos amis sur Facebook et Facebook.
Nous serions ravis de vous entendre, faites-nous savoir comment nous pouvons améliorer notre travail et le rendre meilleur pour vous. Écrivez-nous à [email protected]