Anzeige
Archiv - Navigation
1404to1408
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
Zeile löschen wenn Bedingung erfüllt
21.01.2015 11:41:40
Christian
Hallo zusammen,
ich würde eine Änderung an meinem Makro haben. Leider habe ich keine Ahnung wie ich das machen soll.
Mit dem Modul mdl_loeschen, was über die Schaltfläche Löschen gestartet wird. werden alle Zeilen gelöscht welche ein Häckchen in Spalte W haben.
Hier der Code:
Sub Loeschen()
Application.ScreenUpdating = False
Dim rngZelle As Range
Dim i As Integer
For i = 1 To 3 '3 Versuche
If InputBox("Das LÖSCHEN der Aufträge ist nur mit Passwort möglich - 24568") = "24568"  _
Then
Dim intBlatt As Integer
Dim lngZeile As Long
For intBlatt = 1 To 1 ' nur in der ersten Tabelle löschen ***
With Sheets(intBlatt)
loLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp). _
Row, Rows.Count)
For lngZeile = loLetzte To 5 Step -1 ' Löschen in Zeile 5 bis 1000 ***
If .Cells(lngZeile, "W") = "a" Then ' Suchen in Spalte W nach "a" ***
.Rows(lngZeile).Delete
End If
Next
End With
Next
Exit For
Else
MsgBox "Falsches Passwort"
End If
If i = 3 Then Exit Sub
Next
Application.ScreenUpdating = True
End Sub
Neu 1:
Es soll erst gelöscht werden wenn alle Positionen des Auftrags ein Häckchen in Spalte W haben.
Beispiel:
Der Auftrag 10122 darf noch nicht gelöscht werden, weil einige positionen noch keinen Hacken in Spalte W haben. Der Auftrag 11075 darf aber gelöscht werden. Es haben beide Positionen ein Hacken in Spalte W.

Neu 2: (Wenn möglich lieber diese Möglichkeit)
Nach klicken der Schaltfläche muss man die Auftragsnummer eingeben, welche man löschen will. Es muss dann geprüft werden ob alle Positionen einen Hacken in Spalte W haben. Wenn die der Fall ist soll eine Meldeung kommen "Auftrag gelöscht". Wenn nicht alle Positionen ein Hacken in Spalte W haben muss einen Meldung kommen das der Auftrag noch nicht komplett erledigt ist.
Die Musterdatei ist hier:
https://www.herber.de/bbs/user/95138.xlsm
Vielen Dank

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 12:00:33
Rudi
Hallo,
                    For lngZeile = loLetzte To 5 Step -1 ' Löschen in Zeile 5 bis 1000 ***
If WorksheetFunction.CountIf(Columns(2), Cells(lngZeile, 2)) =  _
WorksheetFunction.CountIfs(Columns(2), Cells(lngZeile, 2), Columns(23), Cells(lngZeile, 23)) Then
.Rows(lngZeile).Delete
End If
Next
Gruß
Rudi

AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 12:52:50
Daniel
Hi
eine Bitte: was du da in Spalte W stehen hast, sind Haken und keine Hacken.
Hacken hasst du an den Füssen oder ggf im Keller bei den Gartengeräten.
ich würde hier in einer Hilfsspalte per Formel die Zellen markieren, die gelöscht werden können.
bei kleineren Datenmengen kommt hierzu in Zelle X5 bis zum Tabellenende:
=WENN(ZÄHLENWENN(B:B;B5)=ZÄHLENWENNS(B:B;B5;W:W;"a");WAHR;0)
bei wenn die Tabelle nach Auftragsnummer sortiert ist, kannst du so den Rechenaufwand reduzieren:
=WENN(B4=B5;X4;WENN(ZÄHLENWENN(B:B;B5)=ZÄHLENWENNS(B:B;B5;W:W;"a");WAHR;0))
beim Löschen kannst du dann alle Zeilen löschen die in Spalte X mit WAHR gekennzeichnet sind.
das geht per Code so:
If Worksheetfunction.CountIf(Range("X:X"), True) > 0 Then
Range("X:X").SpecialCells(xlcelltypeformulas, 4).EntireRow.Delete
End If
wenn die Hilfsspalte beim normalen Umgang mit der Tabelle stört, kannst du sie auch per Code temporär einfügen.
Sieht als GesamtCode dann so aus (Tabelle nach Auftrag sortiert):
Sub LöschenX()
With ActiveSheet.Range("X5:X" & Cells(Rows.Count, 1).End(xlUp).Row)
.FormulaR1C1 = _
"=IF(RC2=R[-1]C2,R[-1]C,IF(CountIf(C2,RC2)=CountIfs(C2,RC2,C[-1],""a""),True,""""))"
.Formula = .Value
If WorksheetFunction.CountIf(.Cells, True) > 0 Then
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
End If
.ClearContents
End With
End Sub

gruß Daniel

Anzeige
OT: im Keller bei den Gartengeräten ...
21.01.2015 13:18:08
Klaus
... habe ich nur Harken stehen, aber keine Hacken. Da habe ich einen Haken hinter gemacht, die werde ich nie brauchen.
:-)
Grüße,
Klaus M.vdT.

im Keller bei den Gartengeräten ...
21.01.2015 21:15:30
Uduuh
Hallo,
... hab ich auch die ein oder andere Hacke. Also Hacken. ;-)
In der Tabelle sehe ich aber nur Haken.
Gruß aus’m Pott
Udo

AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 13:33:40
Christian
Danke Daniel,
ich habe einen Fehler gemacht.
Es ist nicht Spalte W. es ist Spalte X.
Könntest du mir das nochmal umbauen.
Danke

AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 13:41:57
Daniel
Hi
im Code das W durch ein X zu ersetzen und ein X durch ein Y, sollte dich nicht überfordern.
in der Formel ist der Zellbezug auf die Spalte mit dem Haken relativ ausgelegt, Formel muss immer in die Spalte direkt rechts neben der Spalte mit dem Haken eingefügt werden. Wenn das gegeben ist, spielt es keine Rolle in welcher Spalte der Haken und die Formel stehen.
Gruß Daniel

Anzeige
AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 13:48:11
Christian
Hallo Daniel,
ich meinte nicht die Formel. Für die Formel habe ich erst wieder in Spalte AD Platz.
Ich würde daher lieber das nutzen:
Sub LöschenX()
With ActiveSheet.Range("X5:X" & Cells(Rows.Count, 1).End(xlUp).Row)
.FormulaR1C1 = _
"=IF(RC2=R[-1]C2,R[-1]C,IF(CountIf(C2,RC2)=CountIfs(C2,RC2,C[-1],""a""),True,""""))"
.Formula = .Value
If WorksheetFunction.CountIf(.Cells, True) > 0 Then
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
End If
.ClearContents
End With
End Sub
Dort kann ich natürlich das X durch ein W ersetzen. Aber ich kenne mich mit diesem noch nicht aus:
      .FormulaR1C1 = _
"=IF(RC2=R[-1]C2,R[-1]C,IF(CountIf(C2,RC2)=CountIfs(C2,RC2,C[-1],""a""),True,""""))"
Es wäre sehr lieb wenn du mir helfen kannst.
Danke

Anzeige
AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 14:07:09
Daniel
HI
ich meinte schon die Formel in diesem Makro.
die Formel muss in die erste Freie Spalte am Tabellenende.
der zellbezug auf die Spalte mit dem Häkchen ist hier (FETT)
"=IF(RC2=R[-1]C2,R[-1]C,IF(CountIf(C2,RC2)=CountIfs(C2,RC2,C[-1],""a""),True,""""))"
das C[-1] bedeutet hier einen relativen zellbezug um eine Spalte nach links versetzt.
dh die Spalte mit den Häkchen muss direkt links neben der Spalte mit der Formel liegen.
ist der Abstand grösser, musst du die 1 eben anpassen.
alternativ kannst du natürlich auch die Spaltennummer absolut eingeben, dann folgt nach dem C (für Column) direkt die Spaltennummer (ohne Klammer), als Beispiel siehst du ja den Zellbezug auf die spalte B (2) für die Auftragsnummer.
dh wenn die Haken in Spalte X stehen kannst du hier auch C24 einsetzen, dann ist es auch egal, in welcher Spalte die Formel steht, weil du hier einen absoluten Zellbezug auf die Spalte verwendest.
Gruß Daniel
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige