Ismétlődő értékek eltávolítása az Excel VBA -ban

Ez az oktatóanyag bemutatja, hogyan lehet eltávolítani az ismétlődéseket a VBA RemoveDuplicates módszerével.

RemoveDuplicates módszer

Amikor adatokat importál vagy beilleszt egy Excel munkalapba, azok gyakran ismétlődő értékeket tartalmazhatnak. Lehet, hogy meg kell tisztítania a bejövő adatokat, és el kell távolítania az ismétlődéseket.

Szerencsére van egy egyszerű módszer a VBA Range objektumán belül, amely lehetővé teszi ezt.

1 Tartomány („A1: C8”). RemoveDuplicates Oszlopok: = 1, Fejléc: = xlIgen

A szintaxis:

RemoveDuplicates ([Oszlopok], [Fejléc]

  • [Oszlopok] - Adja meg, hogy mely oszlopok ellenőrzik az ismétlődő értékeket. Minden oszlop nagyjából megegyezik, hogy ismétlődőnek kell tekinteni.
  • [Fejléc] - Az adatoknak van fejléce? xlNo (alapértelmezett), xlIgen, xlIgenNoGuess

Technikailag mindkét paraméter opcionális. Ha azonban nem adja meg az Oszlopok argumentumot, akkor az ismétlődések nem kerülnek eltávolításra.

A fejléc alapértelmezett értéke xlNo. Természetesen jobb megadni ezt az érvet, de ha van fejlécesor, akkor valószínűtlen, hogy a fejlécsor ismétlődni fog.

RemoveDuplicates használati megjegyzések

  • Az RemoveDuplicates módszer használata előtt meg kell adnia a használandó tartományt.
  • Az RemoveDuplicates módszer eltávolítja az összes olyan sort, amelyben ismétlődések találhatók, de megtartja az eredeti sort az összes értékkel.
  • Az RemoveDuplicates módszer csak oszlopokon működik, sorokon nem, de a helyzet kijavítására írható VBA kód (lásd később).

Mintaadatok a VBA példákhoz

A példakód működésének bemutatásához a következő mintaadatokat használjuk:

Ismétlődő sorok eltávolítása

Ez a kód eltávolítja az összes ismétlődő sort, csak az A oszlop értékei alapján:

123 Sub RemoveDupsEx1 ()Tartomány („A1: C8”). RemoveDuplicates Oszlopok: = 1, Fejléc: = xlIgenEnd Sub

Vegye figyelembe, hogy a „A1: C8” tartományt kifejezetten definiáltuk. Ehelyett használhatja a UsedRange -t. A UsedRange meghatározza az adatok utolsó használt sorát és oszlopát, és az eltávolítási duplikátumokat alkalmazza a teljes tartományra:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Oszlopok: = 1, Fejléc: = xlIgenEnd Sub

A UsedRange hihetetlenül hasznos, így nincs szükség a tartomány egyértelmű meghatározására.

A kód futtatása után a munkalapja így fog kinézni:

Ne feledje, hogy mivel csak az A oszlopot (1. oszlop) adta meg, a korábban az 5. sorban található „Alma” ismétlődést eltávolítottuk. A Mennyiség (2. oszlop) azonban más.

Az ismétlődések eltávolításához több oszlop összehasonlításával megadhatjuk ezeket az oszlopokat tömb módszerrel.

Távolítsa el a párhuzamosokat több oszlop összehasonlításával

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates Oszlopok: = Tömb (1, 2), Fejléc: = xlIgenEnd Sub

A tömb arra utasítja a VBA -t, hogy hasonlítsa össze az adatokat az 1. és a 2. oszlop használatával (A és B).

A tömb oszlopainak nem kell egymást követő sorrendben lenniük.

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Oszlopok: = Tömb (3, 1), Fejléc: = xlIgenEnd Sub

Ebben a példában az 1. és 3. oszlopot használják az ismétlődő összehasonlításhoz.

Ez a kódpélda mindhárom oszlopot használja az ismétlődések ellenőrzésére:

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Oszlopok: = Tömb (1, 2, 3), Fejléc: = xlIgenEnd Sub

Ismétlődő sorok eltávolítása a táblázatból

Az RemoveDuplicates alkalmazható Excel táblára is pontosan ugyanígy. A szintaxis azonban kissé eltér.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Table1"). DataBodyRange.RemoveDuplicates Columns: = Tömb (1, 3), _Fejléc: = xlIgenEnd Sub

Ez eltávolítja az ismétlődéseket a táblázatból az 1. és 3. oszlop alapján (A és C). Ez azonban nem teszi rendbe a táblázat színformázását, és színes üres sorokat fog látni a táblázat alján.

Másolatok eltávolítása a tömbökből

Ha el kell távolítania az ismétlődő értékeket egy tömbből, természetesen a tömböt az Excelbe is kimenheti, használhatja az RemoveDuplicates metódust, és újra importálhatja a tömböt.

Azonban írtunk egy VBA eljárást is, hogy eltávolítsuk az ismétlődéseket a tömbből.

Ismétlődések eltávolítása az adatsorokból a VBA használatával

Az RemoveDuplicates módszer csak adatoszlopokon működik, de némi „a dobozon kívül” gondolkodással létrehozhat egy VBA eljárást az adatsorok kezelésére.

Tegyük fel, hogy adatai így néznek ki a munkalapon:

Ugyanazokkal a másolatokkal rendelkezik, mint a B és E oszlopban, de nem távolíthatja el őket a RemoveDuplicates módszerrel.

A válasz az, hogy a VBA segítségével hozzon létre egy további munkalapot, másolja bele az adatokat oszlopokba transzponálva, távolítsa el az ismétlődő példányokat, majd másolja vissza, és sorokba ültesse vissza.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()„Kapcsolja ki a képernyőfrissítést és a riasztásokat - szeretnénk, ha a kód zökkenőmentesen futna, anélkül, hogy a felhasználó látná'mi folyik ittApplication.ScreenUpdating = HamisApplication.DisplayAlerts = Hamis'Új munkalap hozzáadásaSheets.Add After: = ActiveSheet"Hívja az új munkalapot" CopySheet "-nekActiveSheet.Name = "CopySheet"'Másolja ki az adatokat az eredeti munkalaprólTáblázatok ("DataInRows"). UsedRange.Copy'Aktiválja a létrehozott új lapotTáblázatok ("CopySheet"). Aktiválja'Illessze be az adatokat úgy, hogy most oszlopokban legyenekActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Hamis, transzponálás: = Igaz„Távolítsa el az ismétlődéseket az 1. és 3. oszlopbólActiveSheet.UsedRange.RemoveDuplicates Columns: = Tömb (1, 3), fejléc _: = xlIgen'Törölje az adatokat az eredeti munkalaponTáblázatok ("DataInRows"). UsedRange.ClearContentsMásolja az adatoszlopokat a létrehozott új munkalaprólTáblázatok ("Másolatlap"). UsedRange.Copy'Aktiválja az eredeti lapotTáblázatok ("DataInRows"). Aktiválás'Beillesztés transzponálja a nem ismétlődő adatokatActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Hamis, transzponálás: = Igaz- Törölje a másolólapot - már nincs rá szükségTáblázatok ("Másolatlap"). Törlés'Aktiválja az eredeti lapotTáblázatok ("DataInRows"). Aktiválás'Kapcsolja be újra a képernyőfrissítést és a riasztásokatApplication.ScreenUpdating = IgazApplication.DisplayAlerts = IgazEnd Sub

Ez a kód feltételezi, hogy a sorokban lévő eredeti adatokat a „DataInRows” nevű munkalapon tárolják

A kód futtatása után a munkalapja így fog kinézni:

Az E oszlopban található „alma” ismétlődést eltávolítottuk. A felhasználó tiszta helyzetben van, nincsenek idegen munkalapok, és az egész folyamat zökkenőmentesen, képernyő villódzása vagy figyelmeztető üzenetek nélkül történt.

Segít a fejlesztés a helyszínen, megosztva az oldalt a barátaiddal

wave wave wave wave wave