Ta bort dubblettvärden i Excel VBA

Denna handledning visar hur du tar bort dubbletter med metoden RemoveDuplicates i VBA.

RemoveDuplicates -metod

När data importeras eller klistras in i ett Excel -kalkylblad kan det ofta innehålla dubblettvärden. Du kan behöva rengöra inkommande data och ta bort dubbletter.

Lyckligtvis finns det en enkel metod inom Range -objektet för VBA som låter dig göra detta.

1 Område ("A1: C8"). RemoveDuplicates -kolumner: = 1, Rubrik: = xlJa

Syntax är:

RemoveDuplicates ([Kolumner], [Rubrik]

  • [Kolumner] - Ange vilka kolumner som kontrolleras för dubblettvärden. Alla kolumner matchar mycket för att betraktas som en duplikat.
  • [Rubrik] - Har data en rubrik? xlNo (standard), xlYes, xlYesNoGuess

Tekniskt sett är båda parametrarna valfria. Men om du inte anger kolumnargumentet kommer inga dubbletter att tas bort.

Standardvärdet för Rubrik är xlNo. Naturligtvis är det bättre att ange detta argument, men om du har en rubrikrad är det osannolikt att rubrikraden matchar som en kopia.

RemoveDuplicates Användningsanmärkningar

  • Innan du använder metoden RemoveDuplicates måste du ange ett intervall som ska användas.
  • Metoden RemoveDuplicates tar bort alla rader med dubbletter som hittats, men den ursprungliga raden behålls med alla värden.
  • Metoden RemoveDuplicates fungerar bara på kolumner och inte på rader, men VBA -kod kan skrivas för att rätta till denna situation (se senare).

Provdata för VBA -exempel

För att visa hur exempelkoden fungerar används följande exempeldata:

Ta bort dubblerade rader

Denna kod kommer att ta bort alla dubblettrader som endast baseras på värden i kolumn A:

123 Sub RemoveDupsEx1 ()Område ("A1: C8"). RemoveDuplicates -kolumner: = 1, Rubrik: = xlJaAvsluta Sub

Lägg märke till att vi uttryckligen definierade intervallet "A1: C8". Istället kan du använda UsedRange. UsedRange avgör den senast använda raden och kolumnen i dina data och tillämpar RemoveDuplicates på hela det intervallet:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates -kolumner: = 1, Rubrik: = xlJaAvsluta Sub

UsedRange är otroligt användbart, vilket tar bort behovet av att du uttryckligen definierar intervallet.

När du har kört denna kod kommer ditt kalkylblad nu att se ut så här:

Lägg märke till att eftersom endast kolumn A (kolumn 1) angavs har ”Äpplen” -duplikatet tidigare i rad 5 tagits bort. Kvantiteten (kolumn 2) är dock annorlunda.

För att ta bort dubbletter genom att jämföra flera kolumner kan vi ange dessa kolumner med en Array -metod.

Ta bort dubbletter som jämför flera kolumner

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates -kolumner: = Array (1, 2), Header: = xlJaAvsluta Sub

Arrayen uppmanar VBA att jämföra data med hjälp av både kolumnerna 1 och 2 (A och B).

Kolumnerna i matrisen behöver inte vara i ordning.

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates -kolumner: = Array (3, 1), Header: = xlJaAvsluta Sub

I det här exemplet används kolumnerna 1 och 3 för duplikatjämförelsen.

Detta kodexempel använder alla tre kolumnerna för att söka efter dubbletter:

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates -kolumner: = Array (1, 2, 3), Header: = xlJaAvsluta Sub

Ta bort dubblerade rader från en tabell

RemoveDuplicates kan också tillämpas på en Excel -tabell på exakt samma sätt. Men syntaxen är något annorlunda.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Tabell1"). DataBodyRange.RemoveDuplicates -kolumner: = Array (1, 3), _Rubrik: = xlJaAvsluta Sub

Detta tar bort dubbletterna i tabellen baserat på kolumnerna 1 och 3 (A och C). Det städar dock inte färgformateringen i tabellen, och du kommer att se färgade tomma rader kvar i botten av tabellen.

Ta bort dubbletter från matriser

Om du behöver ta bort dubblettvärden från en matris kan du naturligtvis mata ut matrisen till Excel, använda metoden RemoveDuplicates och importera matrisen igen.

Men vi skrev också ett VBA -förfarande för att ta bort dubbletter från en array.

Ta bort dubbletter från datarader med hjälp av VBA

Metoden RemoveDuplicates fungerar bara på datakolumner, men med lite "out of the box" -tänkande kan du skapa ett VBA -förfarande för att hantera rader med data.

Anta att din data ser ut så här i ditt kalkylblad:

Du har samma dubbletter som tidigare i kolumnerna B och E, men du kan inte ta bort dem med metoden RemoveDuplicates.

Svaret är att använda VBA för att skapa ett ytterligare kalkylblad, kopiera data till den för att transponera dem till kolumner, ta bort dubbletterna och sedan kopiera tillbaka dem för att transponera tillbaka dem till rader.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()'Stäng av skärmuppdatering och varningar - vi vill att koden ska fungera smidigt utan att användaren ser'vad händerApplication.ScreenUpdating = FalsktApplication.DisplayAlerts = Falskt'Lägg till ett nytt kalkylbladSheets.Add After: = ActiveSheet'Kalla det nya kalkylbladet' CopySheet 'ActiveSheet.Name = "CopySheet"'Kopiera data från det ursprungliga kalkylbladetKalkylark ("DataInRows"). UsedRange.Copy'Aktivera det nya blad som har skapatsArk ("CopySheet"). Aktivera'Klistra in transponera data så att de nu finns i kolumnerActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Falskt, Transponera: = Sant'Ta bort dubbletterna för kolumnerna 1 och 3ActiveSheet.UsedRange.RemoveDuplicates -kolumner: = Array (1, 3), Header _: = xlJa'Rensa data i det ursprungliga kalkylbladetSheets ("DataInRows"). UsedRange.ClearContents'Kopiera datakolumnerna från det nya kalkylbladet som skapatsSheets ("Copysheet"). UsedRange.Copy'Aktivera originalarketArk ("DataInRows"). Aktivera'Klistra in transponera icke-dubblettdataActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Falskt, Transponera: = Sant'Ta bort kopieringsarket - behövs inte längreArk ("Kopieringsblad"). Radera'Aktivera originalarketArk ("DataInRows"). Aktivera'Slå på skärmuppdatering och varningar igenApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueAvsluta Sub

Denna kod förutsätter att den ursprungliga data i rader finns i ett kalkylblad som heter 'DataInRows'

När du har kört koden kommer ditt kalkylblad att se ut så här:

"Äpplen" -duplikatet i kolumn E har nu tagits bort. Användaren är tillbaka i en ren position, utan främmande kalkylblad som hänger runt, och hela processen har skett smidigt utan skärmflimmer eller varningsmeddelanden.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave