2017-02-17 1 views
0

Anwendungsfall: Ich möchte Daten von Spalte A in Spalte B kopieren (wobei Spalte A, B beliebige Spalten sind). Sobald die Daten in Spalte B gespeichert sind, möchte ich doppelte Einträge in Spalte B entfernen.Excel definiert Bereich über 100 Blatt Tabs, entfernen Duplikate in Spalte für 100 + Blätter

Erstellen Sie eine Schleife, die Daten aus Spalte A in Spalte B verschiebt und dann Dubletten für jedes Blatt in einer Arbeitsmappe entfernt.

`Sub Copy() 
    For i = 1 To Sheets.Count 
     Worksheets(i).Range("A1:A100") 
     Destination:=Worksheets(i).Range("B1") 
    Next 
End Sub 
` 

Zum Testen habe ich die Aufgaben in zwei verschiedene Sub() getrennt. Sub Copy() funktioniert und kopiert meine Daten korrekt. Sheet1 ist auch

scheint „Sheet1“ für meine spezifische Arbeitsmappe mit dem Namen
`Sub RemoveStuff() 
    Dim rng As Range 
    For j = 1 To Sheets.Count 
     Set rng = Worksheets("Sheet1").Range(Range("B1"),Range("B1").End(xlDown)).Select 
     rng.RemoveDuplicates Columns:=(1), Header:=xlGuess 
    Next 
End Sub 
` 

Mein Fehler richtig bei der Definition des Bereichs liegt. Jedes Blatt hat eine andere Anzahl von Einträgen, um Duplikate zu entfernen. Sheet1 könnte 50 Zeilen haben und auf 6 reduziert werden. Sheet2 könnte 70 haben und auf 3 reduzieren. Sheet3 könnte 20 Zeilen haben und auf 12 Uniques reduziert werden. Excel lässt Sie keine Duplikate aus dem Bereich (B: B!) Entfernen

Wie kann ich meinen Bereich richtig definieren, sodass ich Duplikate in einer Schleife für einen dynamisch definierten Bereich für jedes Blatt entfernen kann (Blatt = Registerkarten in der Arbeitsmappe)?

EDIT 2-23-17 Neuer Code von Y0wE3K

Sub RemoveStuff() Dim ws As Worksheet For Each ws In Worksheets ws.Columns("P:P").RemoveDuplicates,Columns:=1, Header:=xlYes Next End Sub noch nicht funktioniert. Wenn ich Spalte P manuell auswähle, bevor ich das Makro ausführe, funktioniert es. Aber es gilt nur für das eine Blatt, das ich ausgewählt habe, es scheint nicht die Schleife auszuführen. Bestimmt nicht automatisch jedes Blatt, oder mich für jeden einzeln auffordern. EDIT: 3/4

Stellen Sie sicher, dass Sie keine geschützten Daten haben, habe ich auch Probleme mit Pivot-Tabellen, aber ich denke, das können Berechtigungen sein, danke für Hilfe.

Sub RemoveStuff() 
    Dim ws As Worksheet 
    For Each ws In Worksheets ' Use Worksheets instead of Sheets, 
           ' in case there are any Charts 
     'You can just select the whole column, rather than selecting 
     'specific rows 
     ws.Columns("B:B").RemoveDuplicates Columns:=1, Header:=xlGuess 
    Next 
End Sub 
+1

Entfernen Sie die '.Select' aus' Set rng = .... .Select' – YowE3K

+0

Ihre 'RemoveStuff'-Schleife wird tatsächlich nicht jede Schleife ändern. Willst du alle Blätter auswählen und einen Bereich festlegen? Sie sollten auch vorsichtig sein, und fügen Sie das Arbeitsblatt vor beiden 'Bereich (" B1 ")' dort hinzu. Andernfalls wird nur der Bereich des ActiveSheets abgefangen. – BruceWayne

+1

Sind Sie sicher, dass 'Kopieren' funktioniert?!?!?! – YowE3K

Antwort

3

Ihre RemoveStuff Unterprogramm kann neu geschrieben werden. Als letzte Anmerkung stellen Sie bitte sicher, dass Sie keine geschützten Daten oder Pivot-Tabellen innerhalb der Blätter haben, auf denen Sie das Remove-Skript ausführen müssen. Aus irgendeinem Grund, der meinen Fehler verursacht hat, aber das Ausführen meines Skripts auf den richtigen Blättern, die nicht geschützt sind, funktionierte GROSS.

+0

dies funktioniert nicht.Mein neuer Code ist dies: 'Sub RemoveStuff() Dim ws Wie Arbeitsblatt For Each ws In Arbeitsblätter ws.Columns ("P: P") RemoveDuplicates Spalten:. = 1, Rubrik: = xlYes Weiter End Sub ' siehe Bearbeitungen – Goldfish

+0

@ktgold Ich fürchte, ich kann keinen Grund denken, warum dieser Code nicht funktionieren sollte. (Der Code, den Sie in Ihre Frage eingefügt haben, wird wegen des zusätzlichen ',' nicht darin enthalten sein.) Ich habe ihn getestet und in den drei Arbeitsblättern, die in meiner Testarbeitsmappe enthalten waren, glücklich entfernt. – YowE3K

+0

Mein Fehler, nachdem ich jedes Blatt durchsucht hatte, erkannte ich, dass es ein Blatt mit geschützten Daten gab, das es kaputt machte. Ich habe repariert und es hat gut funktioniert! Vielen Dank! – Goldfish

0
Sub RemoveStuff() 
    Dim ws As Worksheet 
    For Each ws In Worksheets 
     ws.Columns("P:P").RemoveDuplicates,Columns:=1, Header:=xlYes 
    Next 
End Sub 

Dieser Code funktioniert: