Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

EXCEL 2016 - VBA - Zeilen abhängig von einer bestimmten Bedingung löschen

139 views
Skip to first unread message

Hakan Kaya

unread,
May 24, 2018, 2:45:40 AM5/24/18
to
Hallo geschätztes Forum

Ich habe eine Tabelle in der abhängig von mehreren unterschiedlichen Bedingungen in Spalte 7 (G) Zeilen gelöscht werden sollen
Bedingungen heißen "H03" oder "LSH"

Zeilen also bei denen in Spalte 7 ein H03 oder LSH eingetragen ist sollen per Klick auf einen Button automatisch gelöscht werden.

Im Netz habe ich bisher diesen Code gefunden. Leider passiert trotz der Anpassungen die ich bisher vorgenommen habe nichts. Für Hilfe zur Lösung wäre ich sehr dankbar.


Sub bedingte_Zeilenloeschung()

'** Ermittlung der letzten Zeile in Spalte g

lz = Cells(Rows.Count, 7).End(xlUp).Rows.Row

'** Durchlauf aller Zeilen

For t = lz To 2 Step -1 'Zählung rückwärts bis Zeile 2

'Abfragen, ob in der ersten Spalte der Eintrag "H03" steht

If Cells(t, 7).Value = "H03" Then
If Cells(t, 7).Value = "LSH" Then

Rows(t).Delete Shift:=xlUp

End If

Next t

End Sub


Mit freundlichen Grüßen
Hakan

Thomas Kühn

unread,
May 24, 2018, 9:14:37 AM5/24/18
to
Moin Hakan,
versuchs mal so:

Sub bedingte_Zeilenloeschung()
Dim lz As Long
'** Ermittlung der letzten Zeile in Spalte g
lz = Cells(Rows.Count, 7).End(xlUp).Rows.Row

'** Durchlauf aller Zeilen
For t = lz To 2 Step -1 'Zählung rückwärts bis Zeile 2
'Abfragen, ob in der ersten Spalte der Eintrag "H03" steht
If Cells(t, 7).Value = "H03" Or Cells(t, 7).Value = "LSH" Then

Thomas Kühn

unread,
May 24, 2018, 9:18:14 AM5/24/18
to
Noch kurze ergänzt zur Erklärung:

Hier fragst Du nach, ob in (t,7) der Wert "H03" steht.
> If Cells(t, 7).Value = "H03" Then

Wenn das der Fall ist, dann fragst Du nun, ob in der gleichen Zelle
der Wert "LSH" steht. Das kann natürlich nicht sein.
> If Cells(t, 7).Value = "LSH" Then
>
> Rows(t).Delete Shift:=xlUp
>
> End If

Hier fehlt dann syntaktisch noch das End If, somit bekommst Du
hier sicher einen Syntaxfehler beim Kompilieren.

>
> Next t
>
> End Sub
>
>

Gruß Thomas

Hakan Kaya

unread,
May 24, 2018, 11:50:57 AM5/24/18
to
Hallo Thomas

So funktioniert es jetzt. Zeilen in denen denen die bestimmten Werte H03 bzw. LSH in Spalte 7 (G) vorkommen werden jetzt zuverlässig gelöscht. Eine Frage hätte ich dennoch.
Kann ich die Liste der Bedingungen (also H03, LSH) unendlich weiterführen ohne das der Code anderweitig ergänzt werden muss.

Ich meine ich könnte dann einfach den Codebestandteil

"Or Cells(t, 7).Value = "LSH" Then"
an die entsprechende Codezeile anfügen oder? :-)

Ich danke Dir vielmals :-)
Gruß
Hakan

Claus Busch

unread,
May 24, 2018, 12:36:46 PM5/24/18
to
Hallo Hakan,

Am Thu, 24 May 2018 08:50:56 -0700 (PDT) schrieb Hakan Kaya:

> So funktioniert es jetzt. Zeilen in denen denen die bestimmten Werte H03 bzw. LSH in Spalte 7 (G) vorkommen werden jetzt zuverlässig gelöscht. Eine Frage hätte ich dennoch.
> Kann ich die Liste der Bedingungen (also H03, LSH) unendlich weiterführen ohne das der Code anderweitig ergänzt werden muss.
>
> Ich meine ich könnte dann einfach den Codebestandteil
>
> "Or Cells(t, 7).Value = "LSH" Then"
> an die entsprechende Codezeile anfügen oder? :-)

du kannst die Werte, nach denen gelöscht werden soll in ein Array
eingeben, nach diesem Array filtern und die sichtbaren Zeilen auf einen
Rutsch löschen. Wenn sich die Werte zum Löschen ändern, musst du nur das
Array ändern:

Sub ZeilenLöschen()
Dim varDaten As Variant
Dim LRow As Long

'Hier die Werte eingeben, bei denen gelöscht werden soll
varDaten = Array("LSH", "H03", "B04", "C05")

With ActiveSheet
LRow = .Cells(.Rows.Count, 1).End(xlUp).Row
'Hier Bereich anpassen
.Range("A1:Z" & LRow).AutoFilter Field:=7, _
Criteria1:=varDaten, Operator:=xlFilterValues
.Range("A2:A" & LRow).SpecialCells(xlCellTypeVisible) _
.EntireRow.Delete
.AutoFilterMode = False

End With
End Sub


Mit freundlichen Grüßen
Claus
--
Windows10
Office 2016

Hakan Kaya

unread,
May 24, 2018, 2:47:45 PM5/24/18
to
Hallo Claus,

so werde ich das machen. Tausend Dank Dir und Thomas :-)

Hakan Kaya

unread,
May 25, 2018, 1:02:20 AM5/25/18
to
Hallo Claus

Beim testen der bedingten Löschung von Zeilen ist mir aufgefallen, das die Bedingungen "H03" "LSH" und andere auch in der Spalte 8 (H) auftreten können. Nun habe ich gedacht ich könnte in die folgende Codezeile einfach noch ne 8 dranhängen, nach dem Komma. Ich musste feststellen, dass es dann doch nicht so einfach geht, die Suche auf die Spalte 8 (H) auszuweiten. Was kann ich machen, um die Suche auf die Spalte 8 auszuweiten?


Range("A1:Z" & LRow).AutoFilter Field:=7, _

Mit freundlichen Grüßen
Hakan

Claus Busch

unread,
May 25, 2018, 3:42:02 AM5/25/18
to
Hallo Hakan,

Am Thu, 24 May 2018 22:02:18 -0700 (PDT) schrieb Hakan Kaya:

> Beim testen der bedingten Löschung von Zeilen ist mir aufgefallen, das die Bedingungen "H03" "LSH" und andere auch in der Spalte 8 (H) auftreten können. Nun habe ich gedacht ich könnte in die folgende Codezeile einfach noch ne 8 dranhängen, nach dem Komma. Ich musste feststellen, dass es dann doch nicht so einfach geht, die Suche auf die Spalte 8 (H) auszuweiten. Was kann ich machen, um die Suche auf die Spalte 8 auszuweiten?
>
> Range("A1:Z" & LRow).AutoFilter Field:=7, _

dann probiere es so:

Sub ZeilenLöschen()
Dim varDaten As Variant
Dim LRow As Long
Dim i As Integer

'Hier die Werte eingeben, bei denen gelöscht werden soll
varDaten = Array("LSH", "H03", "B04", "C05")

With ActiveSheet
LRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 7 To 8
'Hier Bereich anpassen
.Range("A1:Z" & LRow).AutoFilter Field:=i, _
Criteria1:=varDaten, Operator:=xlFilterValues
.Range("A2:A" & LRow).SpecialCells(xlCellTypeVisible) _
.EntireRow.Delete
.ShowAllData
Next

Claus Busch

unread,
May 25, 2018, 5:34:20 AM5/25/18
to
Hallo nochmals,

Am Thu, 24 May 2018 22:02:18 -0700 (PDT) schrieb Hakan Kaya:

> Beim testen der bedingten Löschung von Zeilen ist mir aufgefallen, das die Bedingungen "H03" "LSH" und andere auch in der Spalte 8 (H) auftreten können. Nun habe ich gedacht ich könnte in die folgende Codezeile einfach noch ne 8 dranhängen, nach dem Komma. Ich musste feststellen, dass es dann doch nicht so einfach geht, die Suche auf die Spalte 8 (H) auszuweiten. Was kann ich machen, um die Suche auf die Spalte 8 auszuweiten?

wenn die zu filternden Spalten nicht nebeneinander liegen, kannst du die
Spalten auch in ein Array schreiben:

Sub ZeilenLöschen()
Dim varDaten As Variant, varFilter As Variant
Dim LRow As Long
Dim i As Integer

'Hier die Werte eingeben, bei denen gelöscht werden soll
varDaten = Array("LSH", "H03", "B04", "C05")
'Hier die zu filternden Spalten eingeben
varFilter = Array("G", "H", "K")

With ActiveSheet
LRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = LBound(varFilter) To UBound(varFilter)
'Hier Bereich anpassen
.Range("A1:Z" & LRow).AutoFilter
Field:=Columns(varFilter(i)).Column, _
Criteria1:=varDaten, Operator:=xlFilterValues
.Range("A2:A" & LRow).SpecialCells(xlCellTypeVisible) _
.EntireRow.Delete
.ShowAllData
Next

Hakan Kaya

unread,
May 25, 2018, 10:09:52 AM5/25/18
to
Hallo Claus,

beide Deiner Vorschläge funktionieren in meinem Fall. Vielen lieben Dank :-)
0 new messages