Prej v Podcastu 2093 sem pokazal preprosto razvrščanje VBA, ki deluje, če ne razvrščate po barvah. Danes Neeta zahteva, da VBA razvrsti Excelove podatke po barvah.
Najtežje pri razvrščanju po VBA je ugotoviti, katere barvne kode RGB uporabljate. V 99% primerov z izbiro vrednosti RGB niste izbrali barve. Barvo ste izbrali s pomočjo tega spustnega menija v Excelu.

Čeprav bi lahko uporabili Izpolni, Več barv, Po meri, če bi se naučili, da je izbrana barva RGB (112,48,160), je to težava, če imate veliko barv.

Torej - raje vklopim snemalnik makrov in naj snemalnik makrov ugotovi kodo. Koda, ki jo ustvari snemalnik makrov, ni nikoli popolna. Tu je video, ki prikazuje, kako uporabljati snemalnik makrov pri razvrščanju po barvah.
Video zapis
Naučite se Excel iz podcasta, epizoda 2186: VBA Razvrsti po barvi.
Hej, dobrodošli nazaj v oddaji, jaz sem Bill Jelen. Današnje vprašanje, poslano v YouTubu. Tam sem imel video o tem, kako razvrščati z VBA, in želeli so razvrstiti po barvah z VBA, kar je veliko bolj zapleteno. Rekel sem: "Zakaj preprosto ne vklopiš makro snemalnika in ne vidiš, kaj se zgodi?" In na žalost nas makro snemalnik, saj veste, približa, vendar nas ne pripelje do tja.
Torej View, Macros, Record Macro, "HowToSortByColor", Store Macro in This Workbook - popolno. Kliknite V redu. Torej, zdaj, ko makro snemalnik deluje, bomo prišli sem na zavihek Podatki in rekli Razvrsti. Uporabili bomo pogovorno okno Razvrsti in to bomo zgradili, prav? Torej, rekli bomo, da želimo dodati raven, Razvrsti po češnji, ne pa Razvrsti po celičnih vrednostih; razvrstili bomo po barvi celice - barva celice je tam barva polnila - na vrh želimo postaviti rdečo in nato kopirati to raven, na drugo pa rumeno; in nato bomo dodali novo raven - prešli bomo v stolpec D, stolpec z datumi - Razvrsti po barvi celice, najprej rdeče, kopirajte to raven, rumeno in nato sem; potem pa tukaj, v stolpcu Elderberry, je nekaj modre pisave, ne bi rad videl, kako je to izgledalo,zato bomo to dodali kot barvo Razvrsti po pisavi z modro na vrhu; in potem, če so vse te kravate brez barv, bomo dodali še eno končno stopnjo ravno v stolpec A - vrednosti celic, največje do najmanjše; in kliknite V redu.
V redu, nekaj stvari - ne preskočite tega naslednjega koraka - vaša datoteka, zdaj vam zagotavljam, da je shranjena kot xlsx. Pravi čas je, da naredite File, Save As in ga shranite kot xlsm ali xlsb. Če tega ne storite, bo vse vaše delo do te točke izgubljeno, ko shranite to datoteko. Izbrišejo makre vsega, kar je shranjeno v xlsx. Vredu?
Tam smo prenehali snemati, nato pa si želimo ogledati naše makre. Torej, to lahko storite z View, Macros - View, Macros - in poiščete makro, ki smo ga pravkar posneli - HowToSortByColor - in kliknemo Edit. Torej, tukaj je naš makro, in ko gledam na to, je težava, ki jo imamo, danes v 25 vrsticah in naslovu. Torej gre do 26. vrstice. In trdo so kodirali, da bodo vedno gledali do 26. vrstice.
Ko pa razmišljam o tem, še posebej v primerjavi s starim VBA za razvrščanje, nam ni treba določiti celotnega obsega - samo eno celico v stolpcu. Torej, kjer koli imajo stolpec C26, ga bom zmanjšal in rekel: "Hej, ne, poglej prvo celico v tem stolpcu." Torej E2 in potem, tukaj, A2. V mojem primeru sem imel 1, 2, 3, 4, 5, 6, ravni razvrščanja - 6 stvari, ki jih je treba spremeniti.
In potem je to del, ki ga snemalnik makrov postane zelo, resnično slab, je, da bodo ves čas razvrščali samo v vrstice 26. Torej bom to spremenil. Rekel bom: "Poglejte, začnite na območju A21 in ga razširite na .CurrentRegion." Oglejmo si Excel in poglejmo, kaj to počne. Torej, če bi izbral samo eno celico - A1 ali karkoli - in pritisnil Ctrl + *, izbere trenutno regijo. V redu, naredimo to. Tukaj od sredine Ctrl + * in kaj to počne, se razteza v vse smeri, dokler ne zadene roba preglednice, na vrhu preglednice ali na desnem robu podatkov ali spodnjem robu podatkov . Torej, če izgovorite A1 .CurrentRegion, je kot da grete na A1 in pritisnete Ctrl + *. Vredu? Torej, tukaj morate to stvar spremeniti. Zdaj je vse drugo v makru v redu; to 'vsi gredo na delo. Dobili so SortOnCellColor in SortOnFontColor ter xlSortOn. Ničesar mi ni treba skrbeti; vse, kar moram storiti, je, da pogledam sem in vidim, da so trdo kodirali regijo, ki jo bodo uporabili za nabor, trdo kodirali, kako daleč so šli, in ni treba, da je kodirana trdo. In s tem preprostim korakom, spreminjanjem teh šestih in sedmega elementa, imamo nekaj, kar bi moralo delovati.
Zdaj pa naredimo test. Vrnimo se sem v Excel in na dnu bomo dodali nekaj novih vrstic. Tam bom postavil samo enajsterice in dodali bomo nekaj rdečih - rdečo, rumeno in nato tukaj modro. Vredu. Torej, če gremo zagnati to kodo - zaženimo to kodo, zato kliknem sem in kliknem gumb Zaženi - in se nato vrnemo, videli bi, da je 11 postalo zgornji element v rdeči barvi, prikazal se je tam v rumeno, in to se pokaže v modrih, tako da vse deluje odlično. Zakaj je šlo na vrh? Ker se je zgodilo, da je zadnja sorta stolpec A, in ko je neodločen rezultat, je stolpec A videti kot tiebreaker. Torej ta koda deluje.
Da bi se naučil pisati VBA, sem skupaj s Tracy Syrstad napisal vrsto knjig, Excel VBA in MACROS. Izšla je izdaja za leti 2003, 2007, 2010, 2013 in 2016; kmalu 2019. V redu, poiščite različico, ki se ujema z vašo različico Excela, in to vas bo pripeljalo do krivulje učenja.
Zaključek: Današnja epizoda je, Kako uporabiti VBA za razvrščanje po barvah. Najlažji način za to, še posebej, ker ne veste, katere RGB kode so bile uporabljene za posamezno barvo - pravkar ste izbrali rdečo, ne veste, kaj je RGB koda, in ne želite iti iskat it up - vklopite makro snemalnik z uporabo View, Macros, Record New Macro. Po končanem razvrščanju kliknite Ustavi snemanje - v spodnjem levem kotu je - Alt + F8, da si ogledate seznam makrov, ali Pogled, Makri, Pogled Makro - zavihek Pogled, Makri in nato View Macros - to je zmedeno. PSIzberite svoj makro in kliknite Uredi in kadar koli vidite C2 na nekaj številk obsega, ga samo spremenite v vrstico 2. In tam, kjer določijo obseg za razvrščanje, se obseg ("A1"), CurrentRegion, razširi. Vredu.
No, hej, rad bi se vam zahvalil, da ste se ustavili, se vidimo naslednjič za še eno oddajo.
V videu sem nastavil šeststopenjsko razvrščanje. Končno pogovorno okno je prikazano tukaj:

Na dan, ko sem slučajno posnel makro, sem imel 23 vrstic podatkov in naslov. V makru je bilo sedem mest, ki so težko kodirala število vrstic. Te je treba prilagoditi.
Za vsako stopnjo razvrščanja obstaja koda, kot je ta:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2:C24"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0)
Neumno je, da makro snemalnik določa C2: C24. Določiti morate samo eno celico v stolpcu, zato spremenite prvo vrstico zgoraj na:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _
Podobno spremenite za vsako stopnjo razvrščanja.
Na koncu posnetega makra imate posneto kodo, ki dejansko opravi razvrščanje. Začne se tako:
With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1:E24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
Namesto samo razvrščanja A1: E24, spremenite kodo tako, da se začne v A1 in se razširi na trenutno regijo. (Trenutna regija je tista, ki jo dobite, če iz celice pritisnete Ctrl + *).
.SetRange Range("A1").CurrentRegion
Končna koda, prikazana v videoposnetku, 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
Opomba
Verjetno je vaš delovni zvezek shranjen s pripono XLSX. Če želite spremeniti razširitev XLSM ali XLSB, shranite kot. Vsi makri, shranjeni v XLSX, se izbrišejo.
Excel Misel dneva
Za nasvet glede Excela sem prosil prijatelje Excel Excel. Današnja misel o premišljevanju:
"Apple na dan preprečuje VBA."
Tom Urtis