Dříve v Podcastu 2093 jsem ukázal jednoduchý druh VBA, který funguje, pokud nejste třídění podle barev. Dnes Neeta požaduje, aby VBA třídila data aplikace Excel podle barev.
Nejsložitější věcí na řazení podle VBA je zjistit, které barevné kódy RGB používáte. V 99% případů jste nezvolili barvu zadáním hodnot RGB. Pomocí této rozbalovací nabídky v aplikaci Excel jste vybrali barvu.

A i když můžete použít Fill, More Colors, Custom, abyste se dozvěděli, že vybraná barva je RGB (112,48,160), to je potíže, pokud máte spoustu barev.

Takže - raději zapnu záznamník maker a nechám záznamník maker zjistit kód. Kód generovaný záznamníkem maker není nikdy dokonalý. Zde je video, které ukazuje, jak používat záznamník maker při třídění podle barev.
Přepis videa
Naučte se Excel z Podcastu, epizoda 2186: VBA řazení podle barev.
Hej, vítej zpět na netcastu, jsem Bill Jelen. Dnešní otázka zaslána na YouTube. Měl jsem venku video o tom, jak třídit pomocí VBA, a chtěli třídit podle barev s VBA, což je mnohem komplikovanější. Řekl jsem: „Proč prostě nezapnete záznamník maker a neuvidíte, co se stane?“ A bohužel, záznamník maker, víte, dostává nás to k sobě, ale nedostává nás to úplně tam.
Takže prohlížejte, makra, zaznamenávejte makra, „HowToSortByColor“, ukládejte makra do tohoto sešitu - perfektní. Klikněte na OK. Dobře, takže nyní je spuštěn záznam makra, přejdeme sem na kartu Data a řekneme Řadit. Použijeme dialogové okno Třídit a budeme to stavět, dobře? Takže řekneme, že chceme přidat úroveň, Třídit podle třešně, ale ne Třídit podle hodnot buněk; se chystáme Třídit podle barvy buňky - Barva buňky je tam barva výplně - a chceme dát červenou barvu nahoře a poté tuto úroveň zkopírovat a na druhou umístit žlutou; a pak přidáme novou úroveň - přejdeme do sloupce D, sloupce data - Seřadit podle barvy buňky, nejprve červená, zkopírovat tuto úroveň, žlutá a pak sem; pak, tady v Elderberry, sloupci E, je pár modrých fontů, nechci vidět, jak to vypadalo,přidáme to jako barvu řazení podle písma s modrou nahoře; a pak, pokud jsou všechny tyto nerozhodné pro vůbec žádné barvy, přidáme jednu závěrečnou úroveň právě na sloupec A - Hodnoty buněk, největší až nejmenší; a klikněte na OK.
Dobře, teď pár věcí - tento další krok nevynechávejte - váš soubor, právě teď, zaručuji vám, že je uložen jako xlsx. Je skvělý čas udělat Soubor, Uložit jako a uložit jej jako xlsm nebo xlsb. Pokud tak neučiníte, veškerá vaše práce až do tohoto okamžiku bude při uložení tohoto souboru ztracena. Budou mazat makra čehokoli uloženého v xlsx. V pořádku?
Takže jsme tam přestali nahrávat a potom se chceme podívat na naše makra. Můžete to tedy udělat s View, Macros-- View, Macros-- a najít makro, které jsme právě zaznamenali-- HowToSortByColor-- a kliknout na Upravit. Dobře, takže tady je naše makro, a když se na to podívám, problém, který máme, je, že dnes máme 25 řádků plus nadpis. Takže jde dolů do řádku 26. A mají pevně zakódované, že se vždy budou dívat dolů do řádku 26.
Ale když o tom přemýšlím, zvláště ve srovnání se starým VBA pro třídění, nemusíme specifikovat celý rozsah - jen jednu buňku ve sloupci. Takže kdekoli, kde mají sloupec C26, to snížím, abych řekl: „Hej, ne, podívej se na první buňku v tomto sloupci.“ Takže E2 a pak tady, A2. Takže v mém případě jsem měl 1, 2, 3, 4, 5, 6, třídit úrovně - 6 věcí, které je třeba změnit.
A pak je to ta část, kterou makro záznamník dostane opravdu, opravdu špatně, je to, že se budou pořád jen řadit do řádků 26. Takže to změním. Řeknu: „Podívej, začni rozsahem A21 a rozšíř to na .CurrentRegion.“ Podívejme se na Excel a podívejme se, co to dělá. Pokud tedy vyberu jen jednu buňku - A1 nebo cokoli jiného - a stisknu Ctrl + *, vybere aktuální Region. Dobře, udělejme to. Tady, od středu, Ctrl + *, a co to dělá, je to, že se rozprostírá ve všech směrech, dokud nenarazí na okraj tabulky, na horní část tabulky nebo na pravý okraj dat nebo spodní okraj dat . Řekněme tedy A1 .CurrentRegion, je to jako jít do A1 a stisknout Ctrl + *. V pořádku? Takže tady musíte tuto věc změnit. Nyní je vše ostatní v makru v pořádku; to'všichni budou pracovat. Získali SortOnCellColor a SortOnFontColor a xlSortOn. O nic z toho se nemusím starat; Jediné, co musím udělat, je podívat se sem a vidět, že napevno naprogramovali region, který hodlají použít pro rozsah, napevno, kam až šli, a nemusí to být napevno. A s tímto jednoduchým krokem, změnou těchto šesti položek a sedmé položky, máme něco, co by mělo fungovat.
Pojďme udělat test. Pojďme se vrátit zpět do Excelu a dole přidáme několik nových řádků. Vložím tam jedenáctky a přidáme pár červených - červenou, žlutou a potom sem modrou. V pořádku. Pokud tedy spustíme tento kód - spustíme tento kód, kliknu sem a kliknu na tlačítko Spustit - a pak se vrátím, měli bychom vidět, že ta 11 se stala červenou položkou, která se tam objevila v žluté, a to se projevuje v modré barvě, takže to vše funguje perfektně. Proč to šlo nahoru? Protože se stalo, že posledním druhem je sloupec A, takže když je remíza, vypadá to, že sloupec A je tiebreaker. Tento kód tedy funguje.
Abych se naučil psát VBA, napsal jsem spolu s Tracy Syrstad řadu knih Excel VBA a MACROS. Nyní vyšlo vydání pro roky 2003, 2007, 2010, 2013 a 2016; brzy 2019. Dobře, takže jděte a najděte verzi, která odpovídá vaší verzi aplikace Excel, a tím se dostanete do křivky učení.
Shrnutí: Dnešní epizoda je Jak používat VBA k třídění podle barev. Nejjednodušší způsob, jak to udělat, zejména proto, že nevíte, jaké kódy RGB byly použity pro každou z barev - právě jste vybrali červenou, nevíte, co je to kód RGB a nechcete se dívat to up-- zapněte záznam makra pomocí Zobrazit, Makra, Zaznamenat nové makro. Po dokončení třídění klikněte na Zastavit záznam - je to v levém dolním rohu - Alt + F8 a zobrazí se seznam maker, nebo Zobrazit, Makra, Zobrazit makro - karta Zobrazit, Makra a pak Zobrazit makra - to je matoucí. PVyberte své makro a klikněte na Upravit a kdykoli uvidíte C2 na některá čísla rozsahu, jednoduše jej změňte tak, aby ukazoval na řádek 2. A poté, kde specifikují rozsah k seřazení, se rozšíří Range ("A1"), CurrentRegion. V pořádku.
No, hej, chci ti poděkovat, že jsi se zastavil, uvidíme se příště na dalším netcastu od.
Ve videu jsem nastavil tříúrovňové řazení. Zde je zobrazeno koncové dialogové okno:

V den, kdy jsem náhodou zaznamenal makro, jsem měl 23 řádků dat plus nadpis. V makru bylo sedm míst, která pevně zakódovala počet řádků. Ty je třeba upravit.
Pro každou úroveň řazení existuje tento kód:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2:C24"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0)
To je hloupé, že záznamník maker určuje C2: C24. Ve sloupci musíte zadat pouze jednu buňku, proto změňte první řádek výše na:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _
Udělejte podobnou změnu pro každou z úrovní třídění.
Na konci zaznamenaného makra máte zaznamenaný kód, který skutečně provede třídění. Začíná to takto:
With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1:E24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
Místo třídění A1: E24 změňte kód tak, aby začínal v A1 a rozšířil se do aktuální oblasti. (Aktuální oblast je to, co získáte, když stisknete Ctrl + * z buňky).
.SetRange Range("A1").CurrentRegion
Konečný kód zobrazený ve 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 pravděpodobné, že je váš sešit uložen s příponou XLSX. Chcete-li změnit na příponu XLSM nebo XLSB, proveďte Uložit jako. Všechna makra uložená v XLSX jsou odstraněna.
Excel myšlenka dne
Požádal jsem své přátele Excel Master o radu ohledně Excelu. Dnešní myšlenka k zamyšlení:
„Apple denně udržuje VBA pryč.“
Tom Urtis