Aiemmin Podcast 2093: ssä näytin yksinkertaisen VBA-lajittelun, joka toimii, jos et lajittele värejä. Tänään Neeta pyytää VBA: ta lajittelemaan Excel-tiedot värien mukaan.
VBA: n mukaisessa lajittelussa hankalinta on selvittää käyttämäsi RGB-värikoodit. 99 prosentissa tapauksista et valinnut väriä syöttämällä RGB-arvoja. Valitsit värin käyttämällä tätä avattavaa valikkoa Excelissä.

Ja vaikka voit käyttää Täytä, Lisää värejä, Mukautettu oppiaksesi, että valittu väri on RGB (112,48,160), se on hässäkkä, jos sinulla on paljon värejä.

Joten - haluan kytkeä makrotallentimen päälle ja antaa makrotallentimen selvittää koodin. Makrotallentimen tuottama koodi ei ole koskaan täydellinen. Tässä on video, joka näyttää kuinka makrotallenninta käytetään värin mukaan lajittelussa.
Videon transkriptio
Opi Excel Podcastista, Jakso 2186: VBA-lajittelu värin mukaan.
Hei, tervetuloa takaisin netcastiin, olen Bill Jelen. Tämän päivän kysymys, lähetetty YouTubessa. Minulla oli video siitä, kuinka lajitella VBA: n kanssa, ja he halusivat lajitella värin mukaan VBA: lla, mikä on paljon monimutkaisempaa. Sanoin: "Miksi et vain käynnistä makrotallenninta ja katso mitä tapahtuu?" Ja valitettavasti, makrotallennin, tiedät, se saa meidät lähelle, mutta se ei vie meitä aina sinne.
Joten Näytä, Makrot, Nauhoita makro, "HowToSortByColor", Tallenna makro tähän työkirjaan - täydellinen. Napsauta OK. Selvä, joten nyt makrotallennin on käynnissä, tulemme tänne Data-välilehdelle ja sanomme Lajittele. Aiomme käyttää Lajittele-valintaikkunaa ja rakennamme tämän, okei? Joten sanomme, että haluamme lisätä tason, Lajittele kirsikalla, mutta emme Lajittele soluarvoilla; aiomme lajitella soluvärillä - soluväri on siellä täyteväri - ja haluamme laittaa punaisen päälle ja kopioida sen jälkeen tason ja laittaa keltaisen toisen; ja sitten lisätään uusi taso - siirrymme sarakkeeseen D, päivämäärä -sarakkeeseen - Lajittele soluvärille, ensin punainen, kopioi tämä taso, keltainen ja sitten tänne; sitten täällä Elderberryn sarakkeessa E on muutama sininen kirjasin, en halua nähdä miltä se näytti,joten lisätään se lajitteluperusteisena kirjasimen väreinä, joiden päällä on sininen; ja jos kaikki nämä ovat tasan ilman yhtään väriä, lisätään yksi viimeinen taso vain sarakkeeseen A - Solun arvot, suurimmasta pienimpään; ja napsauta OK.
Selvä, nyt, pari asiaa - älä ohita tätä seuraavaa vaihetta - tiedostosi, takaan nyt, että olet tallennettu xlsx-tiedostona. Tämä on hyvä aika tehdä tiedosto, tallentaa nimellä ja tallentaa se xlsm- tai xlsb-tiedostona. Jos et tee niin, kaikki tähän asti tekemäsi työ menetetään, kun tallennat tämän tiedoston. He poistavat kaiken xlsx: ään tallennetun makron. Hyvä on?
Joten lopetimme tallennuksen siellä ja sitten haluamme mennä katsomaan makroja. Joten voit tehdä tämän View-, Macros- View-, Macros- ja etsimällä juuri tallentamasi makron - HowToSortByColor- ja napsauttamalla Muokkaa. Selvä, joten tässä on makromme, ja kun tarkastelen tätä, meillä on ongelma, tänään meillä sattuu olemaan 25 riviä plus otsikko. Joten se menee riville 26. Ja he ovat koodanneet, että he aikovat aina katsoa alaspäin riville 26.
Mutta kun ajattelen tätä, etenkin verrattuna vanhaan VBA-lajitteluun, meidän ei tarvitse määrittää koko aluetta - vain yksi solu sarakkeessa. Joten missä tahansa, missä heillä on sarake C26, aion pienentää sitä sanomalla: "Hei, ei, katso kyseisen sarakkeen ensimmäistä solua." Joten E2 ja sitten tässä A2. Joten minun tapauksessani minulla oli 1, 2, 3, 4, 5, 6, lajittelutasot - 6 muutettavaa asiaa.
Ja sitten tämä on osa, jonka makrotallennin saa todella, todella huonoksi, ovatko he vain lajittelemassa rivejä 26 koko ajan. Joten aion muuttaa tätä. Aion sanoa: "Katso, aloita alueelta A21 ja laajenna se kohtaan .CurrentRegion." Katsotaanpa Excel ja katsotaan, mitä se tekee. Joten, jos valitsisin vain yhden solun - A1 tai jotain - ja painan Ctrl + *, se valitsee nykyisen alueen. Okei, tehdään se. Täällä keskeltä Ctrl + * ja mitä se tekee, jatkuuko se kaikkiin suuntiin, kunnes se osuu laskentataulukon reunaan, laskentataulukon päälle tai tietojen oikeaan reunaan tai tietojen alareunaan . Joten sanomalla A1 .CurrentRegion, se on kuin menisit A1: lle ja painaisit Ctrl + *. Hyvä on? Joten tässä sinun on muutettava tuo asia. Nyt kaikki muu makrossa on kunnossa; se'kaikki menevät töihin. He saivat SortOnCellColor ja SortOnFontColor ja xlSortOn. Minun ei tarvitse huolehtia mistään siitä; Minun tarvitsee vain katsoa tänne ja nähdä, että he koodasivat kovasti alueen, jota aioimme käyttää alueelle, koodattiin kovasti, kuinka pitkälle ne menivät, eikä sitä tarvitse kovakoodata. Ja tällä yksinkertaisella vaiheella, muuttamalla näitä kuutta ja seitsemättä kohdetta, meillä on jotain, jonka pitäisi toimia.
Tehdään nyt testi. Palataan takaisin tänne Exceliin ja lisätään joitain uusia rivejä alareunaan. Laitan vain 11: n sinne, ja lisäämme pari punaista - punainen, keltainen ja sitten täällä sininen. Hyvä on. Joten jos menemme suorittamaan tätä koodia - ajaa tämä koodi, joten napsautan tänne ja napsautan Suorita-painiketta - ja palaan sitten takaisin, meidän pitäisi nähdä, että 11: stä tuli ylin kohde punaisella, se ilmestyi siellä keltaiset, ja se näkyy bluesissa, joten kaikki toimii täydellisesti. Miksi se meni huipulle? Koska tapahtui, että viimeinen lajike on sarake A, ja kun on tasapeli, se näyttää sarakkeen A olevan tiebreaker. Joten koodi toimii.
Opetellakseni VBA: n kirjoittamista, olen yhdessä Tracy Syrstadin kanssa kirjoittanut sarjan kirjoja, Excel VBA ja MACROS. Nyt on julkaistu vuosien 2003, 2007, 2010, 2013 ja 2016 painos; pian 2019. Selvä, siis etsi etsimäsi versio, joka vastaa Excel-versiotasi, ja tämä vie sinut oppimiskäyrälle.
Kokoonpano: Tämän päivän jakso on, Kuinka käyttää VBA: ta lajittelemaan värin mukaan. Helpoin tapa tehdä tämä, varsinkin kun et tiedä mitä RGB-koodeja käytettiin kullekin värille - valitsit vain punaisen et tiedä mikä RGB-koodi on, etkä halua mennä etsimään se ylös - kytke makrotallennin päälle View, Macros, Record New Macro -toiminnoilla. Kun olet suorittanut lajittelun, napsauta Lopeta tallennus - se on vasemmassa alakulmassa - Alt + F8 nähdäksesi luettelon makroista tai Näytä, Makrot, Näytä makro - Näytä-välilehti, Makrot ja sitten Näytä makrot - se on hämmentävää. PSalitse makro ja napsauta Muokkaa, ja milloin tahansa näet C2: n joillekin alueiden numeroille, vaihda se osoittamaan riville 2. Ja sitten, missä ne määrittelevät lajiteltavan alueen, alue ("A1") ja CurrentRegion laajenee. Hyvä on.
No, hei, haluan kiittää sinua pysähtymisestä. Nähdään ensi kerralla uudesta netcastista.
Videossa asetin kuuden tason lajittelun. Lopullinen valintaikkuna näytetään tässä:

Päivänä, jolloin satun tallentamaan makron, minulla oli 23 tietoriviä plus otsikko. Makrossa oli seitsemän paikkaa, joka koodasi rivien lukumäärän. Ne on mukautettava.
Jokaiselle lajittelutasolle on olemassa seuraava koodi:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2:C24"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0)
Tämä on typerää, että makrotallennin määrittää C2: C24. Sinun on määritettävä vain yksi solu sarakkeessa, joten muuta ensimmäinen yllä oleva rivi:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _
Tee samanlainen muutos kullekin lajittelutasolle.
Tallennetun makron loppupuolella sinulla on tallennettu koodi tosiasiallisesti lajittelua varten. Se alkaa näin:
With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1:E24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
Sen sijaan, että lajittelisit A1: E24: n, vaihda koodi siten, että se alkaa A1: stä ja ulottuu nykyiselle alueelle. (Nykyinen alue on se, mitä saat, jos painat Ctrl + * solusta).
.SetRange Range("A1").CurrentRegion
Viimeinen videossa näkyvä koodi on:
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
Huomautus
Työkirjasi on todennäköisesti tallennettu XLSX-laajennuksella. Tee Tallenna nimellä vaihtaaksesi XLSM- tai XLSB-laajennukseen. Kaikki XLSX: ään tallennetut makrot poistetaan.
Päivän Excel-ajatus
Olen pyytänyt Excel Master -kaveriltani neuvoja Excelistä. Tämän päivän ajatus miettiä:
"Apple päivässä pitää VBA: n poissa."
Tom Urtis