Sebelum ini di Podcast 2093, saya menunjukkan jenis VBA ringkas yang berfungsi jika anda tidak menyusun mengikut warna. Hari ini, Neeta meminta VBA menyusun data Excel mengikut warna.
Perkara paling sukar untuk menyusun mengikut VBA adalah mengetahui kod warna RGB yang anda gunakan. Dalam 99% kes, anda tidak memilih warna dengan memasukkan nilai RGB. Anda memilih warna dengan menggunakan dropdown ini di Excel.

Dan, walaupun anda boleh menggunakan Fill, More Colors, Custom untuk mengetahui bahawa warna yang dipilih adalah RGB (112,48,160), itu adalah kerumitan jika anda mempunyai banyak warna.

Jadi - Saya lebih suka menghidupkan perakam makro dan membiarkan perakam makro mengetahui kodnya. Kod yang dihasilkan oleh perakam makro tidak pernah sempurna. Berikut adalah video yang menunjukkan cara menggunakan perakam makro semasa menyusun mengikut warna.
Transkrip Video
Belajar Excel dari Podcast, Episode 2186: VBA Susun mengikut Warna.
Hei, selamat datang kembali ke netcast, saya Bill Jelen. Soalan hari ini, dihantar di YouTube. Saya mempunyai video di luar sana mengenai bagaimana menyusun dengan VBA, dan mereka mahu menyusun mengikut warna dengan VBA, yang jauh lebih rumit. Saya berkata, "Mengapa anda tidak menghidupkan perakam makro dan melihat apa yang berlaku?" Dan, malangnya, perakam makro, anda tahu, ia membuat kita hampir tetapi ia tidak membawa kita ke sana.
Jadi Lihat, Makro, Rakam Makro, "HowToSortByColor", Simpan Makro di Buku Kerja Ini - sempurna. Klik OK. Baiklah, jadi sekarang perekam makro sedang berjalan, kita akan datang ke sini ke tab Data dan kita akan mengatakan Urutkan. Kita akan menggunakan kotak dialog Susun dan kita akan membina ini, baiklah? Oleh itu, kita akan mengatakan bahawa kita mahu menambah tahap, Isih pada Cherry, tetapi bukan Isih pada Nilai Sel; kita akan Urutkan Warna Sel - Warna Sel adalah warna isian di sana - dan kita mahu meletakkan merah di atas dan kemudian menyalin tahap itu, dan meletakkan kuning kedua; dan kemudian kita akan menambah tahap baru - kita akan pergi ke lajur D, lajur tarikh - Susun pada Warna Sel, merah terlebih dahulu, salin tahap itu, kuning, dan kemudian di sini; kemudian, di sini di Elderberry, lajur E, terdapat beberapa fon biru yang saya tidak mahu lihat seperti apa,jadi kami akan menambahkannya sebagai warna Sort on Font dengan warna biru di atas; dan kemudian jika semua ini adalah dasi tanpa warna sama sekali, kita akan menambahkan satu tahap terakhir hanya pada lajur A-- Nilai Sel, Terbesar hingga terkecil; dan klik OK.
Baiklah, sekarang, beberapa perkara - jangan lewatkan langkah seterusnya - fail anda, sekarang, saya jamin anda disimpan sebagai xlsx. Ini adalah masa yang tepat untuk melakukan File, Save As, dan simpan sebagai xlsm atau xlsb. Sekiranya anda tidak melakukan itu, semua kerja anda hingga sekarang akan hilang semasa anda menyimpan fail ini. Mereka akan memadamkan makro apa sahaja yang tersimpan di xlsx. Baiklah?
Oleh itu, kami berhenti merakam di sana, dan kemudian kami ingin melihat makro kami. Oleh itu, anda boleh melakukannya dengan View, Macros-- View, Macros-- dan cari makro yang baru sahaja kami rakam-- HowToSortByColor-- dan klik Edit. Baiklah, jadi inilah makro kami, dan ketika saya melihat ini, masalah yang kita ada ialah, hari ini kita mempunyai 25 baris ditambah tajuk. Jadi ia turun ke baris 26. Dan mereka mempunyai kod keras bahawa mereka akan selalu melihat baris ke 26.
Tetapi ketika saya memikirkan perkara ini, terutama jika dibandingkan dengan VBA lama untuk disusun, kita tidak perlu menentukan keseluruhan julat - hanya satu sel di lajur. Jadi di mana sahaja mereka mempunyai lajur C26, saya akan mengurangkannya hanya dengan mengatakan, "Hei, tidak, lihat sel pertama di lajur itu." Jadi E2, dan kemudian, di sini, A2. Oleh itu, saya mempunyai 1, 2, 3, 4, 5, 6, tahap - 6 perkara yang perlu diubah.
Dan inilah bahagian yang dirakam oleh makro makro, sangat buruk, adakah mereka hanya akan mengurutkan baris ke 26 sepanjang masa. Jadi saya akan mengubah ini. Saya akan mengatakan, "Lihat, mulailah pada jarak A21, dan panjangkan ke .CurrentRegion." Mari lihat Excel dan lihat apa yang berlaku. Jadi, jika saya hanya memilih satu sel - A1 atau apa sahaja - dan tekan Ctrl + *, ia memilih Wilayah semasa. Baiklah, mari kita buat. Di sini, dari tengah, Ctrl + *, dan apa yang dilakukannya, adakah ia meluas ke semua arah sehingga menyentuh tepi spreadsheet, di atas spreadsheet, atau di tepi kanan data atau tepi bawah data . Jadi, dengan mengatakan A1 .CurrentRegion, seperti pergi ke A1 dan menekan Ctrl + *. Baiklah? Jadi, di sini anda harus mengubah perkara itu. Sekarang semua yang lain dalam makro baik-baik saja; ia 'semua akan bekerja. Mereka mendapat SortOnCellColor dan SortOnFontColor dan xlSortOn. Saya tidak perlu risau tentang perkara itu; yang harus saya lakukan ialah melihat di sini dan melihat bahawa mereka mempunyai kod keras wilayah yang akan mereka gunakan untuk julat itu, berkod keras sejauh mana mereka pergi, dan tidak perlu dikodkan. Dan dengan langkah mudah itu, mengubah enam item tersebut dan item ketujuh, kita mempunyai sesuatu yang sepatutnya berfungsi.
Sekarang, mari kita lakukan ujian. Mari kembali ke Excel dan kami akan menambah beberapa baris baru di bahagian bawah. Saya akan meletakkan 11s di sana, dan kita akan menambah beberapa Merah - merah, kuning, dan kemudian di sini biru. Baiklah. Jadi jika kita jalankan kod ini - jalankan kod ini, jadi saya klik di sini, dan klik butang Jalankan - dan kemudian kembali, kita harus melihat bahawa 11 menjadi item teratas berwarna merah, ia muncul di sana di kuning, dan ia muncul dalam warna biru, sehingga semuanya berfungsi dengan sempurna. Mengapa ia sampai ke puncak? Kerana kebetulan yang terakhir adalah Kolom A dan jadi apabila ada tali, ia kelihatan pada lajur A sebagai tiebreak. Jadi kod itu berfungsi.
Untuk belajar menulis VBA, saya, bersama dengan Tracy Syrstad, telah menulis satu siri buku, Excel VBA dan MACROS. Terdapat edisi sekarang untuk 2003, 2007, 2010, 2013 dan 2016; tidak lama lagi 2019. Baiklah, jadi, cari versi yang sesuai dengan versi Excel anda dan ini akan memberi anda keluk pembelajaran.
Ringkasan: Episod Hari Ini adalah, Cara Menggunakan VBA untuk Diurut mengikut Warna. Cara termudah untuk melakukan ini, terutamanya kerana anda tidak tahu apa kod RGB yang digunakan untuk setiap warna - anda hanya memilih merah, anda tidak tahu apa kod RGB, dan anda tidak mahu kelihatan naik - hidupkan perakam makro menggunakan View, Macros, Record New Macro. Setelah selesai melakukan urutan, klik Hentikan Rakaman - itu di sudut kiri bawah-- Alt + F8 untuk melihat senarai makro, atau Lihat, Makro, Lihat Makro-- tab Lihat, Makro, dan kemudian Lihat Makro-- yang membingungkan. Pilih makro anda dan klik Edit, dan bila-bila masa anda melihat C2 ke beberapa nombor julat, ubah saja ke titik ke baris 2. Dan kemudian, di mana mereka menentukan julat untuk diurutkan, Rentang ("A1"), CurrentRegion, akan berkembang. Baiklah.
Baiklah, hei, saya ingin mengucapkan terima kasih kerana berhenti, saya akan berjumpa dengan anda untuk lain-lain netcast dari.
Dalam video itu, saya menyusun jenis enam peringkat. Kotak dialog akhir ditunjukkan di sini:

Pada hari kebetulan saya merakam makro, saya mempunyai 23 baris data ditambah tajuk. Terdapat tujuh tempat dalam makro yang mencantumkan bilangan baris. Ini mesti disesuaikan.
Untuk setiap peringkat, terdapat kod seperti ini:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2:C24"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0)
Ini bodoh bahawa perekam makro menentukan C2: C24. Anda hanya perlu menentukan satu sel di lajur, jadi ubah baris pertama di atas menjadi:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _
Buat perubahan yang serupa untuk setiap tahap urutan.
Menjelang akhir makro yang dirakam, anda mempunyai kod yang direkodkan untuk benar-benar melakukan urutan. Ia bermula seperti ini:
With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1:E24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
Daripada hanya menyusun A1: E24, ubah kod untuk bermula di A1 dan panjangkan ke wilayah semasa. (Wilayah semasa adalah apa yang anda dapat jika anda menekan Ctrl + * dari sel).
.SetRange Range("A1").CurrentRegion
Kod akhir yang ditunjukkan dalam video adalah:
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
Catatan
Kemungkinan buku kerja anda disimpan dengan sambungan XLSX. Lakukan Save As untuk menukar ke sambungan XLSM atau XLSB. Segala makro yang disimpan dalam XLSX akan dipadamkan.
Pemikiran Excel Hari Ini
Saya telah meminta nasihat rakan Excel saya mengenai Excel. Pemikiran hari ini untuk merenungkan:
"Apple setiap hari menjauhkan VBA."
Tom Urtis