Prije toga u Podcastu 2093 pokazao sam jednostavnu VBA sortiranje koja funkcionira ako ne sortirate po boji. Danas Neeta traži da VBA sortira Excel podatke po boji.
Najsitnija stvar kod sortiranja po VBA je utvrditi koje RGB kodove boja koristite. U 99% slučajeva niste odabrali boju unošenjem RGB vrijednosti. Pomoću ovog padajućeg izbornika u Excelu odabrali ste boju.

I dok biste mogli koristiti Ispuni, Više boja, Prilagođeno da biste saznali da je odabrana boja RGB (112,48,160), to je gnjavaža ako imate puno boja.

Dakle - više volim uključiti makro snimač i pustiti makro snimaču da shvati kôd. Kôd koji generira makro snimač nikada nije savršen. Evo videozapisa koji pokazuje kako koristiti makro snimač prilikom sortiranja po boji.
Prijepis videozapisa
Naučite Excel iz Podcasta, epizoda 2186: VBA Poredaj po boji.
Hej, dobrodošao natrag u prijenos uživo, ja sam Bill Jelen. Današnje pitanje, poslano na YouTubeu. Tamo sam imao video o tome kako sortirati s VBA, a htjeli su sortirati po boji s VBA, što je puno složenije. Rekao sam, "Zašto jednostavno ne uključite makro snimač i ne vidite što će se dogoditi?" I, na žalost, makro snimač, znate, približava nas, ali nas ne vodi tamo skroz.
Dakle, View, Macros, Record Macro, "HowToSortByColor", Store Macro u ovoj radnoj knjizi - savršeno. Kliknite U redu. U redu, dakle, makro snimač je sada pokrenut, doći ćemo ovdje na karticu Podaci i reći ćemo Sortiraj. Koristit ćemo dijaloški okvir Sort i to ćemo izgraditi, u redu? Dakle, reći ćemo da želimo dodati razinu Sortiraj po trešnji, ali ne i Sortiraj po vrijednostima stanica; sortirat ćemo po boji stanice - Boja ćelije je tamo boja ispune - i želimo staviti crvenu na vrh, a zatim kopirati tu razinu, a žutu staviti na drugo mjesto; a zatim ćemo dodati novu razinu - idemo u stupac D, stupac datuma - Poredaj po boji stanice, prvo crveno, kopiraj tu razinu, žuto, a zatim ovdje; a onda, ovdje u Elderberryju, stupac E, postoji nekoliko plavih fontova, ne želim vidjeti kako je to izgledalo,pa ćemo to dodati kao boju sortiranja po fontu s plavom bojom na vrhu; i onda ako su sve ovo izjednačenje bez ikakvih boja, mi ćemo dodati jednu završnu razinu samo na stupcu A-- Vrijednosti stanica, najveće do najmanje; i kliknite U redu.
U redu, sada nekoliko stvari - nemojte preskočiti sljedeći korak - vaša datoteka, trenutno jamčim da ste pohranjeni kao xlsx. Ovo je sjajno vrijeme za File, Save As i spremiti kao xlsm ili xlsb. Ako to ne učinite, sav vaš rad do ovog trenutka bit će izgubljen kada spremite ovu datoteku. Izbrisat će makronaredbe svega pohranjenog u xlsx. U redu?
Stoga smo tamo prestali snimati, a zatim želimo pogledati svoje makronaredbe. Dakle, to možete učiniti pomoću View, Macros - View, Macros - i pronaći makronaredbu koju smo upravo snimili - HowToSortByColor - i kliknuti Edit. U redu, evo evo naše makronaredbe, i dok gledam na to, problem koji imamo je da danas imamo 25 redaka plus naslov. Tako se spušta na red 26. I oni su teško kodirali da će uvijek gledati dolje na redove 26.
Ali dok razmišljam o ovome, posebno u usporedbi sa starim VBA za sortiranje, ne moramo navesti cijeli raspon - samo jednu ćeliju u stupcu. Dakle, bilo gdje gdje imaju stupac C26, smanjit ću ga na samo da kažem, "Hej, ne, pogledajte prvu ćeliju u tom stupcu." Dakle E2, a zatim, ovdje, A2. Dakle, u mom slučaju imao sam 1, 2, 3, 4, 5, 6 razine sortiranja - 6 stvari koje bih trebao promijeniti.
A onda je ovo dio koji makro snimač postaje jako, jako loš, jer će cijelo vrijeme sortirati samo u redove 26. Pa ću ovo promijeniti. Reći ću: "Pogledajte, počnite s dometa A21 i proširite ga na .CurrentRegion." Pogledajmo Excel i vidimo što to čini. Dakle, ako bih samo izabrao bilo koju ćeliju - A1 ili bilo što drugo - i pritisnuo Ctrl + *, ona odabire trenutnu regiju. U redu, učinimo to. Ovdje se od sredine Ctrl + * i što to čini, proteže se u svim smjerovima dok ne udari u rub proračunske tablice, na vrh proračunske tablice ili na desni rub podataka ili donji rub podataka . Dakle, izgovaranjem A1 .Trenutna regija, to je poput odlaska na A1 i pritiskom na Ctrl + *. U redu? Dakle, ovdje morate promijeniti tu stvar. Sad je sve ostalo u makronaredbi u redu; to'sve ide na posao. Dobili su SortOnCellColor i SortOnFontColor i xlSortOn. Ne moram se brinuti ni o čemu od toga; sve što moram učiniti je pogledati ovdje i vidjeti jesu li oni teško kodirali regiju koju će koristiti za asortiman, tvrdo kodirali dokle su oni otišli, i ne mora biti teško kodirati. I s tim jednostavnim korakom, promjenom tih šest stavki i sedmom stavkom, imamo nešto što bi trebalo funkcionirati.
Sada, napravimo test. Vratimo se ovdje u Excel i na dnu ćemo dodati nekoliko novih redaka. Samo ću tamo staviti 11, a mi ćemo dodati nekoliko crvenih - crvenu, žutu, a zatim ovdje plavu. U redu. Dakle, ako krenemo s ovim kodom - pokrenimo ovaj kod, pa kliknem ovdje i kliknem na gumb Pokreni - i onda se vratimo, trebali bismo vidjeti da je tih 11 postalo gornja stavka u crvenoj boji, ona se pojavila tamo u žute, a pojavljuje se u bluesu, tako da sve to savršeno funkcionira. Zašto je išlo na vrh? Budući da se dogodilo da je zadnja sorta stupac A, pa kad je nerešen rezultat, izgleda da je stupac A taj prekidač. Dakle, taj kod djeluje.
Da bih naučio kako pisati VBA, zajedno s Tracy Syrstad napisao sam niz knjiga, Excel VBA i MACROS. Sada postoji izdanje za 2003, 2007, 2010, 2013 i 2016; uskoro 2019. U redu, zato pronađite verziju koja se podudara s vašom verzijom Excela i ovo će vas podići prema gore.
Zaključak: Današnja epizoda glasi: Kako koristiti VBA za sortiranje po boji. To ćete najlakše učiniti, pogotovo jer ne znate koji su RGB kodovi korišteni za svaku od boja - upravo ste odabrali crvenu, ne znate koji je RGB kôd i ne želite ići tražiti to gore - uključite snimač makronaredbi pomoću View, Macros, Record New Macro. Kada završite sa sortiranjem, kliknite Stop Recording - zaustavi snimanje - nalazi se u donjem lijevom kutu - Alt + F8 da biste vidjeli popis makronaredbi ili View, Macros, View Macro - kartica View, Macros i zatim View Macros - to je zbunjujuće. Odaberite makronaredbu i kliknite Uredi, a kad god vidite C2 na neke brojeve raspona, samo ga promijenite u pokazivač na red 2. A onda, tamo gdje oni odrede raspon za sortiranje, raspon ("A1"), CurrentRegion, proširit će se. U redu.
Pa, hej, želim vam zahvaliti što ste navratili, vidimo se sljedeći put za još jedan prijenos od.
U videu sam postavio sortiranje u šest razina. Završni dijaloški okvir prikazan je ovdje:

Na dan kad sam slučajno snimio makronaredbu, imao sam 23 reda podataka plus naslov. U makronaredbi je bilo sedam mjesta koja su teško kodirala broj redaka. To se mora prilagoditi.
Za svaku razinu sortiranja postoji kod poput ovog:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2:C24"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0)
Glupo je što makro zapisovač navodi C2: C24. Morate navesti samo jednu ćeliju u stupcu, pa promijenite prvi redak gore u:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _
Napravite sličnu promjenu za svaku razinu razvrstavanja.
Pri kraju snimljenog makronaredbe imate snimljeni kôd koji će zapravo izvršiti sortiranje. Sve započinje ovako:
With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1:E24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
Umjesto da sortirate samo A1: E24, promijenite kôd da započne u A1 i proširite se na trenutno područje. (Trenutna regija dobiva se ako pritisnete Ctrl + * iz ćelije).
.SetRange Range("A1").CurrentRegion
Konačni kod prikazan u videu je:
Sub HowToSortByColor() HowToSortByColor Macro ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear ' Sort column C by Red ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0) ' Sort Column C by Yellow ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 255, 0) ' Sort column D by Red ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("D2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0) ' Sort column D by Yellow ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("D2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 255, 0) ' Sort column E by blue font ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("E2"), _ xlSortOnFontColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(0, 176, 240) ' Sort Column A by Values descending ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("A2"), _ SortOn:=xlSortOnValues, _ Order:=xlDescending, _ DataOption:=xlSortNormal ' Perform the Sort With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1").CurrentRegion .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
Bilješka
Vjerojatno je vaša radna knjiga spremljena s XLSX proširenjem. Napravite Spremi kao da biste prešli na XLSM ili XLSB proširenje. Svi makronaredbe spremljene u XLSX brišu se.
Excel misao dana
Pitao sam svoje prijatelje Excel Master za savjet o Excelu. Današnja misao za razmišljanje:
"Jabuka dnevno drži VBA podalje."
Tom Urtis