Korábban a Podcast 2093-ban bemutattam egy egyszerű VBA rendezést, amely akkor működik, ha nem szín szerint rendez. Ma Neeta kéri a VBA-t az Excel adatok szín szerinti rendezéséhez.
A VBA szerinti rendezésnél az a legbonyolultabb dolog, hogy kiderítsük, melyik RGB színkódokat használja. Az esetek 99% -ában nem RGB-értékek megadásával választott színt. Az Excel ezen legördülő menüjével választott színt.

És bár a Kitöltés, Több szín, Egyéni használatával megtudhatja, hogy a kiválasztott szín RGB (112,48,160), ez sok gondot jelent, ha sok színe van.

Tehát - Inkább bekapcsolom a makrórögzítőt, és hagyom, hogy a makrórögzítő kitalálja a kódot. A makrofelvevő által generált kód soha nem tökéletes. Itt található a videó, amely bemutatja, hogyan kell használni a makrórögzítőt szín szerinti rendezéskor.
Videó átirat
Ismerje meg az Excel programot a Podcast 2186-os epizódjából: VBA rendezés szín szerint.
Hé, üdvözlöm újra a neten, Bill Jelen vagyok. A mai kérdés elküldve a YouTube-on. Volt egy videónk arról, hogyan válogassunk a VBA-val, és szín szerint akartak válogatni a VBA-val, ami sokkal bonyolultabb. Azt kérdeztem: "Miért nem csak bekapcsolja a makró felvevőt és megnézi, mi történik?" És sajnos, a makrórögzítő, tudod, közel hoz minket, de nem vezet egészen oda.
Tehát nézet, makrók, makró rögzítése, "HowToSortByColor", makrók tárolása ebben a munkafüzetben - tökéletes. Kattintson az OK gombra. Rendben, tehát most a makrofelvevő fut, ide fogunk menni az Adatok fülre, és azt mondjuk, hogy Rendezés. Rendezés párbeszédpanelt fogunk használni, és ezt felépítjük, rendben? Tehát azt fogjuk mondani, hogy hozzá akarunk adni egy szintet: Rendezés cseresznyén, de nem Rendezés cellasejteken; Rendezni fogunk a sejtszínen - a cella színe a kitöltési szín - és pirosat akarunk tenni a tetejére, majd átmásolni ezt a szintet, és a második helyre a sárga színt; majd hozzáadunk egy új szintet - megyünk a D oszlopba, a dátum oszlopba - Rendezés a cella színére, először piros, másoljuk be ezt a szintet, sárga, majd itt át; akkor itt, az Elderberry-ben, az E oszlopban, van néhány kék betűtípus, nem akarom látni, hogy nézett ki,szóval hozzáadjuk, hogy Sort on Font szín, kék színű felül; majd ha ezek mindegyike egyáltalán nincs színben, akkor hozzáadunk egy utolsó szintet csak az A oszlophoz - Cellaértékek, a legnagyobbtól a legkisebbig; és kattintson az OK gombra.
Rendben, most néhány dolog - ne hagyja ki ezt a következő lépést - a fájlját, most garantálom, hogy xlsx-ként van tárolva. Ez egy nagyszerű alkalom a Fájl, Mentés másként és mentésére xlsm vagy xlsb fájlként. Ha ezt nem teszi meg, akkor a fájl mentésekor az összes munkája elveszik. Törli az xlsx-ben tároltak makróit. Rendben?
Tehát abbahagytuk a felvételt, és meg akarjuk nézni a makrókat. Tehát ezt megteheti a Nézet, Makrók - Nézet, Makrók - és megtalálja az éppen rögzített makrót - HowToSortByColor -, majd kattintson a Szerkesztés gombra. Rendben, szóval itt van a makrónk, és ahogy ezt nézem, az a probléma, hogy van, ma történetesen 25 sorunk van, plusz egy fejléc. Tehát lemegy a 26. sorba. És nehezen kódolták, hogy mindig a 26. sorig fognak lenézni.
De gondolkodva erről, különösen a régi VBA-hoz képest a rendezéshez, nem kell megadnunk a teljes tartományt - csak egy cellát az oszlopban. Tehát bárhol, ahol a C26 oszlop van, le fogom csökkenteni, hogy csak azt mondjam: "Hé, nem, nézd meg az oszlop első celláját." Tehát E2, majd itt, A2. Tehát az én esetemben 1, 2, 3, 4, 5, 6, rendezési szintet-- 6 dolgot kellett változtatnom.
És akkor ez az a rész, amit a makró felvevő nagyon-nagyon rosszul fog elérni, hogy mindig csak a 26. sorba fognak rendezni. Tehát ezen változtatni fogok. Azt fogom mondani: "Nézze, kezdje az A21 tartománytól, és terjessze ki a .CurrentRegionra." Vessen egy pillantást az Excelre, és nézze meg, mit csinál ez. Tehát, ha csak egy cellát választok - A1 vagy bármi -, és megnyomom a Ctrl + * billentyűt, kiválasztja az aktuális régiót. Oké, csináljuk. Itt a közepétől a Ctrl + *, és ez mit csinál, kiterjed-e minden irányba, amíg el nem éri a táblázat szélét, a táblázat tetején, vagy az adatok jobb szélén vagy az adatok alsó szélén . Tehát az A1 .CurrentRegion kimondásával olyan, mintha az A1-re lépne, és megnyomná a Ctrl + * billentyűt. Rendben? Tehát itt meg kell változtatnia a dolgot. Most minden más rendben van a makróban; azt's mind dolgozni fog. Megkapták a SortOnCellColor, a SortOnFontColor és az xlSortOn fájlokat. Semmi miatt nem kell aggódnom; csak annyit kell tennem, hogy ide kell néznem, és látni, hogy keményen kódolták azt a régiót, amelyet a tartományhoz használni fognak, keményen kódolták, milyen messzire mentek, és ezt nem kell keményen kódolni. És ezzel az egyszerű lépéssel, megváltoztatva ezt a hat elemet és a hetedik elemet, van valami, aminek működnie kell.
Most végezzük el a tesztet. Térjünk vissza ide az Excelbe, és alul hozzáadunk néhány új sort. Csak 11-et teszek oda, és adunk hozzá egy pár vöröset - egy pirosat, egy sárgát, majd itt egy kéket. Rendben. Tehát, ha elindítjuk ezt a kódot - futtatjuk ezt a kódot, ezért ide kattintok, és a Futtatás gombra kattintok, majd visszajövök, látnunk kell, hogy ez a 11 lett a legfelsõbb elem piros színnel, ott megjelent a sárgák, és ez megjelenik a blues-ban, így mindez tökéletesen működik. Miért került a csúcsra? Mivel előfordult, hogy az utolsó rendezés az A oszlop, és ha döntetlen van, akkor az A oszlopra néz ki, mint a döntetlenre. Tehát ez a kód működik.
A VBA írásának elsajátításához Tracy Syrstaddal együtt írtam egy sor könyvet, az Excel VBA-t és a MACROS-t. Most kiadás volt 2003-ra, 2007-re, 2010-re, 2013-ra és 2016-ra; hamarosan 2019. Rendben, tehát keresse meg az Excel verziójának megfelelő verziót, és ezzel feljuthat a tanulási görbén.
Összegzés: A mai epizód a következő: A VBA használata a szín szerinti rendezéshez. Ennek legegyszerűbb módja, főleg, hogy nem tudja, hogy az egyes színekhez milyen RGB kódokat használtak - csak a pirosat választotta, nem tudja, mi az RGB kód, és nem akar elmenni fel - kapcsolja be a makrofelvevőt a View, Macros, Record New Macro használatával. Miután végzett a rendezéssel, kattintson a Felvétel leállítása gombra - ez a bal alsó sarokban található - Alt + F8 a makrók listájának megtekintéséhez, vagy a Nézet, Makrók, Makró megtekintése - a Nézet fül, Makrók és majd a Makrók megtekintése - ez zavaró. PS Válassza ki a makrót, majd kattintson a Szerkesztés gombra, és bármikor meglátja a C2-et néhány tartományszámra, csak változtassa meg a 2. sorra mutató pontra. Ezután, ahol megadják a rendezni kívánt tartományt, kibővül a Tartomány ("A1"), a CurrentRegion. Rendben.
Nos, hé, szeretném megköszönni, hogy megálltál, legközelebb találkozunk egy újabb netcast-lal.
A videóban hatszintű rendezést állítottam be. A befejező párbeszédpanel itt látható:

Azon a napon, amikor véletlenül rögzítettem a makrót, 23 adatsorom és egy címsorom volt. A makróban hét olyan hely volt, amely keményen kódolta a sorok számát. Ezeket ki kell igazítani.
Minden rendezési szinthez tartozik egy ilyen kód:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2:C24"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0)
Butaság, hogy a makró felvevő megadja a C2: C24 értéket. Csak egy cellát kell megadnia az oszlopban, ezért módosítsa a fenti első sort a következőre:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _
Hajtson végre hasonló változást az egyes rendezési szinteknél.
A rögzített makró vége közelében van a rögzített kód, amely a rendezéshez valóban szükséges. Így kezdődik:
With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1:E24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
Ahelyett, hogy csak az A1: E24-et válogatná, változtassa meg a kódot, hogy az A1-ben kezdődjön, és kiterjessze az aktuális régióra. (Az aktuális régió az, amit kap, ha a Ctrl + * billentyűt lenyomja egy cellából).
.SetRange Range("A1").CurrentRegion
A videóban látható utolsó kód:
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
jegyzet
Valószínű, hogy a munkafüzetet XLSX kiterjesztéssel menti. Végezzen el egy Mentés másként lehetőséget, ha XLSM vagy XLSB kiterjesztésre szeretne váltani. Az XLSX-be mentett makrók törlődnek.
Excel gondolata a napnak
Az Excel Master barátaimtól kértem tanácsokat az Excel-mel kapcsolatban. Mai gondolat, hogy elgondolkodjak:
"Egy napi Apple távol tartja a VBA-t."
Tom Urtis