Doppelte Werte suchen mit zusätzliche Bedingung dann eins löschen?
Hallo zusammen, ich hoffe dass jemand helfen kann weil ich weiß nicht weiter, danke.
Ich habe folgenden Code zum Suchen der Doppeltwerten in Spalte B und dann Löschung der Zeile:
Sub DoppelteZeilenLoeschen()
Dim letzteZeile As Long
Dim Zeile As Long
letzteZeile = Range("B" & Rows.Count).End(xlUp).Row
For Zeile = letzteZeile To 1 Step -1
If WorksheetFunction.CountIf(Range("B1:B" & Zeile), Range("B" & Zeile)) > 1 Then
Rows(Zeile).EntireRow.Delete
End If
Next
End Sub
Jetzt meine Frage:
Was ich kann ich ergänzen, dass eine zweite Bedingung hier abgefragt wird vor der Löschung, also wenn Spalte "B" doppelwert hat dann Spalte "J" vergleichen, wenn Ergebnis der Spalte "J" gleich ist dann Zeile löschen, ansonsten weiter zählen.
Ein Bsp.
Spalte B Spalte J
- ABCD 1234
- ABCD 1234
- ABCD 4567
Hier sollten nur Zeile2 gelöscht werden.
Vielen Dank im Voraus
3 Antworten
Mal ein "WorksheetFunction.SumProduct".
Mit Countif wirst Du das nicht hinbekommen. Ohne VBA, also als Formel im Blatt, würde das in etwa so aussehen:
=SUMMENPRODUKT(((B1:B1000&J1:J1000)=(B1&J1))*1)>1
Das wäre die
WorksheetFunction.SumProduct
Da Du recht fit in VBA zu sein scheinst, kannst Du das eventuell ja selber umsetzten.
Ich muss jetzt leider zur Arbeit, schaue aber spätestens morgen wieder rein und helfe weiter, falls nötig.
Sieht viel versprechend aus, bin gerade bei der arbeit, würde ich später testen und berichten. Besten Dank.
Mit WorkSheetFunction habe ich es irgendwie nicht hinbekommen. Bin aber beim "Stöbern" auf Evaluate gestoßen. Schau mal, ob es so klappt. Bei mir lief das.
Sub DoppelteZeilenLoeschen()
Dim letzteZeile As Long
Dim Zeile As Long
letzteZeile = Range("B" & Rows.Count).End(xlUp).Row
For Zeile = letzteZeile To 1 Step -1
If Evaluate("SUMPRODUCT(((B1:B" & Zeile & "&J1:J" & Zeile & ")=(B" & Zeile & "&J" & Zeile & "))*1)>1") Then
Rows(Zeile).EntireRow.Delete
End If
Next
End Sub
Ich würde mir die beiden Einzelinhalte merken und mit Worksheetsfunction.Match
prüfen, ob beide Inhalte erneut in der gleichen Zeile vorkommen.
Den Bereich für diesen Vergleich würde ich nur bis (Zeile-1) laufen lassen. (Aber auch bei der 'letzten' beginnen.
Aus meiner Sicht muss es eine While Schleife werden, da nicht zwingend bei jedem Lauf die Zeile verändert werden darf. Weil ja auch Dinge dreifach, mehrfach doppelt sein können.
Ich muss dazu sagen, dass ich normalerweise nichts mit VB mache, aber soweit ich den Code verstehen kann, sollte diese Anpassung auch J prüfen. Ob die ganze Prüfung jetzt effektiv ist kann ich nicht beurteilen.
If WorksheetFunction.CountIf(Range("B1:B" & Zeile), Range("B" & Zeile)) > 1 AND WorksheetFunction.CountIf(Range("J1:J" & Zeile), Range("J" & Zeile)) Then
Das habe ich beriets schon ausprobiert, hat leider nicht funktioniert.
Danke dir Oubyi für die schnelle Antwort. Die Formel funktioniert, nur wie bringe ich das als Code rein? :)
Also alles was mit Ergebnis "Falsch" darf bleiben, "Wahr" sollte gelöscht werden.