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.