W tym artykule utworzymy makro do wyodrębniania danych z nieprzetworzonego arkusza danych do nowego arkusza na podstawie określonego zakresu dat.
Surowe dane składają się z trzech kolumn. Pierwsza kolumna zawiera daty, druga kolumna zawiera nazwiska agentów, a trzecia kolumna zawiera numery sprzedaży dokonanych przez agenta w danym dniu.
Przed uruchomieniem makra wymagane są dwa dane wejściowe od użytkownika. Użytkownik musi zdefiniować datę rozpoczęcia i zakończenia. Na podstawie określonych dat makro wyodrębni dane ze zdefiniowanego zakresu dat do nowego arkusza.
Po określeniu daty rozpoczęcia i zakończenia, użytkownik musi kliknąć przycisk „Prześlij”, aby wykonać makro.
Po uruchomieniu makra posortuje dane w arkuszu „RawData” na podstawie kolumny daty i wyodrębni dane na podstawie określonego zakresu dat do nowo wstawionego arkusza.
Wyjaśnienie logiczne
Makro pobiera dane wejściowe dla dat rozpoczęcia i zakończenia odpowiednio z komórek J8 i J9. To makro najpierw sortuje dane w arkuszu „RawData”, na podstawie kolumny A w kolejności rosnącej. Dane posortowaliśmy według wartości dat, dzięki czemu po zastosowaniu filtra dla zdefiniowanego zakresu możemy skopiować dane w jednym zakresie.
Po posortowaniu danych zastosuj nad nimi filtr. Zastosowany filtr jest oparty na dwóch warunkach, pierwszym warunkiem jest to, że wartość w kolumnie A powinna być większa lub równa dacie rozpoczęcia, a drugim warunkiem jest to, że wartość w kolumnie A powinna być mniejsza lub równa dacie zakończenia.
Po zastosowaniu filtra nowy arkusz jest wstawiany, a przefiltrowane dane są do niego kopiowane i wklejane.
Wyjaśnienie kodu
Zakres("A1").CurrentRegion.Sort key1:=Range("A1"), kolejność1:=xlRosnąco, Nagłówek:=xlTak
Powyższy kod służy do sortowania danych w zdefiniowanym zakresie. Key1 określa kolumnę, według której sortowane będą dane. Kolejność sortowania zapewnia order1. Zdefiniowaliśmy już kolejność rosnącą. Do zdefiniowania kolejności malejącej można użyć stałej xlDescending. Nagłówek służy do określenia, czy zakres danych zawiera nagłówek.
Zakres("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= ">=" & Data początkowa, Operator:=xlAnd, Criteria2:="<=" & Data końcowa
Powyższy kod służy do zastosowania filtru w zakresie danych. Pole 1 określa numer kolumny, na której zostanie zastosowany filtr. Kryteria1 i Kryteria2 definiują warunki, na podstawie których dane będą filtrowane. Operator określa operator, który będzie używany między dwoma warunkami.
Worksheets.Add after:=Worksheets(Worksheets.Count)
Powyższy kod służy do wstawiania nowego arkusza roboczego po ostatnim arkuszu w skoroszycie.
Kody można łatwo zrozumieć, ponieważ umieściłem komentarze wraz z kodami w makrze.
Proszę postępować zgodnie z poniższym kodem!
Sub CopyDataBasedOnDate() 'Wyłączanie aktualizacji ekranu Application.ScreenUpdating = False 'Deklarowanie dwóch zmiennych typu danych Date Dim StartDate, EndDate As Date 'Deklarowanie zmiennej dla obiektu arkusza Dim MainWorksheet As Worksheet 'Inicjowanie zmiennych Date z datą początkową z komórki J8 'i data zakończenia z komórki J9 arkusza „Makro” StartDate = Sheets("Macro").Range("J8").Value EndDate = Sheets("Macro").Range("J9").Value 'Inicjowanie obiektu arkusza za pomocą " RawData" arkusz Set MainWorksheet = Worksheets("RawData") 'Aktywacja obiektu arkusza MainWorksheet.Activate 'Sortowanie danych według daty w kolumnie A w porządku rosnącym Range("A1").CurrentRegion.Sort _ key1:=Range("A1 "), order1:=xlAscending, _ Header:=xlYes 'Przefiltruj dane na podstawie zakresu dat od daty rozpoczęcia do daty zakończenia Zakres("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= _ ">=" & StartDate, Operator:=xlAnd, Criteria2:="<=" & EndDate 'Skopiuj dane filtra ActiveSheet.AutoFilter.Range.Copy 'Wstawianie nowego pliku ksheet po ostatnim arkuszu w skoroszycie Worksheets.Add after:=Worksheets(Worksheets.Count) 'Wklejanie skopiowanych danych ActiveSheet.Paste 'Automatyczne dostosowywanie rozmiaru wybranych kolumn Selection.Columns.AutoFit Range("A1").Select ' Aktywacja arkusza "RawData" MainWorksheet.Activate 'Usunięcie filtra z arkusza, który zastosowaliśmy wcześniej Selection.AutoFilter Sheets("Macro").Activate End Sub
Jeśli podobał Ci się ten blog, podziel się nim ze znajomymi na Facebooku. Możesz również śledzić nas na Twitterze i Facebooku.
Chcielibyśmy usłyszeć od Ciebie, daj nam znać, jak możemy poprawić naszą pracę i uczynić ją lepszą dla Ciebie. Napisz do nas na stronie e-mail