Excel VBA ile Renge Göre Sırala - Excel İpuçları

Daha önce Podcast 2093'te, renge göre sıralama yapmıyorsanız çalışan basit bir VBA sıralaması göstermiştim. Bugün Neeta, VBA'dan Excel verilerini renge göre sıralamasını istiyor.

VBA'ya göre sıralama ile ilgili en zor şey, hangi RGB renk kodlarını kullandığınızı bulmaktır. Vakaların% 99'unda, RGB değerlerini girerek bir renk seçmediniz. Excel'de bu açılır menüyü kullanarak bir renk seçtiniz.

Çoğu kişi bu açılır menüyü kullanarak Dolgu veya Yazı Tipi rengini seçer

Ayrıca, seçilen rengin RGB (112,48,160) olduğunu öğrenmek için Dolgu, Daha Fazla Renk, Özel'i kullanabilirsiniz, ancak çok fazla renge sahipseniz bu bir güçlüktür.

RGB kodları bu iletişim kutusunda gizlidir

Bu yüzden, makro kaydediciyi açmayı ve makro kaydedicinin kodu çözmesine izin vermeyi tercih ederim. Makro kaydedici tarafından üretilen kod asla mükemmel değildir. Renge göre sıralama yaparken makro kaydedicinin nasıl kullanılacağını gösteren video burada.

Video Metni

Excel'i Podcast, Bölüm 2186'dan Öğrenin: VBA Renge Göre Sırala.

Hey, İnternet'e tekrar hoş geldiniz, ben Bill Jelen. Bugünün sorusu YouTube'a gönderildi. Orada VBA ile nasıl sıralama yapılacağına dair bir videom vardı ve çok daha karmaşık olan VBA ile renge göre sıralamak istediler. "Neden makro kaydediciyi açıp ne olacağını görmüyorsunuz?" Dedim. Ve ne yazık ki, makro kaydedici, bilirsiniz, bizi yaklaştırır ama bizi oraya kadar götürmez.

Yani Görünüm, Makrolar, Makro Kaydet, "HowToSortByColor", Makroyu Bu Çalışma Kitabında Sakla - mükemmel. Tamam'ı tıklayın. Pekala, şimdi makro kaydedici çalışıyor, buraya Veri sekmesine geleceğiz ve Sırala diyeceğiz. Bir Sırala iletişim kutusu kullanacağız ve bunu inşa edeceğiz, tamam mı? Öyleyse, bir seviye eklemek istediğimizi söyleyeceğiz, Kirazda Sırala ama Hücre Değerlerine Göre Sırala değil; Hücre Rengine Göre Sırala yapacağız - Hücre Rengi oradaki dolgu rengidir - ve kırmızıyı en üste koymak ve sonra bu seviyeyi kopyalamak ve sarıyı ikinci olarak koymak istiyoruz; ve sonra yeni bir seviye ekleyeceğiz - D sütununa, tarih sütununa gideceğiz - Hücre Rengine Göre Sırala, önce kırmızı, bu seviyeyi kopyalayın, sarı ve sonra buraya; ve sonra, burada, Mürver, sütun E'de, neye benzediğini görmek istemediğim birkaç mavi yazı tipi var,bu yüzden bunu üstte mavi olan Yazı Tipinde Sırala rengi olarak ekleyeceğiz; ve sonra bunların hiçbiri renk içermeyen bir bağ ise, sadece A sütununa son bir seviye ekleyeceğiz - En Büyükten En Küçüğe Hücre Değerleri; ve Tamam'ı tıklayın.

Pekala, şimdi, birkaç şey-- bu sonraki adımı atlamayın-- dosyanız, şu anda, garanti ederim xlsx olarak saklanır. Dosya yapmak, Farklı Kaydetmek ve xlsm veya xlsb olarak kaydetmek için harika bir zamandır. Bunu yapmazsanız, bu dosyayı kaydettiğinizde bu noktaya kadar tüm çalışmanız kaybolacaktır. Xlsx'te depolanan her şeyin makrolarını silecekler. Peki?

Böylece kaydı orada durdurduk ve sonra makrolarımıza bakmak istiyoruz. Böylece, bunu Görünüm, Makrolar - Görünüm, Makrolar ile yapabilir ve az önce kaydettiğimiz makroyu - HowToSortByColor-- bulabilir ve Düzenle'yi tıklayabilirsiniz. Pekala, işte makromuz ve buna baktığımda, sahip olduğumuz sorun şu ki, bugün 25 satır artı bir başlığımız var. Böylece 26. sıraya iniyor. Ve onlar her zaman 26. sıraya bakacaklarını kodladılar.

Ama bunu düşündüğümde, özellikle sıralama için eski VBA ile karşılaştırıldığında, tüm aralığı belirtmemize gerek yok - sütunda sadece bir hücre. Yani C26 sütununa sahip oldukları her yerde, "Hey, hayır, o sütundaki ilk hücreye bakın" demek için onu azaltacağım. Yani E2 ve sonra burada A2. Benim durumumda, 1, 2, 3, 4, 5, 6, sıralı seviyelerim vardı - değiştirilecek 6 şey.

Ve sonra bu, makro kaydedicinin gerçekten çok kötüleştiği kısım, her zaman sadece 26. sıralara göre sıralayacaklar. Yani bunu değiştireceğim. "Bak, A21 aralığından başla ve onu .CurrentRegion'a genişlet" diyeceğim. Excel'e bir göz atalım ve bunun ne işe yaradığını görelim. Yani, herhangi bir hücreyi (A1 veya herhangi bir şey) seçip Ctrl + * tuşlarına basarsam, mevcut Bölgeyi seçer. Tamam, hadi yapalım. Burada, ortadan, Ctrl + * ve bunun yaptığı şey, elektronik tablonun kenarına, elektronik tablonun üstüne veya verinin sağ kenarına ya da verilerin alt kenarına değene kadar her yöne doğru genişlemesi mi? . Yani A1 .CurrentRegion diyerek, A1'e gidip Ctrl + * tuşlarına basmak gibidir. Peki? Yani, burada o şeyi değiştirmelisiniz. Şimdi makrodaki diğer her şey yolunda; o'hepsi işe yarayacak. SortOnCellColor ve SortOnFontColor ve xlSortOn'a sahipler. Bunların hiçbiri için endişelenmeme gerek yok; Tek yapmam gereken buraya bakmak ve menzil için kullanacakları bölgeyi sabit kodladıklarını, bunların ne kadar ileri gittiğini sabit kodladıklarını ve kodlanması gerekmediğini görmek. Ve bu basit adımla, bu altı öğeyi ve yedinci öğeyi değiştirerek, çalışması gereken bir şeyimiz var.

Şimdi testi yapalım. Buraya Excel'e geri dönelim ve alt kısımda yeni satırlar ekleyelim. Sadece 11'leri oraya koyacağım ve birkaç Kırmızı ekleyeceğiz - bir kırmızı, bir sarı ve sonra burada bir mavi. Peki. Öyleyse gidip bu kodu çalıştırırsak - bu kodu çalıştırın, bu yüzden buraya tıklarım ve Çalıştır düğmesini tıklarım-- ve sonra geri dönersek, 11'in kırmızı renkte en üst öğe olduğunu görmeliyiz, orada sarılar ve mavilerde ortaya çıkıyor, bu yüzden hepsi mükemmel çalışıyor. Neden zirveye çıktı? Çünkü son sıralamanın Sütun A olduğu ve dolayısıyla bir eşitlik olduğunda, eşitliği bozan olarak A sütununa bakar. Böylece bu kod çalışıyor.

VBA yazmayı öğrenmek için Tracy Syrstad ile birlikte bir dizi kitap, Excel VBA ve MACROS yazdım. Şimdi 2003, 2007, 2010, 2013 ve 2016 için bir baskı var; Yakında 2019. Pekala, o halde gidip Excel sürümünüzle eşleşen sürümü bulun ve bu sizi öğrenme eğrisini yükseltecek.

Sonuç: Bugünün Bölümü, Renge Göre Sıralamak için VBA Nasıl Kullanılır. Bunu yapmanın en kolay yolu, özellikle her renk için hangi RGB kodlarının kullanıldığını bilmediğiniz için - sadece kırmızıyı seçtiniz, RGB kodunun ne olduğunu bilmiyorsunuz ve gitmek istemiyorsunuz Yukarı - Görünüm, Makrolar, Yeni Makro Kaydet'i kullanarak makro kaydediciyi açın. Sıralamayı bitirdikten sonra, Kaydı Durdur'a tıklayın - sol alt köşede - Makroların bir listesini görmek için Alt + F8 veya Görünüm, Makrolar, Makro Görüntüle - Görünüm sekmesi, Makrolar ve ardından Makroları Görüntüle - bu kafa karıştırıcı. PMronuzu seçin ve Düzenle'yi tıklayın ve C2'yi bazı aralık sayılarına göre her gördüğünüzde, bunu 2. sırayı gösterecek şekilde değiştirin. Ardından, sıralanacak aralığı belirledikleri yerde Aralık ("A1"), GeçerliBölge genişler. Peki.

Pekala, hey, uğradığın için teşekkür etmek istiyorum, gelecek sefer başka bir internet yayını için görüşürüz.

Videoda altı seviyeli bir sıralama oluşturdum. Bitiş iletişim kutusu burada gösterilmektedir:

Kırmızı, sarı C, kırmızı, sarı d, mavi e, sayılar a olarak sıralayın

Makroyu kaydettiğim gün 23 satır veri artı bir başlığım vardı. Makroda, satır sayısını sabit kodlayan yedi yer vardı. Bunların ayarlanması gerekiyor.

Her sıralama seviyesi için şuna benzer bir kod vardır:

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

Bu, makro kaydedicinin C2: C24'ü belirlemesi aptalca. Sütunda yalnızca bir hücre belirtmeniz gerekir, bu nedenle yukarıdaki ilk satırı şu şekilde değiştirin:

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

Sıralama düzeylerinin her biri için benzer bir değişiklik yapın.

Kaydedilen makronun sonuna doğru, sıralamayı gerçekten yapmak için kaydedilmiş koda sahipsiniz. Şöyle başlar:

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

Yalnızca A1: E24'ü sıralamak yerine, kodu A1'de başlayacak ve geçerli bölgeye genişletilecek şekilde değiştirin. (Geçerli bölge, bir hücreden Ctrl + * tuşlarına basarsanız elde edeceğiniz alandır).

.SetRange Range("A1").CurrentRegion

Videoda gösterilen son kod:

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

Not

Çalışma kitabınız bir XLSX uzantısıyla kaydedilmiş olabilir. XLSM veya XLSB uzantısına geçmek için Farklı Kaydet'i yapın. XLSX'e kaydedilen tüm makrolar silinir.

Excel Günün Düşüncesi

Excel Master arkadaşlarıma Excel hakkında tavsiyelerini sordum. Bugünün düşüncesi:

"Günde bir Apple, VBA'yı uzak tutar."

Tom Urtis

Ilginç makaleler...