Bu öğretici, VBA'daki RemoveDuplicates yöntemini kullanarak kopyaların nasıl kaldırılacağını gösterecektir.
RemoveDuplicates Yöntemi
Veriler içe aktarıldığında veya bir Excel çalışma sayfasına yapıştırıldığında, genellikle yinelenen değerler içerebilir. Gelen verileri temizlemeniz ve kopyaları kaldırmanız gerekebilir.
Neyse ki, VBA'nın Range nesnesinde bunu yapmanıza izin veren kolay bir yöntem var.
1 | Aralık(“A1:C8”).KaldırYinelenen Sütunlar:=1, Başlık:=xlEvet |
Sözdizimi:
RemoveDuplicates([Sütunlar],[Başlık]
- [Sütunlar] - Yinelenen değerler için hangi sütunların kontrol edildiğini belirtin. Tüm sütunlar, bir kopya olarak kabul edilmek için çok fazla eşleşiyor.
- [Başlık] - Verilerin bir başlığı var mı? xlHayır (varsayılan), xlEvet, xlEvetHayırTahmin
Teknik olarak, her iki parametre de isteğe bağlıdır. Ancak, Sütunlar bağımsız değişkenini belirtmezseniz, hiçbir kopya kaldırılmaz.
Başlık için varsayılan değer xlNo'dur. Elbette bu argümanı belirtmek daha iyidir, ancak bir başlık satırınız varsa, başlık satırının kopya olarak eşleşmesi olası değildir.
RemoveDuplicates Kullanım Notları
- RemoveDuplicates yöntemini kullanmadan önce, kullanılacak bir aralık belirtmelisiniz.
- RemoveDuplicates yöntemi, kopyaları bulunan tüm satırları kaldıracak, ancak orijinal satırı tüm değerlerle koruyacaktır.
- RemoveDuplicates yöntemi satırlarda değil, yalnızca sütunlarda çalışır, ancak bu durumu düzeltmek için VBA kodu yazılabilir (ileriye bakın).
VBA Örnekleri için Örnek Veriler
Örnek kodun nasıl çalıştığını göstermek için aşağıdaki örnek veriler kullanılmıştır:
Yinelenen Satırları Kaldır
Bu kod, yalnızca A sütunundaki değerlere dayalı olarak tüm yinelenen satırları kaldıracaktır:
123 | Alt RemoveDupsEx1()Aralık(“A1:C8”).KaldırYinelenen Sütunlar:=1, Başlık:=xlEvetAlt Bitiş |
“A1:C8” Aralığını açıkça tanımladığımıza dikkat edin. Bunun yerine, UseRange'ı kullanabilirsiniz. UseRange, verilerinizin en son kullanılan satırını ve sütununu belirleyecek ve tüm bu aralığa RemoveDuplicates uygulayacaktır:
123 | Alt RemoveDups_UsedRange()ActiveSheet.UsedRange.RemoveDuplicates Sütunlar:=1, Başlık:=xlEvetAlt Bitiş |
UseRange, aralığı açıkça tanımlamanız gereğini ortadan kaldırarak inanılmaz derecede kullanışlıdır.
Bu kodu çalıştırdıktan sonra çalışma sayfanız şu şekilde görünecektir:
Yalnızca A sütunu (sütun 1) belirtildiğinden, daha önce 5. satırdaki 'Elmalar' kopyasının kaldırıldığına dikkat edin. Ancak, Miktar (sütun 2) farklıdır.
Birden çok sütunu karşılaştırarak kopyaları kaldırmak için bir Array yöntemi kullanarak bu sütunları belirtebiliriz.
Birden Çok Sütunu Karşılaştıran Yinelenenleri Kaldır
123 | Alt RemoveDups_MultColumns()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2) , Header:=xlEvetAlt Bitiş |
Dizi, VBA'ya hem 1 hem de 2 (A ve B) sütunlarını kullanarak verileri karşılaştırmasını söyler.
Dizideki sütunların ardışık sırada olması gerekmez.
123 | Alt SimpleExample()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(3, 1) , Header:=xlYesAlt Bitiş |
Bu örnekte, yinelenen karşılaştırma için 1. ve 3. sütunlar kullanılmıştır.
Bu kod örneği, kopyaları kontrol etmek için üç sütunun hepsini kullanır:
123 | Alt SimpleExample()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3) , Header:=xlYesAlt Bitiş |
Tablodan Yinelenen Satırları Kaldırma
RemoveDuplicates, aynı şekilde bir Excel tablosuna da uygulanabilir. Ancak, sözdizimi biraz farklıdır.
1234 | Alt SimpleExample()ActiveSheet.ListObjects("Table1").DataBodyRange.RemoveDuplicates Sütunlar:=Array(1, 3), _Başlık:=xlEvetAlt Bitiş |
Bu, 1 ve 3 (A ve C) sütunlarına göre tablodaki kopyaları kaldıracaktır. Ancak, tablonun renk biçimlendirmesini toparlamaz ve tablonun alt kısmında geride kalan renkli boş satırlar görürsünüz.
Dizilerden Yinelenenleri Kaldır
Bir diziden yinelenen değerleri kaldırmanız gerekiyorsa, elbette dizinizin çıktısını Excel'e çıkarabilir, RemoveDuplicates yöntemini kullanabilir ve diziyi yeniden içe aktarabilirsiniz.
Bununla birlikte, bir diziden kopyaları kaldırmak için bir VBA prosedürü de yazdık.
VBA Kullanarak Veri Satırlarından Yinelenenleri Kaldırma
RemoveDuplicates yöntemi yalnızca veri sütunları üzerinde çalışır, ancak bazı 'kullanıma hazır' düşüncesiyle, veri satırlarıyla başa çıkmak için bir VBA prosedürü oluşturabilirsiniz.
Verilerinizin çalışma sayfanızda şöyle göründüğünü varsayalım:
B ve E sütunlarında öncekiyle aynı kopyalara sahipsiniz, ancak bunları RemoveDuplicates yöntemini kullanarak kaldıramazsınız.
Cevap, ek bir çalışma sayfası oluşturmak için VBA'yı kullanmak, verileri sütunlara aktararak içine kopyalamak, kopyaları kaldırmak ve ardından tekrar satırlara aktararak kopyalamaktır.
12345678910111213141516171819202122232425262728293031323334353637 | Alt DuplicatesInRows()'Ekran güncellemesini ve uyarıları kapat - kodun kullanıcı görmeden sorunsuz çalışmasını istiyoruz.'ne oluyorApplication.ScreenUpdating = YanlışApplication.DisplayAlerts = Yanlış'Yeni bir çalışma sayfası ekleSheets.Add After:=ActiveSheet'Yeni çalışma sayfasını 'CopySheet' olarak adlandırınActiveSheet.Name = "Kopyalama Sayfası"'Orijinal çalışma sayfasındaki verileri kopyalayınSheets("DataInRows").UsedRange.Copy'Oluşturulan yeni sayfayı etkinleştirSayfalar("CopySheet").Etkinleştir'Verileri şimdi sütunlarda olacak şekilde yapıştırınActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _Yanlış, Devir:=Doğru'1 ve 3. sütunların kopyalarını kaldırınActiveSheet.UsedRange.RemoveDuplicates Sütunlar:=Array(1, 3), Başlık _:=xlEvet'Orijinal çalışma sayfasındaki verileri temizleSheets("DataInRows").UsedRange.ClearContents'Oluşturulan yeni çalışma sayfasından veri sütunlarını kopyalayınSheets("Copysheet").UsedRange.Copy'Orijinal sayfayı etkinleştirSheets("DataInRows").Etkinleştir'Yapıştır kopya olmayan verileri transpoze etActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _Yanlış, Devir:=Doğru'Kopya sayfasını silin - artık gerekli değilSayfalar("Kopyalar").Sil'Orijinal sayfayı etkinleştirSheets("DataInRows").Etkinleştir'Ekran güncellemesini ve uyarıları tekrar açınApplication.ScreenUpdating = DoğruApplication.DisplayAlerts = DoğruAlt Bitiş |
Bu kod, satırlardaki orijinal verilerin 'DataInRows' adlı bir çalışma sayfasında tutulduğunu varsayar.
Kodu çalıştırdıktan sonra çalışma sayfanız şöyle görünecektir:
E sütunundaki 'Elmalar' kopyası şimdi kaldırıldı. Kullanıcı, etrafta hiçbir yabancı çalışma sayfası olmadan temiz bir konuma geri döndü ve tüm süreç, ekran titremesi veya uyarı mesajı olmadan sorunsuz bir şekilde yapıldı.