A sütundaki tekrarlı veri içeren satırları döngü aracılığıyla inceler, benzersiz verileri B sütununa yazdırır.
Konu ile ilgili örnek bir veri setine aşağıdaki bağlantıdan ulaşabilirsiniz.
Option Explicit
Sub BenzersizVerileriAyriBirSutundaListele()
Dim i As Long
Dim sayac As Long
sayac = 1
Columns("B").Clear
For i = 1 To [A1048576].End(xlUp).Row
If WorksheetFunction.CountIf(Range("A1:A" & i), Range("A" & i)) = 1 Then
Range("B" & sayac) = Range("A" & i)
sayac = sayac + 1
End If
Next
End Sub
Option Explicit
Sub BenzersizVerileriAyriBirSutundaListele()
Dim i As Long
Dim sayac As Long
'--------------------------------------------------
'B sütunundaki ilk boş satırın
'tespitinde kullanılacak değişken.
'--------------------------------------------------
sayac = 1
'--------------------------------------------------
'Benzersiz verileri listelemeden
'önce B sütununu temizle.
'--------------------------------------------------
Columns("B").Clear
'--------------------------------------------------
'A sütunundaki veriler için işlem yap.
'--------------------------------------------------
For i = 1 To [A1048576].End(xlUp).Row
'--------------------------------------------------
'Her yeni satıra geçtikçe o satıraki
'veri için kontrol yapmak istiyoruz.
'
'Bunu ilerlediğimiz alana kadar sürekli
'kontrol ederek yapacağız. Nasıl?
'
'Şimdi arama şu şekilde olacak:
'A1 hücresi verisini A1:A1 alanında,
'A2 hücresi verisini A1:A2 alanında,
'...
'A345 hücresi verisini A1:A345 alanında arayacağız.
'Bu böyle sonuncu hücreye kadar devam edecek.
'
'Peki bu şekilde aramanın faydası ne?
'Öncelikle hiçbir hücreyi es geçmeden
'kontrol etmiş oluyoruz. CountIf fonksiyonunu
'ilerlediği hücreye kadar çalıştırıyoruz,
'böylece daha az alanı kontrol ettiğinden
'iş biraz daha hızlı oluyor.
'Zaten gelinen hücrede birden fazla veri
'tespit edilmişse daha fazla hücreye de
'bakmaya gerek yok, değil mi?
'
'Bu şekilde aramanın ana faydası da şu:
'Şimdi bir sütunda bütün verilerin birden
'fazla kez tekrar ettiğini varsayalım.
'Her seferinde bütün sütunu kontrol edersek
'hep birden fazla veri çıkacak ve işimize
'yaramayacak. Biz bu şekilde geldiğimiz
'satıra kadar alanı kontrol ettirerek
'bir nevi CountIf fonksiyonunu kandırmış
'oluyoruz.
'--------------------------------------------------
If WorksheetFunction.CountIf(Range("A1:A" & i), Range("A" & i)) = 1 Then
'--------------------------------------------------
'sayac değişkeni ile B sütunundaki ilk boş satıra
'ilgili değeri yazdırıyoruz. Eğer döngüde kullanılan
'i değişkenini kullansaydık aralarda boşluklar
'olacaktı. Bunun olmasını istemediğimiz için
'B sütununda ayrı bir değişkenle (sayac) takip yaptık.
'--------------------------------------------------
Range("B" & sayac) = Range("A" & i)
sayac = sayac + 1
End If
Next
End Sub