Ich habe fünf Blätter in einem Dokument. Das erste Blatt enthält die Zeilen, die Werte in der ersten Spalte enthalten. Ich muss alle Zeilen aus den übrigen Blättern löschen, die in der ersten Spalte denselben Wert haben, der mit dem Wert der ersten Spalte des ersten Blatts übereinstimmt. Das Problem ist, dass es sich um viele Datensätze mit unterschiedlichen Spaltenwerten handelt, die gelöscht werden sollen. Wie kann ich einfach alle Zeilen durchsuchen, die die Werte des ersten Blatts enthalten (oder die mit dem ersten Blatt gemeinsam sind), und sie löschen?
Antwort1
Wenn Sie jeden Wert in Spalte A von Blatt1 durchgehen und diesen Wert zum Filtern der verbleibenden 4 Arbeitsblätter verwenden, sollten Sie die gewünschten Ergebnisse erhalten.
Sub remove_from_2_to_5()
Dim var As Variant, w As Long, rw As Long
With Sheets(1)
For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If Not IsEmpty(.Cells(rw, 1)) Then
var = .Cells(rw, 1).Value
For w = 2 To 5
With Sheets(w).Cells(1, 1).CurrentRegion
.AutoFilter
.AutoFilter field:=1, Criteria1:=var
With .Offset(1, 0).Resize(.Rows.Count, .Columns.Count)
If CBool(Application.Subtotal(103, .Columns(1))) Then
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End If
End With
.AutoFilter
End With
Next w
End If
Next rw
End With
End Sub
Während die erste For/Next-Schleife die Spalte A von Sheet1 durchläuft, zeichnet sie den gefundenen Wert auf. Dieser wird in jedem der verbleibenden Arbeitsblätter als Kriterium für eine .AutoFilter
Operation verwendet. Wenn nach Anwenden des Filters noch Zellen angezeigt werden, werden die Zeilen gelöscht.
Antwort2
Fügen Sie in jedes Blatt eine Spalte ein, um zu prüfen, ob der Wert in der ersten Spalte im ersten Blatt vorkommt: =iferror(match(a2,sheet1!a:a,0)>0,false)
Sie gelangen true
in die Zeilen, deren erste Spalte im ersten Blatt vorkommt, filtern nach ihnen und löschen sie.
Wenn Sie mehrere Blätter haben und eine noch schnellere Lösung benötigen, brauchen Sie ein Makro.