Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeile löschen wenn Wert in anderer Spalt

Zeile löschen wenn Wert in anderer Spalt
23.05.2022 11:59:24
Hans
Guten Morgen :)
ich habe eine Frage zum löschen ganzer Zeile, bzw. benötige Hilfe bei der Erstellung eines VBA-Codes.
Ich habe zwei Spalten (in der Beispiel-Datei Spalten A und C), die jeweils Zahlen enthalten. Ich würde gerne über ein Makro per Klick erreichen, dass wenn Werte sowohl in Zellen aus Spalte A und Spalte C vorkommen (teilweise doppelt, teilweise aber auch mehrfach), dass nur die Zeilen erhalten bleiben, die eben genau diese Mehrfachaufführung haben und die ohne Dopplung/Mehrfachaufführung gelöscht werden.
Konkret im Beispiel: hier sollten die Zeilen 6, 8, 9, 12 und 14 gelöscht werden, da diese nur in Spalte A aber nicht in Spalte C vorkommen
Ich habe versucht, dies über FALSCH/WAHR zu prüfen und eben die Zeilen zu löschen, die FALSCH aufweisen, jedoch ohne Erfolg.
Die Werte in Spalte D entsprechen Spalte B, jedoch als Text.
Ich hoffe ich habe mich verständlich genug ausgedrückt
Anbei mein VBA-Code der mich nicht zum Ziel geführt hat.
Leider funktioniert das nicht so wie ich möchte und stehe etwas auf dem Schlauch
Hier der Link zu der Datei: https://www.herber.de/bbs/user/153219.xlsm

Sub DELETE()
Worksheets("Tabelle1").Range("$B4:$B14").FillDown
Worksheets("Tabelle1").Range("$D4:$D14").FillDown
Dim t As Long
Dim Zelle As Range
t = 5
For Each Zelle In Sheets("Tabelle1").Range("D5:D14")
If Zelle = "FALSCH" Then Rows(t).DELETE
t = t + 1
Next
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile löschen wenn Wert in anderer Spalt
23.05.2022 12:39:52
MCO
Hallo Hans!
Da hast du gleich mehrere Logikfehler eingebaut:
1. Wenn du Zeilen löschst, dann immer von unten nach oben, denn ansonsten verschieben sich ja deine Zeilennummern, sodass bei jedem löschvorgang eine Zeile ungeprüft bleibt.
Beispiel: In der Schleife ist Zeile 10 dran u. wird gelöscht. Dann wird Zeile 11 zu Zeile 10, die Schleife geht aber auf Zeile 11.
Lösung: Schleife t von unten bis oben durchlaufen (step -1)
2. Du prüfst mit "Zelle = "Falsch"" auf den Zellwert, ob wohl da eine Formel drinsteht. Du musst hier entweder auf den Zelltext prüfen und damit dem Ergebnis der Formel, oder (das wäre meine Wahl) die Logik in VBA einbinden und direkt prüfen.
Viel Erfolg,
Gruß, MCO
Bei mir sieht also der Code wie folgt aus:

Sub DELETE()
Dim t As Long
Dim Zelle As Range
With Worksheets("Tabelle1")
.Range("$B4:$B14").FillDown
.Range("$D4:$D14").FillDown
For t = .UsedRange.Rows.Count To 5 Step -1
If Cells(t, "B").Text = "FALSCH" Then Rows(t).DELETE
Next
End With
End Sub

Anzeige
AW: Zeile löschen wenn Wert in anderer Spalt
23.05.2022 12:48:18
GerdL

Sub Unit()
Dim z As Long
For z = 14 To 5 Step -1
If WorksheetFunction.CountIf(Range("C5:C14"), Cells(z, 1)) Then
Else
Rows(z).Delete xlShiftDown
End If
Next
End Sub

AW: Zeile löschen wenn Wert in anderer Spalt
23.05.2022 13:04:01
Daniel
HI
Wenn du Zeilen mit Bedingung löschen willst, dann verwende zum Kennzeichnen eine Formel, die die zu löschenden Zeilen mit 0 und die anderen mit der aktuellen Zeilennummer markiert.
in deinem Fall beispielsweise: {=WENN(A4="";"";ODER(IDENTISCH($A4;$C$5:$C$14)))}
schreibe in die Zeile über den Daten (Überschrift) dieser Kennzeichnungsspalte ebenfalls die 0,
wende dann auf die Tabelle incl der Überschriftenzeile die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN an.
das ist einfacher und im Regelfall viel schneller.
wenn du Zahlen vergleichst oder die Groß-Kleinschreibung unwichtig ist, kannst du statt ODER(IDENTISCH()) auch ZählenWenn($C$5:$C$14;$A4) verwenden.
die 0 wird dann wie FALSCH interpretiert und jede andere Zahl als WAHR.
hat den Vorteil, dass du keine Matrixformel benötigst.
Gruß Daniel
Anzeige
AW: Zeile löschen wenn Wert in anderer Spalt
23.05.2022 17:15:40
Hans
Vielen Dank für die Antworten und Anregungen (v.a. bzgl. der Richtung des Abgleichs)
Da ich nicht 100% zum Ziel kam mit euren Lösungen, habe ich es jetzt neu "geschrieben" und auch etwas umständlich gemacht, aber auf jeden Fall komme ich so nun zum Ziel (bitte nicht steinigen :D )

Sub VERGLEICH()
Dim a As Long
Dim b As Long
Dim c As Long
a = Worksheets("Tabelle1").UsedRange.SpecialCells(xlCellTypeLastCell).ROW
With Worksheets("Tabelle1")
.Range("$B4:$B" & a).FILLDOWN
End With
With Worksheets("Tabelle1")
.Range("B5:$B" & a).COPY
.Range("D5:$D" & a).PasteSpecial Paste:=xlValues
.Range("D5:$D" & a).PasteSpecial Paste:=xlFormats
.Range("B5:$B" & a).ClearContents
End With
With Worksheets("Tabelle1")
For b = a To 5 Step -1
If Cells(b, "D").Text = "FALSCH" Then Rows(b).Interior.ColorIndex = 3
Next
End With
For c = a To 5 Step -1
If Worksheets("Tabelle1").Rows(c).Interior.ColorIndex = 3 Then
Rows(c).DELETE Shift:=xlShiftDown
Else
End If
Next
Worksheets("Tabelle1").Range("C5:$D" & a).ClearContents
End Sub
So werden mir nun alle Werte, die nicht doppelt vorhanden sind, angezeigt.
Nochmals vielen Dank für euren Input und eure Inspiration :)
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige