Dublētu vērtību noņemšana programmā Excel VBA

Šī apmācība parādīs, kā noņemt dublikātus, izmantojot metodi RemoveDuplicates VBA.

RemoveDuplicates metode

Kad dati tiek importēti vai ielīmēti Excel darblapā, tie bieži var saturēt dublētas vērtības. Jums, iespējams, būs jātīra ienākošie dati un jānoņem dublikāti.

Par laimi, VBA diapazona objektā ir vienkārša metode, kas ļauj to izdarīt.

1 Diapazons (“A1: C8”). RemoveDuplicates Columns: = 1, Header: = xlJā

Sintakse ir šāda:

RemoveDuplicates ([Kolonnas], [Galvene]

  • [Kolonnas] - Norādiet, kurās kolonnās tiek pārbaudītas vērtības. Visas kolonnas daudz atbilst, lai tās varētu uzskatīt par dublikātiem.
  • [Galvene] - Vai datiem ir galvene? xlNē (noklusējums), xlJā, xlJāNoGuess

Tehniski abi parametri nav obligāti. Tomēr, ja nenorādīsit argumentu Slejas, dublikāti netiks noņemti.

Galvenes noklusējuma vērtība ir xlNo. Protams, labāk ir norādīt šo argumentu, bet, ja jums ir galvenes rinda, maz ticams, ka galvenes rinda sakritīs kā dublikāts.

RemoveDuplicates lietošanas piezīmes

  • Pirms metodes RemoveDuplicates izmantošanas ir jānorāda izmantojamais diapazons.
  • Izmantojot metodi RemoveDuplicates, tiks noņemtas visas rindas ar atrastiem dublikātiem, taču tiks saglabāta sākotnējā rinda ar visām vērtībām.
  • RemoveDuplicates metode darbojas tikai kolonnās, nevis rindās, taču, lai labotu šo situāciju, var uzrakstīt VBA kodu (sk. Vēlāk).

Datu paraugi VBA piemēriem

Lai parādītu, kā darbojas parauga kods, tiek izmantoti šādi datu paraugi:

Noņemt dublētas rindas

Šis kods noņems visas dublētās rindas, pamatojoties tikai uz A slejas vērtībām:

123 Sub RemoveDupsEx1 ()Diapazons (“A1: C8”). RemoveDuplicates Columns: = 1, Header: = xlJāBeigu apakš

Ņemiet vērā, ka mēs skaidri definējām diapazonu “A1: C8”. Tā vietā varat izmantot UsedRange. UsedRange noteiks jūsu datu pēdējo izmantoto rindu un kolonnu un šim diapazonam lietos RemoveDuplicates:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Columns: = 1, Header: = xlJāBeigu apakš

UsedRange ir neticami noderīgs, novēršot nepieciešamību skaidri definēt diapazonu.

Pēc šī koda palaišanas jūsu darblapa tagad izskatīsies šādi:

Ņemiet vērā, ka, tā kā tika norādīta tikai A sleja (1. sleja), iepriekšējā rindā esošais “Āboli” dublikāts ir noņemts. Tomēr daudzums (2. sleja) ir atšķirīgs.

Lai noņemtu dublikātus, salīdzinot vairākas kolonnas, mēs varam norādīt šīs kolonnas, izmantojot masīva metodi.

Noņemiet dublikātus, salīdzinot vairākas kolonnas

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates Columns: = Masīvs (1, 2), Galvene: = xl JāBeigu apakš

Masīvs liek VBA salīdzināt datus, izmantojot gan 1., gan 2. sleju (A un B).

Masīva kolonnām nav jābūt secīgā secībā.

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Columns: = Masīvs (3, 1), Galvene: = xl JāBeigu apakš

Šajā piemērā 1. un 3. sleja tiek izmantota salīdzinājuma dublikātam.

Šajā koda piemērā tiek izmantotas visas trīs kolonnas, lai pārbaudītu dublikātus:

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Columns: = Masīvs (1, 2, 3), Galvene: = xl JāBeigu apakš

Dublētu rindu noņemšana no tabulas

RemoveDuplicates var lietot arī Excel tabulā tieši tādā pašā veidā. Tomēr sintakse nedaudz atšķiras.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Table1"). DataBodyRange.RemoveDuplicates Columns: = Masīvs (1, 3), _Galvene: = xlJāBeigu apakš

Tādējādi tabulā esošie dublikāti tiks noņemti, pamatojoties uz 1. un 3. sleju (A un C). Tomēr tas nesakārto tabulas krāsu formatējumu, un tabulas apakšā redzēsit atstātas krāsainas tukšas rindas.

Noņemiet dublikātus no masīviem

Ja jums ir jāizņem no masīva dublikātu vērtības, protams, varat izvadīt savu masīvu programmā Excel, izmantot metodi RemoveDuplicates un atkārtoti importēt masīvu.

Tomēr mēs arī uzrakstījām VBA procedūru, lai no masīva noņemtu dublikātus.

Dublikātu noņemšana no datu rindām, izmantojot VBA

Metode RemoveDuplicates darbojas tikai datu kolonnās, taču, domājot par to, kas notiek ārpus kastes, varat izveidot VBA procedūru, lai tiktu galā ar datu rindām.

Pieņemsim, ka jūsu darblapā jūsu dati izskatās šādi:

Jums ir tādi paši dublikāti kā iepriekš B un E slejās, taču nevarat tos noņemt, izmantojot metodi RemoveDuplicates.

Atbilde ir izmantot VBA, lai izveidotu papildu darblapu, kopētu tajā datus, pārnesot tos kolonnās, noņemiet dublikātus un pēc tam kopējiet tos atpakaļ, pārnesot atpakaļ rindās.

12345678910111213141516171819202122232425262728293031323334353637 ApakšdublikātiInRows ()“Izslēdziet ekrāna atjaunināšanu un brīdinājumus - mēs vēlamies, lai kods darbotos nevainojami, lietotājam to neredzot'kas notiekApplication.ScreenUpdating = NepareiziApplication.DisplayAlerts = Nepareizi'Pievienojiet jaunu darblapuSheets.Add After: = ActiveSheet"Izsaukt jauno darblapu par" CopySheet "ActiveSheet.Name = "CopySheet"'Kopējiet datus no sākotnējās darblapasIzklājlapas ("DataInRows"). UsedRange.Copy'Aktivizējiet jauno izveidoto lapuIzklājlapas ("CopySheet"). Aktivizēt“Ielīmēt, lai transponētu datus tā, lai tie tagad būtu slejāsActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, darbība: = xlNone, SkipBlanks: = _Nepareizi, transponēt: = True“Noņemiet 1. un 3. slejas dublikātusActiveSheet.UsedRange.RemoveDuplicates Columns: = Masīvs (1, 3), galvene _: = xlJā'Notīriet datus sākotnējā darblapāIzklājlapas ("DataInRows"). UsedRange.ClearContentsKopējiet datu slejas no jaunās izveidotās darblapasIzklājlapas ("Copysheet"). UsedRange.Copy'Aktivizējiet oriģinālo lapuIzklājlapas ("DataInRows"). Aktivizēt“Ielīmēt, lai transponētu datus, kas nav dublētiActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, darbība: = xlNone, SkipBlanks: = _Nepareizi, transponēt: = True“Izdzēsiet kopēšanas lapu - vairs nav nepieciešamaIzklājlapas ("Copysheet"). Dzēst'Aktivizējiet oriģinālo lapuIzklājlapas ("DataInRows"). AktivizētIeslēdziet ekrāna atjaunināšanu un brīdinājumusApplication.ScreenUpdating = PatiessApplication.DisplayAlerts = PatiessBeigu apakš

Šis kods pieņem, ka sākotnējie dati rindās tiek glabāti darblapā ar nosaukumu “DataInRows”

Pēc koda palaišanas darblapa izskatīsies šādi:

E slejas dublikāts “Āboli” tagad ir noņemts. Lietotājs ir atgriezies tīrā stāvoklī, bez apkārt esošām darblapām, un viss process ir veikts bez problēmām, bez ekrāna mirgošanas vai brīdinājuma ziņojumiem.

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave