Anzeige
Archiv - Navigation
996to1000
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

Zeilen löschen wenn wert gefunden

Zeilen löschen wenn wert gefunden
05.08.2008 12:30:52
Andreas
Einen schönen Tag der Exel- Gemeinde,
ein großes Lob und Dankeschön an dieses Forum, habe mir schon viel Hilfe hier geholt.
Nun komme ich leider nicht mehr weiter.
Habe mir diese Makro hier aus einen Beitrag gesucht, klappt sehr gut,
Nun mein Anliegen
Wenn er den Wert gefunden hat, soll er auch die Zeile zuvor mit löschen.
Bsp. Wert in Zeile 18 gefunden diese löschen sowie Zeile 17 auch löschen

Sub storückzeilenloeschen()
Dim lz As Long, z As Long
With ActiveSheet
lz = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
For z = lz To 1 Step -1
Select Case .Cells(z, 10)
Case 1, 2, 3, 4, 5, 6, 7
.Rows(z).Delete shift:=xlUp
End Select
Next z
End With
End Sub


Ich möcht mich schon vor ab bedanken.
Frage: welches Buch könnte ich mir als Anfänger zu legen oder wo bekomme ich die Begriffe näher erklärt über Makros,
Andreas

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen löschen wenn wert gefunden
05.08.2008 12:41:11
Rudi
Hallo,

Sub storückzeilenloeschen()
Dim lz As Long, z As Long
With ActiveSheet
lz = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
For z = lz To 1 Step -1
Select Case .Cells(z, 10)
Case 1, 2, 3, 4, 5, 6, 7
.Rows(z).Delete shift:=xlUp
.Rows(z-1).Delete shift:=xlUp
End Select
Next z
End With
End Sub


AW: Zeilen löschen wenn wert gefunden
05.08.2008 12:58:40
Daniel
Hi
ich würds so machen, es ist etwas schneller, da die Anzahl der Löschvorgänge halbiert ist und es werden keine Zeilen gelöscht, die noch durchlaufen werden müssen.

Sub storückzeilenloeschen()
Dim lz As Long, z As Long
application.screenupdating = false
With ActiveSheet
lz = .UsedRange.SpecialCells(xlCellTypeLastCell).Row-1
For z = lz To 1 Step -1
Select Case .Cells(z+1, 10)
Case 1, 2, 3, 4, 5, 6, 7
.Rows(z).resize(2).Delete shift:=xlUp
End Select
Next z
End With
application.screenupdating = true
End Sub


Zeile 1 musst du in diesem Fall extra prüfen
allerdings ist des da auch nicht möglich, die vorgängerzeile zulöschen, also ist hier eine Extrabehandlung sowieso erforderlich.
Gruß, Daniel

Anzeige
AW: Zeilen löschen wenn wert gefunden
05.08.2008 13:21:00
Rudi
Hallo,
letztendlich ist es das sinnvollste und schnellste, die Zeilen in einem Range zu sammeln und alle auf einmal zu löschen.

Sub storückzeilenloeschen()
Dim lz As Long, z As Long, rngDel As Range
With ActiveSheet
lz = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
For z = lz To 1 Step -1
Select Case .Cells(z, 10)
Case 1 To 7
If rngDel Is Nothing Then
Set rngDel = .Range(.Cells(z - 1, 1), .Cells(z, 1))
Else
Set rngDel = Union(rngDel, .Range(.Cells(z - 1, 1), .Cells(z, 1)))
End If
End Select
Next z
End With
If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
End Sub


Gruß
Rudi

Anzeige
AW: Zeilen löschen wenn wert gefunden
05.08.2008 14:06:50
Daniel
Hi
das ist sicherlich schon sehr schnell, ist aber definitiv nicht das schnellste.
Noch schneller ist, die zu löschenden Daten in einer Hilfsspalte per Excelformel zu kennzeichnen (dh. zu löschende Daten bekommen ein Blank, nicht zu löschende Zahlen die aktuelle ZeilenNr), dann nach dieser Spalte zu sortieren und alle Zeilen mit Blanks zu löschen.
das ist bisher die schnellste Methode die ich kenne und die auch bei grössten Datenmengen (+60.000 Zeilen) am besten funktioniert. auch das Einlesen und Abarbeiten in einem Array ist nicht effektiver (dafür vom Programmieraufwand her komplexer).
außerdem hat die Formel-Mehtode den Vorteil, daß man sie auch ohne VBA-Kenntnisse direkt in Exel anwenden kann. (und damit u.U. sogar schneller ist, als ein klassisches Schleifenmakro)

Sub löschen2()
Dim sp As Long, ze As Long
With ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell)
sp = .Column + 1
ze = .Row
End With
With Range(Cells(1, sp), Cells(ze, sp))
.FormulaLocal = "=WENN(ODER(J1


Gruß, Daniel

Anzeige
AW: Zeilen löschen wenn wert gefunden
06.08.2008 12:16:22
Andreas
Ich möcht mich für die Hilfe vom Rudi und Daniel bedanken,
ich habe die angepassten Makros geprüft, zwar erst mal mit einer kleinen Datenmenge,
aber sie haben das was sie machen sollten ausgeführt.
wow kann ich nur sagen und danke,
Gruß Andreas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige