Excel VBA ile Otomatik Sıralama

Cumartesi Aralık 14, 2024

Excel’de verilerimizi sıralamak için farklı yöntemler kullanabiliriz. Bu yazımızda Excel’de mevcut olan VBA altyapısını kullanarak sayfamıza eklenen her yeni veride otomatik olarak sıralama yapmaya değineceğiz.

Öncelikle VBA kodlarını çalıştıracağımız için excel dosyamızın formatını .xlsm olarak değiştirmemiz gerekiyor. Bunun için Excel içerisinde üst menüde bulunan Dosya -> Farklı Kaydet seçeneklerini takip ederek .xlsm seçeneğini seçip dosyamızın formatını değiştiriyoruz.

Elimizde aşağıdaki gibi İsim, Yaş, Departman ve Maaş Bilgisi İçeren bir veri seti olduğunu varsayalım. Amacımız maaş bilgisine göre elimizdeki verilerin otomatik olarak sıralanması.

Bu sıralamayı yapmak için Excelin VBA altyapısından faydalanacağız. İlk olarak Alt+F11 tuşlarına basarak VBA editörünü açıyoruz.

Açılan bu pencerede Sayfa1 seçeneğine çift tıklıyoruz. Karşımıza aşağıdaki kod editörü gelecektir.

Açılan kod editörüne aşağıdaki kodları yapıştırıyoruz.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim veriAraligi As Range

    Dim sonSatir As Long

    ' Sayfadaki son satırı bul

    sonSatir = Me.Cells(Me.Rows.Count, "A").End(xlUp).Row

    ' Veri aralığını A2:D olarak belirleyin

    Set veriAraligi = Me.Range("A2:D" & sonSatir)

    ' Veriyi Maaş(D) sütununa göre sıralayın

    ' xlAscending Küçükten Büyüğe

    ' xlDescending Büyükten Küçüğe

    veriAraligi.Sort Key1:=Me.Range("D2"), Order1:=xlAscending, Header:=xlNo

End Sub

Kodları yapıştırdıktan sonra CTRL+S tuşlarına tıklayarak kodumuzu kaydedip VBA kod editörünü kapatıyoruz. Yazdığımız kodun tetiklenmesi için sayfamızda herhangi bir hücreye veri girişi yapmamız yada yeni veri eklememiz yeterli.

Örnek olarak C19 hücresine çalıştır metnini yazdık sonrasında istediğimiz gibi verilerimiz Maaş sütununa göre sıralandı. Şimdi C19 hücresini boşaltıp verilerimize yeni bir satır ekleyelim.

Gördüğünüz gibi yazdığımız VBA kodu yeni eklediğimiz veriyi otomatik olarak sıraladı.

Tablo ile Sıralama

Eğer verilerimiz tablo formatında olsaydı bu sıralama işlemini nasıl yapardık? Mevcut Excel dosyamıza yeni sekme ekleyerek  bunu yapmaya çalışalım. Yine aynı verileri oluşturduğumuz bu sayfaya ekleyelim. Herhangi bir veri seçili iken CTRL+L tuş kombinasyonu ile elimizdeki verileri tabloya çevirelim.

Verilerimiz artık aşağıdaki gibi tablo formatı içerisinde gözükecektir.

Buradaki tablo adı yazacağımız kod için önemli. Yine ALT+F11 tuşlarına tıklayarak VBA sayfasını açıyoruz.

Sayfa2 seçeneğine çift tıklayıp kod editörünü açıp aşağıdaki kodları editöre yapıştırıyoruz.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim tbl As ListObject

    Dim veriAraligi As Range

    Dim sonSatir As Long

    ' Tabloyu seçin (Tablo adını kendi tablonuzun adıyla değiştirin)

    Set tbl = Me.ListObjects("Tablo3")

    ' Tabloyu sıralamak için veri aralığını belirleyin

    Set veriAraligi = tbl.DataBodyRange

    ' Eğer yapılan değişiklik, tablodaki veri aralığında ise sıralama işlemi yap

    If Not Intersect(Target, veriAraligi) Is Nothing Then

        ' Veriyi Maaş (D sütunu) üzerine sıralayın

        tbl.Sort.SortFields.Clear ' Önceki sıralamaları temizle

        tbl.Sort.SortFields.Add Key:=tbl.ListColumns("Maaş (TL)").Range, Order:=xlAscending

        tbl.Sort.Apply

    End If

End Sub

Kodları yapıştırdıktan sonra CTRL+S tuşlarına tıklayarak kaydediyoruz ve VBA ekranını kapatıyoruz.

Gördüğünüz gibi tablomuza yeni veri eklediğimizde sıralama otomatik olarak yapılıyor.

Umarım faydalı bir yazı olmuştur. Bir sonraki yazımızda görüşmek üzere…