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…