Excel VBA'da Yinelenen Değerleri Kaldırma

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ı.

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

wave wave wave wave wave