Doppelte Werte suchen mit zusätzliche Bedingung dann eins löschen?

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.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
lokke526 
Fragesteller
 29.05.2020, 16:33

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.

1
Oubyi, UserMod Light  30.05.2020, 02:32
@lokke526

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
1
lokke526 
Fragesteller
 30.05.2020, 07:47

Sieht viel versprechend aus, bin gerade bei der arbeit, würde ich später testen und berichten. Besten Dank.

1

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
lokke526 
Fragesteller
 29.05.2020, 15:12

Das habe ich beriets schon ausprobiert, hat leider nicht funktioniert.

1