Pasikartojančių verčių pašalinimas „Excel VBA“

Š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ų.

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave