Predtým v Podcastu 2093 som ukázal jednoduché triedenie VBA, ktoré funguje, ak netriedite podľa farby. Neeta dnes žiada, aby VBA triedila údaje programu Excel podľa farieb.
Najťažšou vecou pri triedení podľa VBA je zistiť, ktoré farebné kódy RGB používate. V 99% prípadov ste nevybrali farbu zadaním hodnôt RGB. Farbu ste vybrali pomocou tejto rozbaľovacej ponuky v programe Excel.

Aj keď by ste sa pomocou Fill, More Colors, Custom mohli dozvedieť, že vybratá farba je RGB (112,48,160), je to problém, ak máte veľa farieb.

Takže - radšej zapnem záznamník makier a nechám záznamník makier zistiť kód. Kód vygenerovaný záznamníkom makier nie je nikdy dokonalý. Tu je video, ktoré ukazuje, ako sa používa záznam makra pri triedení podľa farieb.
Prepis videa
Naučte sa Excel z Podcastu, epizóda 2186: VBA triedenie podľa farieb.
Ahoj, vitaj späť na netcastu, som Bill Jelen. Dnešná otázka zaslaná na YouTube. Mal som vonku video o tom, ako triediť s VBA, a oni chceli triediť podľa farieb s VBA, čo je oveľa komplikovanejšie. Povedal som: „Prečo jednoducho nezapneš makro rekordér a uvidíš, čo sa stane?“ A, bohužiaľ, záznamník makier, viete, dostane nás to k sebe, ale nedostane nás to úplne tam.
Takže View, Macros, Record Macro, "HowToSortByColor", Store Macro in This Workbook - perfect. Kliknite na tlačidlo OK. Dobre, takže teraz je spustený záznam makra, prejdeme sem na kartu Údaje a povieme Zoradiť. Použijeme dialógové okno Zoradenie a toto postavíme, dobre? Takže povieme, že chceme pridať úroveň Zoradiť podľa čerešne, ale nie Zoradiť podľa hodnôt buniek; ideme triediť na bunkovú farbu - bunková farba je tam farba výplne - a my chceme dať hore červenú farbu a potom túto úroveň skopírovať a ako druhú dať žltú; a potom pridáme novú úroveň-- prejdeme do stĺpca D, stĺpca s dátumom-- Zoradiť podľa farby bunky, najskôr červená, skopírovať túto úroveň, žltá a potom sem; potom, tu v Elderberry, stĺpci E, je niekoľko modrých fontov, nechcem vidieť, ako to vyzeralo,pridáme to teda ako farbu zoradenia podľa písma s modrou farbou navrchu; a potom, ak sú všetky z nich tie, ktoré neobsahujú vôbec žiadne farby, pridáme jednu poslednú úroveň iba do stĺpca A - Hodnoty buniek, najväčšie až najmenšie; a kliknite na tlačidlo OK.
Dobre, teraz, pár vecí - tento ďalší krok nevynechajte - váš súbor, práve teraz, garantujem, že je uložený ako xlsx. Je to skvelý čas na vykonanie príkazov Súbor, Uložiť ako a uloženia súborov vo formáte xlsm alebo xlsb. Ak to neurobíte, po uložení tohto súboru sa stratí všetka vaša doterajšia práca. Vymažú makrá všetkého, čo je uložené v xlsx. Dobre?
Takže sme tam prestali nahrávať a potom sa chceme ísť pozrieť na naše makrá. Môžete to urobiť pomocou príkazov Zobraziť, Makrá - Zobraziť, Makrá - a nájsť makro, ktoré sme práve zaznamenali - HowToSortByColor - a kliknúť na Upraviť. Dobre, takže tu je naše makro a keď sa na to pozriem, problém, ktorý máme, je, že dnes máme 25 riadkov plus nadpis. Tak to ide do 26. riadku. A majú pevne zakódované, že sa vždy budú pozerať do 26. riadku.
Ale keď o tom premýšľam, zvlášť v porovnaní so starým VBA na triedenie, nemusíme špecifikovať celý rozsah - iba jedna bunka v stĺpci. Takže kdekoľvek, kde majú stĺpec C26, zredukujem to iba na: „Hej, nie, pozrite sa na prvú bunku v tomto stĺpci.“ Takže E2 a potom tu, A2. Takže v mojom prípade som mal 1, 2, 3, 4, 5, 6, úrovne triedenia - 6 vecí, ktoré treba zmeniť.
A potom je to tá časť, ktorú zaznamenávanie makier zaznamenáva naozaj, naozaj zle, či iba neustále triedia riadky 26. Idem to teda zmeniť. Ja poviem: „Pozri, začni od rozsahu A21 a rozšír ho na .CurrentRegion.“ Poďme sa pozrieť na Excel a uvidíme, čo to urobí. Ak by som si teda vybral iba jednu bunku - A1 alebo čokoľvek - a stlačil Ctrl + *, vyberie sa aktuálny región. Dobre, poďme na to. Tu, od stredu, Ctrl + *, a čo to robí, je to, že sa rozširuje vo všetkých smeroch, až kým nenarazí na okraj tabuľky, na hornú časť tabuľky alebo na pravý okraj údajov alebo na spodný okraj údajov. . Takže povedaním A1 .CurrentRegion je to ako ísť do A1 a stlačiť Ctrl + *. Dobre? Takže tu musíte túto vec zmeniť. Teraz je všetko ostatné v makre v poriadku; to 'všetci idú do práce. Dostali SortOnCellColor a SortOnFontColor a xlSortOn. Nemusím sa ničoho obávať; Stačí, aby som sa pozrel sem a zistil, že majú pevne zakódovaný región, ktorý použijú na rozsah, pevne zakódované, ako ďaleko to šlo, a nemusí to byť pevne zakódované. A týmto jednoduchým krokom, zmenou týchto šiestich položiek a siedmej položky, máme niečo, čo by malo fungovať.
Teraz urobme test. Vráťme sa sem do Excelu a do dolnej časti pridáme niekoľko nových riadkov. Len tam dám 11s a pridáme pár červených - červenú, žltú a potom sem modrú. Dobre. Takže ak spustíme tento kód - spustíme tento kód, kliknem sem a kliknem na tlačidlo Spustiť - a potom sa vrátime späť, mali by sme vidieť, že z tej 11 sa stala červená položka v hornej časti, zobrazila sa tam v žltá a prejaví sa to modrou farbou, takže to všetko funguje perfektne. Prečo to vyšlo na vrchol? Pretože sa stalo, že posledným typom je stĺpec A, takže keď je remíza, zdá sa, že stĺpec A je tiebreaker. Tento kód teda funguje.
Aby som sa naučil, ako písať VBA, napísal som spolu s Tracy Syrstad sériu kníh Excel VBA a MACROS. Teraz vyšlo vydanie pre roky 2003, 2007, 2010, 2013 a 2016; čoskoro 2019. Dobre, takže si choďte vyhľadať verziu, ktorá sa zhoduje s vašou verziou programu Excel, a tým sa dostanete hore krivkou učenia.
Zbalenie: Dnešná epizóda je Ako používať VBA na triedenie podľa farieb. Najjednoduchší spôsob, ako to urobiť, najmä preto, že neviete, aké kódy RGB sa použili pre každú z farieb - len ste vybrali červenú farbu, neviete, čo je to kód RGB a nechcete sa ísť pozerať it up-- zapnite záznamník makier pomocou príkazov Zobraziť, Makrá, Záznam nového makra. Po dokončení zoradenia kliknite na Zastaviť nahrávanie - je to v ľavom dolnom rohu - Alt + F8 a zobrazí sa zoznam makier, alebo Zobraziť, Makrá, Zobraziť makro - karta Zobraziť, Makrá a potom Zobraziť makrá - to je mätúce. PVyberte svoje makro a kliknite na Upraviť. Kedykoľvek uvidíte C2 na niektoré čísla rozsahu, zmeňte ho tak, aby ukazoval na riadok 2. A potom tam, kde určia rozsah na zoradenie, sa rozšíri Range ("A1"), CurrentRegion. Dobre.
No, hej, chcem sa ti poďakovať, že si sa zastavil, uvidíme sa nabudúce pri ďalšom netcaste z.
Vo videu som nastavil šesťstupňové triedenie. Koncové dialógové okno je zobrazené tu:

V deň, keď som náhodou zaznamenal makro, som mal 23 riadkov údajov plus nadpis. V makre bolo sedem miest, ktoré pevne zakódovali počet riadkov. Tieto sa musia upraviť.
Pre každú úroveň triedenia existuje tento kód:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2:C24"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0)
To je hlúpe, že záznamník makier určuje C2: C24. V stĺpci musíte zadať iba jednu bunku, preto zmeňte prvý riadok vyššie na:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _
Urobte podobnú zmenu pre každú z úrovní triedenia.
Na konci zaznamenaného makra máte zaznamenaný kód, ktorý skutočne robí triedenie. Začína to takto:
With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1:E24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
Namiesto triedenia A1: E24 zmeňte kód tak, aby začínal v A1, a rozšíril sa na aktuálny región. (Aktuálna oblasť je to, čo získate, ak stlačíte Ctrl + * z bunky).
.SetRange Range("A1").CurrentRegion
Výsledný kód zobrazený vo 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
Poznámka
Je pravdepodobné, že váš zošit je uložený s príponou XLSX. Ak chcete zmeniť príponu XLSM alebo XLSB, kliknite na tlačidlo Uložiť ako. Všetky makra uložené v XLSX sa odstránia.
Excel myslel dňa
Požiadal som svojich priateľov programu Excel Master o radu o programe Excel. Dnešná myšlienka na zamyslenie:
„Apple denne drží VBA ďalej.“
Tom Urtis