VBA Sıralaması - Excel İpuçları

İçindekiler

Verileri sıralamak için Excel VBA Makrosu. Makro kaydedicinin sıralama için ekstra kod oluşturması hoşuma gitmiyor. Excel VBA'da sıralama basit olmalıdır. Sıralanacak sütunla birlikte bir kod satırı, hangi yönde (artan veya azalan) ve bir başlık var.

Video izle

  • Excel makro kaydedici, kayıt sıralamasıyla iyi bir iş çıkarmaz.
  • Verilerinizin Ctrl + * (Mevcut Bölge olarak bilinir) kullanılarak seçilebilmesi şartıyla
  • Renge veya simgeye veya üçten fazla düzeye göre sıralama yapmamanız koşuluyla
  • Excel'de eski okul Range (). CurrentRegion.Sort yöntemini kullanın

Video Metni

MrExcel Podcast, Bölüm 2093'ten Excel Öğrenin: VBA ile Sıralama

İnternet yayınına tekrar hoş geldiniz, ben Bill Jelen Huntsville'deki James'ten bugünün sorusu. James, verileri sıralama eylemini kaydetmek için makro kaydediciyi kullandım. Diyelim ki James'in bu verileri Sektöre ve Müşterilere göre sıralaması gerekiyordu. Buradan Görünüm sekmesine geliyorsunuz, Makrolar, Yeni Makro Kaydet, SortMyReports, Kısayol Tuşu Ctrl - Buraya Shift + S yazacağım ve Tamam'a tıklayacağım. Pekala, öyleyse buradan şunu yapıyoruz: Veriler, Sırala ve Sektöre Göre Sıralamak ve ardından Seviye Eklemek ve Müşteriye Göre Sıralamak ve Tamam'ı tıklamak istediğimizi söylemek istiyoruz. Sol alt köşede Kaydı Durdur'u tıklıyoruz. Pekala, işte orada. Çalışmış gibi görünüyor, değil mi?

Ama sorun şu: Yarın daha fazla veriye veya daha az veriye sahip olacaksınız ya da bilirsiniz, her neyse. Ve Kaydedilen Makro çok korkunç. Bir göz atalım, Alt + F8 yapacağım ve SortMyReport'a bir göz atalım, bunu düzenleyeceğim. Pekala, bu onların kaydettikleri her şey, bu yüzden SortFields.Clear ve sonra SortFields ile yeni bir sıralama oluşturdular ve kodlanmışlar ve 568 satır var ve hepsi.

Şimdi gün içinde geriye dönersek, gerçekten çok kolaydım. Pekala, ve sonra Excel 2007'de Simgeye Göre Sırala, Renge Göre Sırala, Yazı Tipi Rengine Göre Sırala, 15 Düzey Sıralamaya sahip olma yeteneği eklediler ve her şey gerçekten çok çıldırdı. Bu yüzden artık Kaydedilmiş Makro kullanmıyorum. Ben sadece eski kafalıyım.

Şimdi, Excel'e geri döneceğim. İşte bu eski usul sıralamanın işe yaraması için kurallar, pekala. Her Sütunun üzerinde başlık: bu başlık iki satırda değil, tek satırda olmalıdır. Orada başlıklarınız varsa ve başlıkların orada olması sorun değil. Başlıklarınız ile ilk başlık arasında tamamen boş bir satıra ihtiyacınız var. Sağ tarafta notlarınız varsa: Karınız bir alışveriş listesiyle arar, “Hey, tatlım, eve giderken dur. Süt, yumurta ve votka alın. " Verileriniz ile bunun arasında tamamen boş bir sütun olmalıdır. Alt kısımda standart notlar varsa, son veri biti ile bu notlar arasında tamamen boş bir satır olduğundan emin olun.

Tüm amacım herhangi bir hücreye gelebilmemizdir: sol üst köşedeki hücre bu veriyi ve Ctrl + * tuşlarına basın ve sıralanacak verileri seçecektir. Şimdi Ctrl + tuşlarına basacağım. bu bizi bu köşeye ve ardından Ctrl +. bizi sağ alt köşeye, Ctrl +. bizi sol alt köşeye götürüyor. Pekala, Ctrl + * verilerinizi doğru bir şekilde seçerse, o zaman her şey harika. Bakkal listenizi H Sütununa koyarsanız ve buraya geldiğimizi ve Ctrl + * 'yı görürsek, şimdi, bakkal listesini işin bir parçası olarak sıralıyoruz ve alışveriş listeniz alt üst olur. Ya da geri alacağız: eğer bu satır burada değilse, şimdi Ctrl + * yapıyoruz, bakın- şimdi onlar ipucu olmayacak çünkü artık başlıkları yok, tamam mı?

Dolayısıyla, kodumu kullanacaksanız, tüm bu kuralların doğru olduğundan emin olun: rengimi, simgemi sıralama, 3 veya daha az sıralama düzeyi. Tamam, geri al. İşte bildiğimiz şey şu: verilerimizin her gün A5'te başlayacağını biliyoruz. Kaç satır veya kaç satır olduğunu bilmiyorsak - hatta kaç tane sütunumuz olabileceğini bile. Sütunların değiştirildiği bir durum hayal edemiyorum ama kesinlikle satır sayısı değişecek. Yani Alt + F11, sadece sol üst köşe hücresinden başlayacağız. Yani Range, benim durumumda “A5” .CurrentRegion. Mevcut bölge, Ctrl + Shift + * tuşlarına basacağımızı ve içerdiği her şeyin sıralanacağını söyleyen bu harika bina özelliğidir. Ve biz .Sort yaparız. .Sort, tamam.

Şimdi, olay şu. Tek seviyeli bir sıralama yapmak istiyorsanız kolaydır: Key1: =. : = ve sadece Range olacağını söylüyoruz - Oh ne olduğunu unuttum. Sektör'dü, Sektör nerede? Sektör C Sütunundadır. Yani benim durumumda C5, Aralık ("C5") ve sonra, Sıra1: = xlAscending. Orada Aşağı Ok tuşuna ve ardından Tab tuşuna bastım. Pekala şimdi, sağa doğru devam edebilirim ama bunu yapmayacağım. Yeni bir satıra gideceğim, bu yüzden boşluk, yeni bir satıra gitmek için alt çizgi, bu kod satırına devam, tamam mı? Ve eğer ikinci düzey bir sıralamam varsa: Anahtar2: = ve bu durumda D Sütunundaki müşteriye göre sıralamak istiyorum, yani D5. Ve sonra, Order2: xlAscending. Güzel.

Üçüncü seviye sıralamam yok ama eğer varsa, bu Key3 ve ardından Order3 olurdu. Ve sonra bu sonraki, yapmanız gereken şey Header, tamam mı? Yani, Header: = xlGuess burada çok fazla sorun yaşıyorsunuz. Ve böylece orada xlYes diyeceğiz, kesinlikle Başlık olarak. Makro Kaydedici, eski günlerde bile xlGuess kullanıyordu. Excel'in tahmin etmesinden nefret ediyorum.

Bu kadar. Tek bir kod satırı, yapmanız gereken tek şey bu ve daha fazla satırla, daha az satırla çalışacak. Bu güzel, güzel bir şey. Pekala, buraya Excel'e geri döneceğiz. Ctrl + Shift + S hala atanan şeydir. Şimdi - VBA'ya yeni geçtiyseniz ve bunu kendiniz yazarsanız, Alt + F8'e gidebilir, Makronuzun adını bulabilir, Seçenekler'e tıklayabilir ve oraya Ctrl + Shift + S yazabilir veya hatta bunu bir Hızlı Erişim Araç Çubuğu'nda kısayol tuşu burada. Sağ tıklayın, Makrolarımızdan seçtiğim Hızlı Erişim Araç Çubuğunu Özelleştir. SortMyReport adında bir Makro'm var, Ekle'ye tıklayacak - oradaki küçük akış çizelgesinden nefret ediyorum. Bunu değiştireceğiz ve orada bir tür A'dan Z'ye durum olmasını çok isterim ama elbette yok. Belki o bilen, kim bilen ok, sadece bir şey seçin.Sihirli 8-top, bilmiyorum. Bu küçük adamı burada seçeceğim, Tamam'a tıklayın, Tamam'a tıklayın. Pekala, şimdi verilerimiz Tarihe Göre Sıralı, ben seçiyorum - ve ne seçtiğim önemli değil. Her zaman geri dönecek ve A5'den sıralayacak, küçük adama tıklıyorum ve verilerim artık Sektöre, sektöre, müşteriye göre sıralı. Harika çalışıyor, tamam mı?

Makro Kaydedici hayranıysanız, size en iyi dileklerimle. Ancak, VBA'da sıralı sıralama için bugünlerde Makro Kaydedici kodu çok daha basit; sadece geri dönmek için, esasen bunu, tek satırlık kodu kullanın.

Eh, genellikle bu kitabı almaya çalıştığım yer burasıdır, ancak bugün şu kitaba bir göz atmanız gerektiğini düşünüyorum: Tracy ve ben tarafından yazılan Excel 2016 VBA ve Makrolar. Vaov! Şuna bak. Başka bir dilde bir versiyon olduğunu fark etmemiştim. İlk Makronuzu ihtiyaç duyduğunuz koda kaydetmekten sizi Makro Öğrenme Eğrisini tamamen yukarı çıkaracağız.

Pekala, bugün için basit bir özet: Excel Makro Kaydedici kayıt, sıralama konusunda iyi bir iş çıkarmıyor: verilerinizin geçerli bölge olarak bilinen Ctrl + * kullanılarak seçilebilmesi koşuluyla, renk veya simge gibi sıralama yapmıyorsanız veya üçten fazla düzey, sıralamak için VBA'da eski okul Range (). CurrentRegion.Sort yöntemini kullanın.

James'e bu soruyu gönderdiği için teşekkür etmek istiyorum. Uğradığınız için teşekkür etmek istiyorum. Bir dahaki sefere başka bir internet yayını için görüşürüz.

Dosyayı indir

Örnek dosyayı buradan indirin: Podcast2093.xlsm

Ilginç makaleler...