Rūšiuoti pagal spalvas su VBA - „Excel“ patarimai

Anksčiau „Podcast 2093“ parodžiau paprastą VBA rūšiavimą, kuris veikia, jei nerūšiuojate pagal spalvas. Šiandien Neeta prašo VBA rūšiuoti „Excel“ duomenis pagal spalvas.

Kebliausias dalykas rūšiuojant pagal VBA yra išsiaiškinti, kuriuos RGB spalvų kodus naudojate. 99% atvejų jūs nepasirinkote spalvos įvesdami RGB reikšmes. Spalvą pasirinkote naudodami šį „Excel“ išskleidžiamąjį meniu.

Daugelis žmonių naudodami šį išskleidžiamąjį meniu pasirenka užpildymo arba šrifto spalvą

Nors, norėdami sužinoti, kad pasirinkta spalva yra RGB (112,48,160), galite naudoti „Užpildymas“, „Daugiau spalvų“, „Pasirinktinis“, tai yra vargas, jei turite daug spalvų.

RGB kodai yra paslėpti šiame dialogo lange

Taigi - man labiau patinka įjungti makrokomandą ir leisti makrokomandai išsiaiškinti kodą. Makrokomandos generuojamas kodas niekada nėra tobulas. Čia yra vaizdo įrašas, parodantis, kaip naudoti makrokomandą rūšiuojant pagal spalvas.

Vaizdo įrašo nuorašas

Sužinokite „Excel“ iš „Podcast“, 2186 serija: VBA Rūšiuoti pagal spalvas.

Ei, sveiki sugrįžę į internetinę transliaciją, aš Billas Jelenas. Šiandienos klausimas išsiųstas „YouTube“. Turėjau vaizdo įrašą, kaip rūšiuoti su VBA, ir jie norėjo rūšiuoti pagal spalvas su VBA, o tai yra daug sudėtingiau. Aš pasakiau: "Kodėl jūs tiesiog neįjungiate makrokomandos ir matote, kas atsitiks?" Deja, makro įrašymo įrenginys, žinokit, mus priartina, bet iki galo nepriveda.

Taigi, peržiūra, makrokomandos, įrašų makrokomanda, „HowToSortByColor“, makrokomandų saugojimas šioje darbaknygėje - puikus. Spustelėkite Gerai. Gerai, todėl dabar veikia makrokomandos įrašymo įrenginys, mes eisime čia į skirtuką Duomenys ir sakysime Rūšiuoti. Mes naudosime dialogo langą Rūšiuoti ir sukursime tai, gerai? Taigi sakysime, kad norime pridėti lygį, Rūšiuoti ant vyšnios, bet ne Rūšiuoti pagal ląstelių vertes; mes rūšiuosime pagal ląstelių spalvą - langelių spalva yra užpildymo spalva - ir mes norime ant viršaus uždėti raudoną spalvą, tada nukopijuoti tą lygį ir antrą - geltoną; tada pridėsime naują lygį - eisime į D stulpelį, datos stulpelį - Rūšiuoti pagal ląstelių spalvą, pirmiausia raudoną, nukopijuokite tą lygį, geltoną ir tada čia; anuomet, čia, Elderberry, E stulpelyje, yra keli mėlyni šriftai, kurių nenoriu pamatyti, kaip tai atrodė,todėl pridėsime tai kaip rūšiavimo šrifto spalvą su mėlyna viršuje; ir tada, jei visa tai yra lygi be spalvų, mes pridėsime vieną galutinį lygį tiesiog A stulpelyje - langelių vertės, didžiausios iki mažiausios; ir spustelėkite Gerai.

Gerai, dabar, keli dalykai - nepraleiskite šio kito žingsnio - jūsų failo, dabar, garantuoju, kad esate saugomas kaip xlsx. Tai puikus laikas atlikti failą, išsaugoti kaip ir išsaugoti kaip xlsm arba xlsb. Jei to nepadarysite, išsaugojus šį failą bus prarastas visas jūsų darbas iki šio taško. Jie ištrins viso, kas saugoma „xlsx“, makrokomandas. Gerai?

Taigi mes nustojome ten įrašinėti ir tada norime eiti pažvelgti į savo makrokomandas. Taigi, tai galite padaryti naudodami „View“, „Macros-- View“, „Macros--“ ir suraskite ką tik įrašytą makrokomandą - „HowToSortByColor“ - ir spustelėkite Redaguoti. Gerai, taigi, čia yra mūsų makrokomanda, ir kai aš į tai žiūriu, iškyla problema, kad šiandien mes turime 25 eilutes plius antraštę. Taigi ji eina į 26 eilutę. Jie sunkiai užkodavo, kad visada žiūrės žemyn į 26 eilutes.

Bet galvoju apie tai, ypač palyginus su senąja VBA rūšiavimui, neturime nurodyti viso diapazono - tik vienos langelio stulpelyje. Taigi visur, kur jie turi C26 stulpelį, aš jį sumažinsiu, norėdamas pasakyti: "Ei, ne, pažvelk į pirmąją tos stulpelio langelį". Taigi E2, o tada, čia, A2. Taigi mano atveju turėjau pakeisti 1, 2, 3, 4, 5, 6, rūšiavimo lygius - 6 dalykus.

Tada tai yra ta dalis, kurią makro įrašymo įrenginys iš tikrųjų labai blogai išlaiko, ar jie visą laiką rūšiuos tik į 26 eilutes. Taigi aš tai pakeisiu. Aš pasakysiu: "Žiūrėkite, pradėkite nuo A21 diapazono ir išplėskite jį iki .CurrentRegion". Pažvelkime į „Excel“ ir sužinokime, ką tai daro. Taigi, jei norėčiau pasirinkti bet kurią langelį - A1 ar bet ką - ir paspausti „Ctrl + *“, jis parenka dabartinį regioną. Gerai, padarykime tai. Čia, nuo vidurio, „Ctrl + *“ ir ką tai daro, tęsiasi visomis kryptimis, kol pasiekia skaičiuoklės kraštą, ant skaičiuoklės viršaus arba dešiniajame duomenų krašte arba apatiniame duomenų krašte . Taigi sakant A1 .CurrentRegion, tai lyg pereiti į A1 ir paspausti Ctrl + *. Gerai? Taigi, čia jūs turite pakeisti tą dalyką. Dabar visa kita makrokomandoje yra gerai; tai 's visi eina i darba. Jie gavo „SortOnCellColor“ ir „SortOnFontColor“ bei „xlSortOn“. Man nereikia jaudintis dėl to; man tereikia pažiūrėti čia ir pamatyti, kad jie griežtai užkodavo regioną, kurį ketino naudoti diapazone, užkodavo, kiek toli jie nuėjo, ir to nereikia griežtai koduoti. Atlikdami šį paprastą žingsnį, pakeisdami tuos šešis elementus ir septintąjį elementą, turime kažką, kas turėtų veikti.

Dabar atlikime testą. Grįžkime čia prie „Excel“ ir apačioje pridėsime keletą naujų eilučių. Aš tiesiog įdėsiu ten 11, ir mes pridėsime porą raudonų - raudoną, geltoną ir tada čia mėlyną. Gerai. Taigi, jei einame paleisti šį kodą - paleisti šį kodą, aš spusteliu čia ir spustelėkite mygtuką Vykdyti - ir tada grįžtu, turėtume pamatyti, kad tas 11 tapo viršutiniu raudonos spalvos elementu, jis ten pasirodė geltonos spalvos, ir tai pasirodo bliuzo spalvoje, taigi viskas puikiai veikia. Kodėl jis pakilo į viršų? Nes atsitiko taip, kad paskutinė rūšis yra A stulpelis, taigi, kai yra lygiosios, A stulpelis atrodo kaip kaklaraištis. Taigi tas kodas veikia.

Norėdami išmokti rašyti VBA, aš kartu su Tracy Syrstad parašiau knygų seriją „Excel VBA“ ir „MACROS“. Dabar buvo 2003, 2007, 2010, 2013 ir 2016 m. Leidimas; netrukus 2019 m. Gerai, eikite, raskite versiją, atitinkančią jūsų „Excel“ versiją, ir tai pakels mokymosi kreivę.

Apibendrinimas: Šiandienos epizodas yra „Kaip naudoti VBA rūšiuojant pagal spalvas“. Lengviausias būdas tai padaryti, ypač todėl, kad nežinote, kokie RGB kodai buvo naudojami kiekvienai spalvai - tiesiog pasirinkote raudoną spalvą, nežinote, koks yra RGB kodas, ir nenorite eiti ieškoti it up - įjunkite makrokomandos įrašymo įrenginį naudodami „View“, „Macros“, „Record New Macro“. Atlikę rūšiavimą, spustelėkite Sustabdyti įrašymą - jis yra apatiniame kairiajame kampe - „Alt“ + F8, jei norite pamatyti makrokomandų sąrašą, arba „View“, „Macros“, „View Macro“ - skirtuką „View“, „Macros“ ir tada peržiūrėkite makrokomandas - tai painu. PSasirinkite makrokomandą ir spustelėkite Redaguoti. Kai tik pamatysite C2, nurodydami kai kuriuos diapazono numerius, tiesiog pakeiskite jį į 2 eilutę. Tada, kur jie nurodo rūšiuojamą diapazoną, diapazonas („A1“), „CurrentRegion“ išsiplės. Gerai.

Na, ai, noriu padėkoti už tai, kad užsukote, pasimatysime kitą kartą kitam netcast'ui iš.

Vaizdo įraše nustatiau šešių lygių rūšiavimą. Čia rodomas pabaigos dialogo langas:

Rūšiuoti pagal raudoną, geltoną C, raudoną, geltoną d, mėlyną e, skaičius a

Tą dieną, kai atsitiko įrašyti makrokomandą, turėjau 23 duomenų eilutes ir antraštę. Makrokomandoje buvo septynios vietos, kurios užkodavo eilučių skaičių. Jie turi būti pakoreguoti.

Kiekvienam rūšiavimo lygiui yra toks kodas:

ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2:C24"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0) 

Tai kvaila, kad makrokomandoje nurodomas C2: C24. Stulpelyje turite nurodyti tik vieną langelį, todėl pakeiskite pirmąją aukščiau esančią eilutę į:

ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _

Atlikite panašų pakeitimą kiekvienam rūšiavimo lygiui.

Netoli įrašytos makrokomandos pabaigos turite įrašytą kodą, kad iš tikrųjų atliktumėte rūšiavimą. Tai prasideda taip:

With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1:E24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With

Užuot tik rūšiavę A1: E24, pakeiskite kodą, kad pradėtumėte nuo A1 ir išplėstumėte iki dabartinio regiono. (Dabartinis regionas yra tai, ką gausite, jei paspausite Ctrl + * iš langelio).

.SetRange Range("A1").CurrentRegion

Galutinis vaizdo įraše pateiktas kodas yra:

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

Pastaba

Tikėtina, kad jūsų darbaknygė išsaugota su „XLSX“ plėtiniu. Atlikite „Išsaugoti kaip“, jei norite pakeisti „XLSM“ arba „XLSB“ plėtinį. Visos XLSX išsaugotos makrokomandos ištrinamos.

„Excel“ dienos mintis

Aš paprašiau savo „Excel Master“ draugų patarimo apie „Excel“. Šiandienos mintis apmąstyti:

„„ Apple “per dieną apsaugo nuo VBA.

Tomas Urtis

Įdomios straipsniai...