Ši pamoka parodys, kaip pašalinti dublikatus naudojant „RemoveDuplicates“ metodą VBA.
„RemoveDuplicates“ metodas
Kai duomenys importuojami arba įklijuojami į „Excel“ darbalapį, dažnai juose gali būti pasikartojančių verčių. Gali tekti išvalyti gaunamus duomenis ir pašalinti dublikatus.
Laimei, VBA diapazono objekte yra paprastas metodas, leidžiantis tai padaryti.
1 | Diapazonas („A1: C8“). „RemoveDuplicates“ stulpeliai: = 1, antraštė: = xlTaip |
Sintaksė yra:
Pašalinti dublikatus ([stulpeliai], [antraštė]
- [Stulpeliai] - Nurodykite, kuriuose stulpeliuose tikrinamos, ar nėra pasikartojančių verčių. Visi stulpeliai labai sutampa, kad juos būtų galima laikyti pasikartojančiais.
- [Antraštė] - Ar duomenys turi antraštę? xlNo (numatytasis), xlYes, xlYesNoGuess
Techniškai abu parametrai yra neprivalomi. Tačiau jei nenurodysite stulpelių argumento, dublikatai nebus pašalinti.
Numatytoji antraštės vertė yra xlNo. Žinoma, geriau nurodyti šį argumentą, bet jei turite antraštės eilutę, mažai tikėtina, kad antraštės eilutė sutaps kaip dublikatas.
„RemoveDuplicates“ naudojimo pastabos
- Prieš naudodami „RemoveDuplicates“ metodą, turite nurodyti naudojamą diapazoną.
- „RemoveDuplicates“ metodas pašalins visas eilutes su rastais dublikatais, tačiau išlaikys pradinę eilutę su visomis reikšmėmis.
- „RemoveDuplicates“ metodas veikia tik stulpeliuose, o ne eilutėse, tačiau norint ištaisyti šią situaciją, galima parašyti VBA kodą (žr. Vėliau).
VBA pavyzdžių duomenų pavyzdžiai
Norint parodyti, kaip veikia pavyzdinis kodas, naudojami šie pavyzdiniai duomenys:
Pašalinkite pasikartojančias eilutes
Šis kodas pašalins visas pasikartojančias eilutes, pagrįstas tik A stulpelio reikšmėmis:
123 | Sub RemoveDupsEx1 ()Diapazonas („A1: C8“). „RemoveDuplicates“ stulpeliai: = 1, antraštė: = xlTaipPabaiga Sub |
Atkreipkite dėmesį, kad mes aiškiai apibrėžėme diapazoną „A1: C8“. Vietoj to galite naudoti „UsedRange“. „UsedRange“ nustatys paskutinę jūsų duomenų eilutę ir stulpelį ir pritaikys „RemoveDuplicates“ visam diapazonui:
123 | Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Stulpeliai: = 1, Antraštė: = xl TaipPabaiga Sub |
„UsedRange“ yra neįtikėtinai naudinga, todėl jums nereikia aiškiai apibrėžti diapazono.
Paleidus šį kodą, jūsų darbalapis dabar atrodys taip:
Atkreipkite dėmesį, kad kadangi buvo nurodytas tik A stulpelis (1 stulpelis), „Obuolių“ dublikatas, buvęs 5 eilutėje, buvo pašalintas. Tačiau Kiekis (2 stulpelis) yra kitoks.
Norėdami pašalinti dublikatus, lygindami kelis stulpelius, tuos stulpelius galime nurodyti naudodami masyvo metodą.
Pašalinkite pasikartojančius duomenis, lyginant kelis stulpelius
123 | Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates Stulpeliai: = Masyvas (1, 2), Antraštė: = xl TaipPabaiga Sub |
Masyvas liepia VBA palyginti duomenis naudojant 1 ir 2 stulpelius (A ir B).
Masyvo stulpeliai neturi būti iš eilės.
123 | Paprastas pavyzdys ()ActiveSheet.UsedRange.RemoveDuplicates Stulpeliai: = Masyvas (3, 1), Antraštė: = xl TaipPabaiga Sub |
Šiame pavyzdyje 1 ir 3 stulpeliai naudojami dvigubam palyginimui.
Šis kodo pavyzdys naudoja visus tris stulpelius, kad patikrintų, ar nėra dublikatų:
123 | Paprastas pavyzdys ()ActiveSheet.UsedRange.RemoveDuplicates Stulpeliai: = Masyvas (1, 2, 3), Antraštė: = xl TaipPabaiga Sub |
Pasikartojančių eilučių pašalinimas iš lentelės
„RemoveDuplicates“ taip pat galima pritaikyti „Excel“ lentelėje lygiai taip pat. Tačiau sintaksė šiek tiek skiriasi.
1234 | Paprastas pavyzdys ()ActiveSheet.ListObjects ("Table1"). DataBodyRange.RemoveDuplicates Stulpeliai: = Masyvas (1, 3), _Antraštė: = xlTaipPabaiga Sub |
Taip bus pašalintos lentelės dublikatai, pagrįsti 1 ir 3 stulpeliais (A ir C). Tačiau tai nesutvarko spalvoto lentelės formato, o lentelės apačioje pamatysite paliktas spalvotas tuščias eilutes.
Pašalinkite dublikatus iš masyvų
Jei jums reikia pašalinti pasikartojančias reikšmes iš masyvo, žinoma, galite išvesti savo masyvą į „Excel“, naudoti „RemoveDuplicates“ metodą ir iš naujo importuoti masyvą.
Tačiau mes taip pat parašėme VBA procedūrą, kad pašalintume dublikatus iš masyvo.
Dublikatų pašalinimas iš duomenų eilučių naudojant VBA
„RemoveDuplicates“ metodas veikia tik duomenų stulpeliuose, tačiau šiek tiek galvodami apie tai galite sukurti VBA procedūrą, skirtą duomenų eilutėms tvarkyti.
Tarkime, kad jūsų darbalapio duomenys atrodo taip:
Turite tuos pačius dublikatus, kaip ir anksčiau B ir E stulpeliuose, tačiau negalite jų pašalinti naudodami „RemoveDuplicates“ metodą.
Atsakymas yra naudoti VBA, norint sukurti papildomą darbalapį, nukopijuoti į jį duomenis, perkeliant juos į stulpelius, pašalinti dublikatus ir nukopijuoti atgal, perkeliant juos atgal į eilutes.
12345678910111213141516171819202122232425262728293031323334353637 | Antriniai dublikataiInRows ()„Išjunkite ekrano atnaujinimą ir įspėjimus - norime, kad kodas veiktų sklandžiai, vartotojui nematant'kas vykstaApplication.ScreenUpdating = NetiesaApplication.DisplayAlerts = Netiesa'Pridėkite naują darbalapįSheets.Add After: = ActiveSheet„Skambinkite naują darbalapį„ CopySheet “ActiveSheet.Name = "CopySheet"„Nukopijuokite duomenis iš pradinio darbalapioSkaičiuoklės („DataInRows“). UsedRange.Copy„Suaktyvinkite naują sukurtą lapąSkaičiuoklės („CopySheet“). Suaktyvinkite„Įklijuokite ir perkelkite duomenis taip, kad jie dabar būtų stulpeliuoseActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, operacija: = xlNone, SkipBlanks: = _Netiesa, perkelti: = tiesa„Pašalinkite 1 ir 3 stulpelių dublikatusActiveSheet.UsedRange.RemoveDuplicates Stulpeliai: = masyvas (1, 3), antraštė _: = xlTaip„Išvalykite duomenis iš pradinio darbalapioSkaičiuoklės („DataInRows“). UsedRange.ClearContents„Nukopijuokite duomenų stulpelius iš naujo sukurto darbalapioSkaičiuoklės („Copysheet“). UsedRange.Copy'Suaktyvinkite originalų lapąSkaičiuoklės („DataInRows“). Suaktyvinkite„Įklijuokite, kad perkeltumėte nesikartojančius duomenisActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, operacija: = xlNone, SkipBlanks: = _Netiesa, perkelti: = tiesa„Ištrinkite kopijavimo lapą - nebereikiaSkaičiuoklės („Copysheet“). Ištrinti'Suaktyvinkite originalų lapąSkaičiuoklės („DataInRows“). Suaktyvinkite„Vėl įjunkite ekrano atnaujinimą ir įspėjimusApplication.ScreenUpdating = TiesaApplication.DisplayAlerts = TiesaPabaiga Sub |
Šis kodas daro prielaidą, kad pradiniai duomenys eilutėse saugomi darbalapyje „DataInRows“
Paleidus kodą, jūsų darbalapis atrodys taip:
E stulpelio „obuolių“ dublikatas dabar pašalintas. Vartotojas vėl yra švarioje padėtyje, be jokių pašalinių darbo lapų, o visas procesas buvo atliktas sklandžiai, be ekrano mirgėjimo ar įspėjimų.