Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1172to1176
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 nach Ergebnis mit SVERWEIS

Zeilen löschen nach Ergebnis mit SVERWEIS
Stefan
Hallo zusammen
Ich habe eine Liste, bei welcher nach Ergebnis (="e") mit SVERWEIS oder INDEX/VERGLEICH Zeilen gelöscht werden müssen:
WENN SVERWEIS(VERKETTEN(LINKS(A22;6);"00");$A$4:$J$1000;10;0) = e dann Zeile löschen
oder besser
WENN INDEX(J:J;VERGLEICH(VERKETTEN(LINKS(A22;6);"00");A:A;0)) = e dann Zeile löschen
Mit dem bestehenden Makro werden alle Zeilen mit einem "e" in Spalte J gelöscht:
Sub Erledigte_Projekte_löschen()
Dim Frage As Double
Dim WshShell
Dim i As Long
Frage = MsgBox("Sollen die erledigten Projekte mit (e) wirklich gelöscht werden?" & Chr(13) & _
"Der Vorgang kann nicht mehr rückgängig gemacht werden!", 33, "Frage")
If Frage = vbCancel Then
Exit Sub
Else
Application.ScreenUpdating = False
Set WshShell = CreateObject("WScript.Shell")
WshShell.popup "Die erledigten Projekte werden gelöscht...", 2, "Erledigte Projekte löschen"
For i = Cells(Rows.Count, 10).End(xlUp).Row To 1 Step -1
If Cells(i, 10) = "e" Then Rows(i).Delete
Application.ScreenUpdating = True
Next
End If
End Sub

Die Zeilen dürfen aber nur gelöscht werden, wenn das Hauptprojekt mit den letzten beiden Ziffern "00" in Spalte A enthält und in Spalte J ein "e" gesetzt ist.
Wie kann die Bedingung in das Makro integriert werden?
Gruss
Stefan
Muster-Datei: https://www.herber.de/bbs/user/71099.xls

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zeilen löschen nach Ergebnis mit SVERWEIS
17.08.2010 12:06:36
Matthias
Hallo
Nicht getestet.
bitte an einer Kopie probieren.
If Cells(i, 10) = "e" And Right(Cells(i, 1), 2) = "00" Then Rows(i).Delete
Gruß Matthias
Nö :-P
17.08.2010 12:25:01
Klaus
Hallo Matthias,
damit erwischt du aber nicht die "00" des Hauptprojekts! Bin ich auch zunächst drüber gestolpert, aber Stefan hat die Formel fürs Hauptprojekt freundlicherweise in der Frage gleich mitgeliefert.
Grüße,
Klaus M.vdT.
AW: Zeilen löschen nach Ergebnis mit SVERWEIS
17.08.2010 12:23:34
Klaus
Moin Stefan,
Spalte L (die ist ja leer) habe ich mal als Hilfsspalte mißbraucht. Dafür den Popup auskommentiert, dank Hilfsspalte können die Zeilen ohne For-Next schleife gelöscht werden und das geht rasend schnell.
Option Explicit
Sub Erledigte_Projekte_löschen()
Dim Frage As Double
Dim WshShell
Dim i As Long
Frage = MsgBox("Sollen die erledigten Projekte mit (e) wirklich gelöscht werden?" & Chr(13) & _
"Der Vorgang kann nicht mehr rückgängig gemacht werden!", 33, "Frage")
If Frage = vbCancel Then
Exit Sub
Else
Application.ScreenUpdating = False
'Set WshShell = CreateObject("WScript.Shell")
'WshShell.popup "Die erledigten Projekte werden gelöscht...", 1, "Erledigte Projekte löschen"
With Sheets("Allgemeine Projekte")
.Range("L4:L" & .Range("A4").End(xlDown).Row).FormulaR1C1 = _
"=IF(INDEX(C[-2],MATCH(CONCATENATE(LEFT(RC[-11],6),""00""),C[-11],0))=""e"",1/0,"""")"
.Columns("L:L").SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete shift:=xlUp
.Columns("L:L").ClearContents
End With
Application.ScreenUpdating = True
End If
End Sub

Anzeige
AW: Zeilen löschen nach Ergebnis mit SVERWEIS
17.08.2010 15:00:44
Stefan
Hallo Klaus
Vielen Dank für deinen raschen Vorschlag. Der Code läuft nur fehlerfrei, wenn er entsprechende Bedingungen findet, ansonsten wird ein Laufzeitfehler "1004" erzeugt. Kann dieser Fehler vermieden werden?
Noch eine Frage: Ist diese Prozedur grundsätzlich nur mit Formel in eine freie Spalte einfügen und danach löschen möglich (gemäss deinem Beispiel) oder gibt es dazu noch einen anderen Weg?
Gruss
Stefan
Fehlerbehandlung
17.08.2010 15:13:07
Klaus
Hallo Stefan,
ich würd den Fehler jetzt mit einem "On Error Resume Next" am Anfang ausbügeln, aber das ist nicht der richtige Weg. Die Fehlerbehandlung müsste per IF-Schleife um die Zeile
.Columns("L:L").SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete shift:=xlUp
herum gebastelt werden, aber da steh ich grad auf dem Schauch ...
Um in VBA Zeilen zu löschen, kannst du:
1) jede einzelne per FOR-NEXT abfragen und einzeln löschen. Einfach zu programmieren, aber leider sehr langsam.
2) jede einzelne per FOR-NEXT abfragen und einer Union(Range) hinzufügen. Am ende alle betroffenen Zeilen auf einen Schlag lösen. Schneller als 1, etwas unübersichtlicher.
3) Den super-schnellen Workaround mit der Hilfsspalte nehmen. Der Trick ist, dass die WENN-Formel bei erfüllten Bedingungen #DIV0! ergibt (da sie versucht, 1 durch null zu rechnen). Gelöscht werden alle Zeilen, in denen #DIV0! steht. Da die Zeilen im Arbeitsblatt selbst (per Formel) zusammengesucht werden und alle Fehlerhaften Zellen auf einen Schlag markiert werden können, ist diese Variante rasend schnell.
Ausserdem hast du die Formellösung bereits selbst gegeben und ich musste nicht mehr nachdenken :-)
Wenn du auf die Hilfsspalte verzichten willst / musst, wähle Variante 1 oder 2 und frage die Bedingungen in VBA ab. Wie das geht weiss ich aber nicht, ich bin selbst eher der Formelmensch.
Schlimmstenfalls verschieb die Hilfsspalte nach Z oder sogar nach IV ....
Grüße,
Klaus M.vdT.
Anzeige
AW: Fehlerbehandlung
17.08.2010 16:34:06
Stefan
Hallo Klaus
Ich weiss leider nicht wie man das mit der For-Next-Schlaufe bewältigen kann.
Vielleicht weiss ja jemand, wie man das auf diese Weise lösen kann.
Gruss
Stefan

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige