Hallo! Habe da eine Anfrage:
Ich möchte in einer sehr langen Excel Tabelle alle zeilen komplettlöschen (nicht nur den Inhalt), in denen bestimmte Spoalten 10 mal oder öfter dieselben Einträge haben, z.B.
EURUSD
1 15:00 1,46
2 16:00 1,49
3 17:00 1,50
Hier soll nichts gelöscht werden!
EURUSD
1 15:00 1,56
2 16:00 1,56
3 17:00 1,56
… (min. 10 mal derselbe Eintrag in der 2. Spalte)..
–> Lösche alle diese Zeilen bis wieder ein anderer Wert kommt!
auf die Schnelle habe ich nur genau 10 benachbarte Zeilen geprüft, aber daraus könnte man weitergehen.
Ich hoffe das hilft die ein Stück weiter.
Mit ner Mail-Adr. schicke ich dir auch das Test-Excel.
Ciao
Tobias
Option Explicit
Sub LöscheGleicheZeilen()
Dim i As Integer 'akt. Startzeile für 10-gleiche-Suchen
Dim j As Integer
Dim aktZeile As Integer
Dim iLetzteZeile As Integer
Dim iAnzGleicherWert As Integer
On Error GoTo LöscheGleicheZeilen_Error
'letzte Zeile in Spalte B ermitteln
iLetzteZeile = ActiveSheet.Range(„B65536“).End(xlUp).Row
'oder alternativ fix bis z.B. bis 100 durchscannen
'iLetzteZeile = 100
For i = 3 To iLetzteZeile
If i > iLetzteZeile Then Exit For
iAnzGleicherWert = 0
'Prüfung von 10 Zeilen ab der aktuellen aus gleiche Spalte B
For aktZeile = i To i + 8 '!vergleicht von 1/2 bis 9/10
If Cells(aktZeile, 2).Value = Cells(aktZeile + 1, 2).Value Then
iAnzGleicherWert = iAnzGleicherWert + 1
End If
Next aktZeile
If iAnzGleicherWert = 9 Then
aktZeile = i 'auf Startzeile des Vergleichs setzen
For j = 1 To 9 'lässt die 10 gleiche Zeile stehen, gewollt? sonst erhöhen
Rows(aktZeile).Delete shift:=xlShiftUp
Next j
'evtl: iLetzteZeile = iLetzteZeile - 9
'evtl: i = 3 'wenn wieder von ganz von vorne verglichen werden soll
End If
Next i
On Error GoTo 0
Exit Sub
LöscheGleicheZeilen_Error:
MsgBox „Problem " & Err.Number & " (“ & Err.Description & _
") in Prozedur "
End Sub
Hallo! Habe da eine Anfrage:
Ich möchte in einer sehr langen Excel Tabelle alle zeilen
komplettlöschen (nicht nur den Inhalt), in denen bestimmte
Spalten 10 mal oder öfter dieselben Einträge haben, z.B.
[…]
EURUSD
1 15:00 1,56
2 16:00 1,56
3 17:00 1,56
… (min. 10 mal derselbe Eintrag in der 2. Spalte)..
–> Lösche alle diese Zeilen bis wieder ein anderer Wert
kommt!
Ich würde vermutlich eine Doppelte Do until - Schleife realisieren.
In der ersten Schleife wird Zeile für Zeile von oben die Spalte durchgegangen, in der die zu testenden Werte stehen. In jeweils jeder neu aufgerufenen Zeile läuft dann die zweite Schleife und prüft dann ob die folgenden Zeilen auch den Wert aus der Ursprungszelle enthalten. In der zweiten Schleife kannst du ja eine Variable mitlaufen lassen und wenn die dann > 10 wird, dann kannst du anfangen die Zeilen zu löschen.
Ich habe nicht ganz verstanden, wie das mit dem 10 x gleicher Wert gemeint ist. Müssen die 10 Werte hintereinander stehen oder kann es aus sein, dass der Wert später noch einmal kommt. Für zweiten Fall könntest du in einem ersten Schritt sortieren, dann ist das mit dem Löschen einfacher, weil du in der zweiten Schleife nur so lange laufen musst bis, ein neuer Wert kommt und du dann einfach eine if-Abfrage machst in der du testest, ob die Variable > 10 ist.
Hier mal mein grober Code (ich gehe davon aus, dass die Werte in Spale B stehen und Spalte B sortiert ist):
b=1
do until Range(„B“&b)=„“
anzahl=„“
test_b=b
do until range(„B“&test_b)range(„B“&b)
test_b=test_b+1
anzahl=anzahl+1
Loop
test_b=test_b-1
if anzahl > 10
Rows(„“ & b & „:“ & test_b & „“).Delete Shift:=xlUp
else
endif
b=b+1
Loop
Ich habe den Code aus Zeitgründen noch nicht nicht getestet. Viel Erfolg.
Hallo Tobi!
Vielen Dank für Deine Mühe ,das klappt wunderbar! Ich musst kaum was verändern! Nur die Rechenkapazität lässt jetzt noch etwas zu wünschen übrig…dauert schon ein paar Minuten für ein Sheet…
Danke nochmal!!
lomfy
Tut mir leid, dafür habe ich keine Lösung.
Es ist kein Problem, doppelte Datensätze zu löschen (mit Makro).
Deine Frage zielt aber darauf, dass die doppelten Datensätze gezählt und erst ab der 10. Doppelung gelöscht werden.
Dafür habe ich keinen Plan.
Tut mir leid…
Hermann
Hallo! Habe da eine Anfrage:
Ich möchte in einer sehr langen Excel Tabelle alle zeilen
komplettlöschen (nicht nur den Inhalt), in denen bestimmte
Spoalten 10 mal oder öfter dieselben Einträge haben,
Ich hab es mal versucht, hat aber mit Sicherheit noch Optimierungspotenzial
Mein Gedankengang - ich schreibe die Werte der Spalte 2 und die jeweilie Zeile in einen Array, sortiere diesen und dann lösche ich in einer Schleife bei min 10. gleichen Eintragen die jeweiligen Zeilen)
Vielleicht hilfts dir ja.
Viele Grüße
Reinhard
Option Explicit
Type Type_Itab
Row As Integer
Str As String
End Type
Sub Mehrfachwerte_löschen()
Const Max As Long = 1000 ’ Max Anzahl an Zeilen - Bei Bedarf ändern
Const Löschen_ab As Long = 10 ’ Ab wievielen Mehrfachwerten löschen - Bei Bedarf ändern
Dim n As Long ’ Variable für Schleifendurchlauf
Dim n2 As Long ’ Varialbe für letzte Schleife - Ermittlung der Mehrfachwerte
Dim n3 As Long ’ Varialbe für letzte Schleife - Ermittlung der Mehrfachwerte
Dim Itab(1 To Max) As Type_Itab ’ Array für Sortierung der Daten
Dim Cell As Variant
n = 1
'Jeder Wert von Spalte B sowie jede Zeilennummer wird ins Array geschreiben
For Each Cell In Selection
Itab(n).Row = Cell.Row
Itab(n).Str = Cell.Value
n = n + 1
Next Cell
'Array wird aufsteigend sortiert
Dim Help As Type_Itab 'Eine Zele des Arrays wird beim Sortieren zwischengespeichert
Dim Change As Boolean
Change = True
While Change
Change = False
n = 1
While n 0 Then
n2 = n2 + 1
Else 'If Itab(n).Row > 0 Then
'Bei neuem itab.str Prüfung auf Anzahl der Übereinstimmung
Löschen_Zeilen:
If n2 >= Löschen_ab Then
n3 = Max
’ Neue Schleife für Löschen der Zeilen
While n3 > 0
If Itab(n3).Str = Help.Str Then
Rows(Itab(n3).Row & „:“ & Itab(n3).Row).Select
Selection.Delete
End If
n3 = n3 - 1
Wend
End If
’ Speichern des neuen help.Str
Help.Str = Itab(n).Str
n2 = 1
End If
'Sonderfall bei letztem Datensatz - ansonst erfolg kein nochmaliger Durchlauf der Schleife
If n = Max And n2 >= Löschen_ab Then GoTo Löschen_Zeilen
Hallo!
Gibt´s schon eine Lösung, oder besteht das Problem noch?
Eine einfache Lösung fällt mir nicht ein, aber ich könnte mal was basteln.
Hallo! Habe da eine Anfrage:
Ich möchte in einer sehr langen Excel Tabelle alle zeilen
komplettlöschen (nicht nur den Inhalt), in denen bestimmte
Spoalten 10 mal oder öfter dieselben Einträge haben, z.B.
EURUSD
1 15:00 1,46
2 16:00 1,49
3 17:00 1,50
Hier soll nichts gelöscht werden!
EURUSD
1 15:00 1,56
2 16:00 1,56
3 17:00 1,56
… (min. 10 mal derselbe Eintrag in der 2. Spalte)..
–> Lösche alle diese Zeilen bis wieder ein anderer Wert
kommt!