VBA Kullanarak Excel'de Veriler Nasıl Sıralanır (Adım Adım Kılavuz)

Excel'in verileri hızlı bir şekilde sıralamak için zaten birkaç yolu vardır.

Şeritteki veya sıralama iletişim kutusundaki sıralama simgelerini kullanarak bir veri kümesini kolayca sıralayabilirsiniz.

O zaman neden bunu VBA kullanarak nasıl yapacağınızı bilmeniz gerekiyor?

VBA kullanarak verilerin nasıl sıralanacağını bilmek, kodunuzun bir parçası olarak dahil edildiğinde yardımcı olabilir. Örneğin, belirli bir düzende biçimlendirmeniz ve sıralamanız gereken günlük/haftalık bir veri seti aldığınızı varsayalım.

Tüm bunları sizin için tek bir tıklama ile yapacak bir makro oluşturabilirsiniz. Bu, her yaptığınızda size çok zaman ve emek kazandıracaktır.

Ayrıca, Excel panoları oluşturursanız, kullanıcının yalnızca başlığa çift tıklayarak (aşağıda gösterildiği gibi) verileri sıralamasına izin vererek Excel sıralama yeteneğini yeni bir düzeye taşıyabilirsiniz.

Bunun nasıl oluşturulacağını bu eğitimde daha sonra ele alacağım. Önce hızlı bir şekilde temelleri düzeltelim.

Excel VBA'da Range.Sort Yöntemini Anlama

VBA kullanarak sıralama yaparken, kodunuzdaki Range.Sort yöntemini kullanmanız gerekir.

"Aralık", sıralamaya çalıştığınız veriler olacaktır. Örneğin, verileri A1:A10 biçiminde sıralıyorsanız, "Aralık" Aralık ("A1:A10") olacaktır.

Ayrıca adlandırılmış bir aralık oluşturabilir ve hücre referansları yerine bunu kullanabilirsiniz. Örneğin, A1:A10 hücreleri için adlandırılmış bir 'DataRange' aralığı oluşturursam, Range(“DataRange”) öğesini de kullanabilirim.

Sıralama yöntemiyle, parametreler aracılığıyla bazı ek bilgiler sağlamanız gerekir. Bilmeniz gereken temel parametreler aşağıdadır:

  • Anahtar - burada sıralamak istediğiniz sütunu belirtmeniz gerekir. Örneğin, A sütununu sıralamak istiyorsanız, key:=Range(“A1”) kullanmanız gerekir.
  • Emir - burada sıralamayı artan düzende mi yoksa azalan düzende mi istediğinizi belirtirsiniz. Örneğin, sıralamayı artan düzende istiyorsanız, Order:=xlArtan öğesini kullanacaksınız.
  • başlık - burada veri kümenizin başlıklarının olup olmadığını belirtirsiniz. Başlıkları varsa, sıralama veri kümesinin ikinci satırından, yoksa ilk satırdan başlar. Verilerinizin başlıkları olduğunu belirtmek için Header:=xlYes kullanacaksınız.

Çoğu durumda bu üçü yeterli olsa da, bu makaledeki parametreler hakkında daha fazla bilgi edinebilirsiniz.

Şimdi Excel'de verileri sıralamak için VBA'da Range.Sort yöntemini nasıl kullanacağımızı görelim.

Tek Bir Sütunu Başlıksız Sıralama

Başlıksız tek bir sütununuz olduğunu varsayalım (aşağıda gösterildiği gibi).

Artan düzende sıralamak için aşağıdaki kodu kullanabilirsiniz.

Sub SortDataWithoutHeader() Range("A1:A12").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo End Sub

Veri aralığını manuel olarak Range(“A1:A12”) olarak belirlediğimi unutmayın.

Verilerde değişiklik olması ve değerlerin eklenmesi/silinmesi durumunda, veri setindeki dolu hücrelere göre otomatik olarak ayarlanan aşağıdaki kodu kullanabilirsiniz.

Sub SortDataWithoutHeader() Range("A1", Range("A1").End(xlDown)).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo End Sub

Range(“A1:A12”) yerine, Range(“A1”, Range(“A1”).End(xlDown)) kullandığımı unutmayın.

Bu, sütundaki son ardışık doldurulmuş hücreyi kontrol edecek ve onu sıralamaya dahil edecektir. Boşluk olması durumunda, yalnızca ilk boş hücreye kadar olan verileri dikkate alacaktır.

Ayrıca, adlandırılmış bir aralık oluşturabilir ve hücre referansları yerine bu adlandırılmış aralığı kullanabilirsiniz. Örneğin, adlandırılmış aralık DataSet ise, kodunuz şimdi aşağıda gösterildiği gibi olacaktır.

Sub SortDataWithoutHeader() Range("DataRange").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo End Sub

Şimdi yukarıdaki örneklerde kullanılan parametreleri hızlıca açıklayayım:

  • Key1:=Range(“A1”) - Kodun hangi sütunu sıralayacağını bilmesi için A1 belirtilir.
  • Order1:=xlAscending - Sırayı xlArtan olarak belirledi. Azalan sırada olmasını istiyorsanız, xlDescending'i kullanın.
  • Header:= xlNo - Başlık olmadığı belirtilir. Bu aynı zamanda varsayılan değerdir. Bu nedenle, bunu atlasanız bile, hiçbir başlığı olmadığı düşünülerek verileriniz sıralanacaktır.

Bu VBA kodunu nereye koyacağınızı ve makroyu nasıl çalıştıracağınızı mı merak ediyorsunuz? Bu öğreticiyi okuyun!

Başlıklı Tek Bir Sütunu Sıralama

Önceki örnekte, veri kümesinin bir başlığı yoktu.

Verilerinizin üst bilgileri olduğunda, sıralamanın veri kümesinin ikinci satırından başlayabilmesi için bunu kodda belirtmeniz gerekir.

Aşağıda gösterildiği gibi bir veri kümeniz olduğunu varsayalım:

Aşağıda, mağazaların satışlarına göre verileri azalan düzende sıralayacak kod bulunmaktadır.

Sub SortDataWithHeader() Range("DataRange").Sort Key1:=Range("C1"), Order1:=xlAzalan End Sub

Adlandırılmış bir aralık - 'DataRange' oluşturduğumu ve kodda bu adlandırılmış aralığı kullandığımı unutmayın.

Birden Çok Sütunu Başlıklarla Sıralama

Şimdiye kadar bu öğreticide, tek bir sütunun nasıl sıralanacağını (başlıklı ve başlıksız) gördük.

Şimdi, birden çok sütuna göre sıralamak isterseniz ne olur?

Örneğin, aşağıdaki veri kümesinde, önce durum koduna, ardından mağazaya göre sıralama yapmak istersem ne olur?

İşte tek seferde birden çok sütunu sıralayacak kod.

Sub SortMultipleColumns() ActiveSheet.Sort ile .SortFields.Add Key:=Range("A1"), Order:=xlAscending .SortFields.Add Key:=Range("B1"), Order:=xlAscending .SetRange Range("A1 :C13") .Header = xlEvet .Apply End with End Sub

Alacağınız sonuç aşağıdadır.

Yukarıdaki örnekte, veriler önce durum koduna göre sıralanır (sütun A). Daha sonra durum kodu verileri içinde tekrar Store (Sütun B) tarafından sıralanır. Bu sıra, bahsettiğiniz kod tarafından belirlenir.

Başlığa Çift Tıklayarak Verileri Sıralama

Bir pano oluşturuyorsanız veya raporlarınızda daha fazla kullanım kolaylığı istiyorsanız, başlıklara çift tıkladığınızda verileri sıralayacak bir VBA kodu yazabilirsiniz.

Aşağıda gösterildiği gibi bir şey:

Bunu yapmanıza izin verecek kod aşağıdadır:

Private Sub Worksheet_BeforeDoubleClick(Aralık Olarak ByVal Hedef, Boole Olarak İptal) Aralık Olarak Anahtar Aralığını Dim Dim ColumnCount Tamsayı olarak ColumnCount = Range("DataRange").Columns.Count Cancel = False If Target.Row = 1 Ve Target.Column <= ColumnCount O zaman Cancel = True Set KeyRange = Range(Target.Address) Range("DataRange").Sort Key1:=KeyRange, Header:=xlEvet End If End Sub

Adlandırılmış bir aralık ("DataRange") oluşturduğumu ve hücre referanslarını kullanmak yerine kodda kullandığımı unutmayın.

Başlıklardan herhangi birine çift tıkladığınızda, kod normal çift tıklama işlevini (düzenleme moduna girmek için) devre dışı bırakır ve verileri sıralarken bu hücreyi anahtar olarak kullanır.

Ayrıca şu andan itibaren bu kodun tüm sütunları yalnızca artan düzende sıralayacağını unutmayın.

Çift tıklamanın bir tetikleyici olduğunu unutmayın, Excel'in belirtilen kodu çalıştırmasını sağlar. Çift tıklama, çalışma kitabı açma, yeni çalışma sayfası ekleme, hücre değiştirme gibi bu tetikleyicilere olay denir ve Excel'de makro çalıştırmak için kullanılabilir. Excel VBA olayları hakkında daha fazla bilgiyi buradan okuyabilirsiniz.

Bu kodu nereye koyacağız?

Bu kodu, bu çift tıklamalı sıralama işlevini istediğiniz sayfanın kod penceresine yapıştırmanız gerekir.

Bunu yapmak için:

  • Sayfa sekmesine sağ tıklayın.
  • Kodu Görüntüle'ye tıklayın.
  • Kodu, verilerinizin bulunduğu sayfanın kod penceresine yapıştırın.

Şimdi, ilk iki sütunu ('Devlet' ve 'Mağaza') artan düzende, ancak 'Satış' sütununu azalan düzende sıralamak isterseniz ne olur?

İşte bunu yapacak kod:

Private Sub Worksheet_BeforeDoubleClick(Aralık Olarak ByVal Hedef, Boole Olarak İptal) Aralık Olarak Anahtar Aralığını Dim Dim ColumnCount Tamsayı olarak ColumnCount = Range("DataRange").Columns.Count Cancel = False If Target.Row = 1 Ve Target.Column <= ColumnCount O zaman Cancel = True Set KeyRange = Range(Target.Address) If Target.Value = "Sales" ise Sıralama = xlDazalan Aksi Sıralama = xlArtan End If Range("DataRange").Sort Key1:=KeyRange, Header:=xlYes, Order1: =Sırala, End If End Sub

Yukarıdaki kodda çift tıklanan hücrenin Satış başlığı olup olmadığını kontrol eder. Cevabınız evet ise, SortOrder değişkenine xlDescending değerini atar, aksi takdirde onu xlArtan yapar.

Şimdi bunu bir adım daha ileri götürelim ve sıralandığında başlıkta görsel bir İşaretçi (ok ve renkli hücre) gösterelim.

Aşağıda gösterildiği gibi bir şey:

Bunu elde etmek için yeni bir çalışma sayfası ekledim ve üzerinde aşağıdaki değişiklikleri yaptım (örnek dosyayı indirebilir ve devam edebilirsiniz):

  • Yeni sayfanın adı 'BackEnd' olarak değiştirildi.
  • B2 hücresine bir ok sembolü girin (bunu yapmak için Ekle'ye gidin ve 'Sembol' seçeneğine tıklayın).
  • Veri kümesindeki başlıkları kopyalayıp "Arka Uç" sayfasındaki A3:C3 hücresine yapıştırın.
  • A4:AC4 hücresinde aşağıdaki işlevi kullanın:
    =EĞER(A3=$C$1,A3&" "&$B$1,A3)
  • Sütunu sıralamak için başlıklara çift tıkladığınızda, hücrelerin geri kalanı otomatik olarak VBA kodu tarafından doldurulacaktır.

Arka uç sayfanız aşağıda gösterildiği gibi görünecektir:

Artık başlıklara çift tıklayarak verileri sıralamak için aşağıdaki kodu kullanabilirsiniz. Bir başlığa çift tıkladığınızda, başlık metnindeki oku otomatik olarak alacaktır. Hücreyi de vurgulamak için koşullu biçimlendirme kullandığımı unutmayın.

Private Sub Worksheet_BeforeDoubleClick(Aralık Olarak ByVal Hedef, Boole Olarak İptal) Aralık Olarak KeyRange Dim Dim ColumnCount Tamsayı olarak ColumnCount = Range("DataRange").Columns.Count Cancel = False If Target.Row = 1 Ve Target.Column <= ColumnCount O zaman Cancel = True Worksheets("Backend").Range("C1") = Target.Value Set KeyRange = Range(Target.Address) Range("DataRange").Sort Key1:=KeyRange, Header:=xlYes Worksheets("BackEnd ").Range("A1") = Target.Column For i = 1 To ColumnCount Range("DataRange").Cells(1, i).Value = Worksheets("Arka Uç").Range("A4").Offset (0, i - 1).Value Next i End If End Sub

Bu kodun, verilerimin ve çalışma kitabımın oluşturulma şekli için iyi çalıştığını unutmayın. Verilerin yapısını değiştirirseniz, kodu buna göre değiştirmeniz gerekecektir.

Örnek Dosyayı İndirin

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave