VBA Sort - Excel-tip

Indholdsfortegnelse

Excel VBA-makro til at sortere data. Jeg kan ikke lide, hvordan makrooptageren opretter ekstra kode til sortering. Sortering i Excel VBA skal være enkel. Én kode kode, hvor kolonnen skal sorteres, hvilken vej (stigende eller faldende) og er der en overskrift.

Se video

  • Excel-makrooptageren gør ikke et godt stykke arbejde med sortering af optagelser.
  • Forudsat at dine data kan vælges ved hjælp af Ctrl + * (kendt som den aktuelle region)
  • Forudsat at du ikke sorterer efter farve eller ikon eller mere end tre niveauer
  • Brug den gamle skole Range (). CurrentRegion.Sort-metode i Excel

Videoudskrift

Lær Excel fra MrExcel Podcast, afsnit 2093: Sortering med VBA

Hej, velkommen tilbage til netcast, jeg er Bill Jelen. Dagens spørgsmål fra James i Huntsville. James, jeg brugte makrooptageren til at registrere handlingen med at sortere data. Så lad os sige, at James havde brug for at sortere disse data efter sektor og kunder. Så du kommer ud her til fanen Vis, Makroer, Optag ny makro, SortMyReports, genvejstast Ctrl - Jeg skriver Shift + S der og klikker OK. Okay, så herfra gør vi det: Data, Sorter, og vi vil sige, at vi vil sortere efter sektor og derefter tilføje et niveau og sortere efter kunde, og klikke på OK. Nede i nederste venstre hjørne klikker vi på Stop optagelse. Okay, så der er det. Ser ud til at have fungeret, ikke?

Men her er problemet: i morgen vil du have flere data eller mindre data, eller ved du hvad som helst. Og den optagede makro er bare forfærdelig. Lad os tage et kig, jeg vil gøre Alt + F8 og se på SortMyReport, vil redigere det. Okay, og dette er alt, hvad de har optaget, så SortFields.Clear, og så opretter de en ny sortering med SortFields.Add, og de er hårdkodede, og der er 568 rækker og alle de ting.

Nu sorteret tilbage på dagen var jeg virkelig, virkelig let. Okay, og i Excel 2007 tilføjede de Sorter efter ikon, Sorter efter farve, Sorter efter skrifttypefarve, muligheden for at have 15 niveausorter, og alt blev virkelig, virkelig sindssygt. Så jeg bruger ikke den optagede makro længere. Jeg går bare på old-school.

Nu skal jeg skifte tilbage til Excel. Her er reglerne for, at denne old-school-sortering skal fungere, okay. Overskrift over hver kolonne: denne overskrift skal være på en række, ikke to rækker. Hvis du har titler deroppe, og det er fint at have titler deroppe. Du har brug for en helt tom række mellem dine titler og den første overskrift. Hvis du har noter på højre side: din kone ringer med en købmandsliste: ”Hej skat, stop på vej hjem. Få mælk, æg og vodka. ” Der skal være en helt tom kolonne mellem dine data og det. Og hvis der er kedelnoter i bunden, skal du sørge for, at der er en helt tom række mellem den sidste bit af data og disse noter.

Mit hele mål er, at vi skal være i stand til at komme til en hvilken som helst celle: øverste venstre hjørne celle disse data og tryk på Ctrl + *, og den vælger de data, der skal sorteres. Nu skal jeg trykke på Ctrl +. der fører os til dette hjørne og derefter Ctrl +. tager os til nederste højre hjørne, Ctrl +. fører os til nederste venstre hjørne. Okay, så hvis Ctrl + * vil vælge dine data korrekt, er alt godt. Hvis du lægger din købmandsliste i kolonne H, og vi ser, at vi kommer herop og Ctrl + *, nu sorterer vi købmandslisten som en del af sagen, og din købmandsliste bliver skruet op. Eller vi fortryder: hvis denne række ikke er her, gør vi nu Ctrl + *, se, vi er - nu er de uklare, fordi de ikke har nogen overskrifter længere, okay?

Så hvis du skal bruge min kode, skal du sørge for, at alle disse regler er sande: ingen sortering af min farve, ingen sortering af mit ikon, 3 eller mindre sorteringsniveauer. Fortryd, okay. Så her er hvad vi ved: vi ved, at vores data hver dag starter i A5. Hvis vi ikke ved, hvor mange rækker eller hvor mange - ja, endda hvor mange kolonner vi måske har. Jeg kan ikke forestille mig en situation, hvor kolonnerne er udskiftede, men bestemt vil antallet af rækker ændre sig. Så Alt + F11, vi starter simpelthen fra den øverste venstre hjørne celle. Så Range, i mit tilfælde er "A5" .CurrentRegion. Nuværende region er denne fantastiske bygningsejendom, der siger, at vi skal trykke på Ctrl + Shift + *, og alt, hvad der er inkluderet der, er hvad der skal sorteres. Og det gør vi .Sort. Sort, okay.

Her er sagen. Hvis du vil lave en et-niveau-sortering, er det let: Tast1: =. : = og vi siger bare, at det bliver Range - Åh, jeg glemmer hvad det er. Det var sektor, hvor er sektor? Sektor er i kolonne C. Så C5 i mit tilfælde, Range (“C5”) og derefter, Order1: = xlAscending. Jeg trykkede på pil ned der og derefter Tab. Okay nu, jeg kunne fortsætte med at gå ud til højre, men jeg vil ikke gøre det. Jeg går til en ny linje, så plads, understreg for at gå til en ny linje, fortsætter denne linje kode, okay? Og hvis jeg har en anden niveau sortering: Key2: = og i dette tilfælde vil jeg sortere efter kunde, der er i kolonne D, så D5. Og så, Order2: xlAscending. Smuk.

Jeg har ikke en tredje niveau sortering, men hvis du gjorde det, ville det være Key3 og derefter Order3. Og så er denne næste, den du skal gøre, header, okay? Så header: = xlGuess det er her, du får en masse problemer. Og så vil vi sige xlJa der, bestemt som en header. Selv i gamle dage ville Macro Recorder bruge xlGuess. Jeg hader for Excel at gætte.

Det er det. Én kode kode, det er alt hvad du skal gøre, og det fungerer med flere rækker, færre rækker. Det er en smuk, smuk ting. Okay, så vi kommer tilbage her til Excel. Ctrl + Skift + S er stadig den ting, der er tildelt. Det nu - Hvis du lige har skiftet til VBA, og du selv skriver det, kan du gå til Alt + F8, finde navnet på din makro, klikke på Indstillinger og skrive Ctrl + Skift + S derinde, eller vi kan endda tildele det til en Genvejstast her oppe på værktøjslinjen Hurtig adgang. Højreklik, Tilpas værktøjslinjen Hurtig adgang, hvor jeg vælger fra vores makroer. Jeg har en makro kaldet SortMyReport, vil klikke på Tilføj - Jeg hader det lille rutediagram der. Vi vil ændre det, og jeg vil meget gerne have, at der er en slags A til Z-situation der, men selvfølgelig er der ikke. Måske den pil, der ved, hvem ved, vælg bare hvad som helst.Den magiske 8-kugle ved jeg ikke. Jeg vælger denne lille fyr her, klik på OK, klik på OK. Okay, så nu er vores data sorteret efter dato, jeg vælger - og det betyder ikke noget, hvad jeg vælger. Det vil altid gå tilbage og sortere det fra A5, jeg klikker på den lille fyr, og mine data er nu sorteret efter sektor, inden for sektor, efter kunde. Det fungerer godt, okay?

Så hvis du er fan af Macro-optageren, ja, mine inderlige lykønskninger til dig. Men Macro Recorder-koden i disse dage til sortering i VBA er bare så meget enklere; for bare at gå tilbage skal du blot bruge i det væsentlige denne, en linje kode.

Nå, dette er normalt stedet, hvor jeg prøver at få dig til at købe denne bog, men i dag synes jeg, du skal se på denne bog: Excel 2016 VBA og makroer af Tracy og mig selv. Wow! Se lige det her. Jeg var ikke klar over, at der er en version på et andet sprog. Vi får dig helt op i Macro Learning Curve fra at optage din første makro til den kode, du har brug for.

Nå, enkel indpakning i dag: Excel Macro Recorder gør ikke et godt stykke arbejde med optagelse, sortering: forudsat at dine data kan vælges ved hjælp af Ctrl + *, der er kendt som den aktuelle region, forudsat at du ikke sorterer som farve eller ikon eller mere end tre niveauer, skal du bare bruge den gamle skole Range (). CurrentRegion.Sort-metode i VBA til at sortere.

Jeg vil takke James for at sende dette spørgsmål. Jeg vil takke dig for at du kom forbi. Vi ses næste gang til endnu en netcast fra.

Download fil

Download eksempelfilen her: Podcast2093.xlsm

Interessante artikler...