Sortare VBA - Sfaturi Excel

Excel VBA Macro pentru a sorta datele. Nu-mi place modul în care macro recorderul creează cod suplimentar pentru sortare. Sortarea în Excel VBA ar trebui să fie simplă. O linie de cod, cu coloana de sortat, în ce direcție (crescătoare sau descendentă) și există un antet.

Urmăriți videoclipul

  • Înregistratorul de macrocomenzi Excel nu face o treabă bună cu sortarea înregistrărilor.
  • Cu condiția ca datele dvs. să poată fi selectate folosind Ctrl + * (cunoscută sub numele de Regiunea curentă)
  • Cu condiția să nu sortați după culoare sau pictogramă sau mai mult de trei niveluri
  • Utilizați metoda Range Old (). CurrentRegion.Sort în Excel

Transcriere video

Aflați Excel din MrExcel Podcast, Episodul 2093: Sortarea cu VBA

Hei, bine ai revenit pe netcast, eu sunt Bill Jelen. Întrebarea de astăzi de la James în Huntsville. James, am folosit macro recorderul pentru a înregistra acțiunea de sortare a datelor. Deci, să spunem că James a trebuit să sorteze aceste date după sector și clienți. Așa că ieșiți aici la fila Vizualizare, Macrocomenzi, Înregistrați macrocomenzi noi, SortMyReports, Comandă rapidă Ctrl - Voi scrie Shift + S acolo și voi face clic pe OK. Bine, deci de aici facem: Date, Sortare și vrem să spunem că vrem să Sortăm după Sector și apoi Adăugăm un Nivel și Sortăm după Client și facem clic pe OK. În colțul din stânga jos, facem clic pe Opriți înregistrarea. Bine, așa că este. Se pare că a funcționat, nu?

Dar iată problema: mâine veți avea mai multe date sau mai puține date sau, știți, orice. Și acea macro înregistrată este oribilă. Să aruncăm o privire, voi face Alt + F8 și vom arunca o privire la SortMyReport, vom edita asta. Bine, și acesta este tot ceea ce au înregistrat astfel încât SortFields.Clear, apoi au configurat un nou sort cu SortFields.Add și sunt codificate greu, și există 568 de rânduri și toate lucrurile.

Acum, sortând înapoi în ziua aceea, am fost foarte, foarte ușor. Bine, apoi în Excel 2007 au adăugat Sortare după pictogramă, Sortare după culoare, Sortare după culoare font, capacitatea de a avea 15 sortări de nivel și totul a devenit foarte nebun. Deci, nu mai folosesc macro-ul înregistrat. Mă duc la școală veche.

Acum, voi reveni la Excel. Iată regulile pentru ca această sortare din vechea școală să funcționeze, bine. Titlu deasupra fiecărei coloane: titlul respectiv trebuie să fie pe un rând, nu pe două rânduri. Dacă aveți titluri acolo sus și este bine să aveți titluri acolo sus. Aveți nevoie de un rând complet gol între titlurile dvs. și primul titlu. Dacă ai notițe în partea dreaptă: soția ta sună cu o listă de produse alimentare: „Hei, dragă, oprește-te în drum spre casă. Ia lapte, ouă și vodcă. ” Trebuie să existe o coloană complet goală între datele dvs. și asta. Și dacă în partea de jos există note de tip boilerplate, asigurați-vă că există un rând complet gol între ultimul bit de date și acele note.

Întregul meu obiectiv este să putem ajunge la orice celulă: celula din colțul din stânga sus a acestor date și apăsați Ctrl + * și va selecta datele care vor fi sortate. Acum, voi apăsa Ctrl +. care ne duce în acest colț și apoi Ctrl +. ne va duce în colțul din dreapta jos, Ctrl +. ne duce în colțul din stânga jos. Bine, deci dacă Ctrl + * vă va selecta corect datele, atunci totul este grozav. Dacă puneți lista dvs. de produse alimentare în Coloana H și vedem că venim aici și Ctrl + *, ei bine, acum sortăm lista de produse alimentare ca parte a lucrului, iar lista dvs. de produse alimentare va fi înșelată. Sau vom anula: dacă acest rând nu este aici, acum facem Ctrl + *, vedem că suntem - acum vor fi lipsiți de idei pentru că nu mai au nici un titlu, bine?

Deci, dacă veți utiliza codul meu, asigurați-vă că toate aceste reguli sunt adevărate: nu îmi sortați culoarea, nu îmi sortați pictograma, 3 sau mai puține niveluri de sortare. Anulează, bine. Deci, iată ce știm: știm că în fiecare zi datele noastre vor începe în A5. Dacă nu știm câte rânduri sau câte - bine chiar câte coloane am putea avea. Nu-mi pot imagina o situație în care coloanele să fie schimbate, dar cu siguranță numărul de rânduri se va schimba. Deci, Alt + F11, pur și simplu vom începe din acea celulă din colțul din stânga sus. Deci Range, în cazul meu este „A5” .CurrentRegion. Regiunea actuală este această proprietate minunată a clădirii care spune că vom apăsa Ctrl + Shift + * și tot ce este inclus acolo este ceea ce va fi sortat. Și o facem .Sort. .Sort, bine.

Acum, iată chestia. Dacă doriți să faceți un sortare la un nivel este ușor: Tasta1: =. : = și spunem doar că va fi Range - Oh, uit ce este. Era Sector, unde este Sector? Sectorul se află în coloana C. Deci C5 în cazul meu, Range („C5”) și apoi, Order1: = xlAscending. Am apăsat tasta Săgeată în jos acolo și apoi Tab. Bine acum, aș putea continua să ies în dreapta, dar nu voi face asta. Mă duc la o nouă linie, așa că spațiu, subliniez pentru a merge la o nouă linie, continuă această linie de cod, bine? Și dacă am un al doilea nivel de sortare: Key2: = și în acest caz vreau să sortez după client care se află în Coloana D, deci D5. Și apoi, Order2: xlAscending. Frumos.

Nu am un fel de nivel 3, dar dacă ați avea, ar fi Key3 și apoi Order3. Și apoi următoarea, cea pe care trebuie să o faci este Header, bine? Deci, Header: = xlGuess, de aici primești o groază de probleme. Și așa că vom spune xlDa acolo, cu siguranță ca Header. Chiar și pe vremuri, Recorderul Macro folosea xlGuess. Urăsc ca Excel să ghicească.

Asta este. O linie de cod, asta e tot ce trebuie să faceți și va funcționa cu mai multe rânduri, mai puține rânduri. Este un lucru frumos, frumos. Bine, așa că vom reveni aici la Excel. Ctrl + Shift + S este încă lucrul atribuit. Acum - Dacă tocmai ați trecut la VBA și îl tastați singur, puteți merge la Alt + F8, găsiți numele Macro-ului, faceți clic pe Opțiuni și tastați Ctrl + Shift + S acolo sau îl putem atribui chiar unui Comandă rapidă aici, în bara de instrumente de acces rapid. Faceți clic dreapta, Personalizați bara de instrumente de acces rapid, unde aleg din macrocomenzile noastre. Am o macro numită SortMyReport, voi face clic pe Adăugare - Urăsc micul diagramă de flux de acolo. Vom modifica asta și mi-ar plăcea să existe un fel de situație de la A la Z, dar, desigur, nu există. Poate acea săgeată care știe, cine știe, alege doar orice.Magic 8-ball, nu știu. Am de gând să-l aleg pe acest băiețel aici, faceți clic pe OK, faceți clic pe OK. Bine, așa că acum datele noastre sunt sortate după dată, eu aleg - și nu contează ce aleg. Întotdeauna se va întoarce și o voi sorta de la A5, dau clic pe tipul mic și datele mele sunt acum sortate după sector, în cadrul sectorului, după client. Funcționează grozav, bine?

Deci, dacă sunteți un fan al Macro Recorder, vă doresc din toată inima cele mai bune. Dar codul Macro Recorder în zilele noastre pentru sortare-sortare în VBA este mult mai simplu; doar pentru a reveni, pur și simplu folosiți în esență acesta, o singură linie de cod.

Ei bine, acesta este de obicei locul în care încerc să vă fac să cumpărați această carte, dar astăzi cred că ar trebui să aruncați o privire la această carte: Excel 2016 VBA și Macros de Tracy și de mine. Wow! Verificați acest lucru. Nu mi-am dat seama că există o versiune în altă limbă. Vă vom îmbunătăți complet Curba de învățare Macro de la înregistrarea primei dvs. Macro la codul de care aveți nevoie.

Ei bine, finalizare simplă pentru astăzi: Recorderul Macro Excel nu face o treabă bună cu înregistrarea, sortarea: cu condiția ca datele dvs. să poată fi selectate folosind Ctrl + * cunoscută sub numele de regiunea curentă, cu condiția să nu sortați ca culoare sau pictogramă sau mai mult de trei niveluri, utilizați metoda Old-school Range (). CurrentRegion.Sort metoda în VBA pentru a sorta.

Vreau să-i mulțumesc lui James pentru că a trimis această întrebare. Vreau să vă mulțumesc că ați trecut pe aici. Ne vedem data viitoare pentru un alt netcast de la.

Descărcare fișier

Descărcați exemplarul de fișier aici: Podcast2093.xlsm

Articole interesante...