Microsoft Excel

Herbers Excel/VBA-Archiv

Jede xte Zeile löschen, wenn alle 0 sind

Betrifft: Jede xte Zeile löschen, wenn alle 0 sind von: Julia
Geschrieben am: 03.10.2020 15:03:46

Hallo zusammen,

das ist mein erster Beitrag hier und ihr habt mir schon oft bei meinen VBA Problemen geholfen. Mein jetziges habe ich aber leider nirgends gefunden.

Meine Werte sehen als Minmalbeispiel so aus, in Wirklichkeit deutlich mehr Zeilen und Spalten:

1 1 1 1
1 1 1 1
0 0 0 0
0 0 0 0
1 1 1 1
<b>0 0 0 0</b>
0 0 0 0
0 0 0 0
-->
1 1 1 1
1 1 1 1
1 1 1 1
<b>0 0 0 0</b>

Mein Ziel ist es, Zeilen in denen nur Nullen stehen zu löschen, falls die 0er Zeilen in jeder x-ten Zeile vorkommen. In diesem Fall würde dies bedeuten, dass die Zeilen 3 und 4 gelöscht würden, weil die Zeilen 7 und 8 ebenfalls 0er Zeilen sind, die Spalte 6 aber eben nicht (da die zweite Zeile keine 0 ist).

Ich habe schon viel rumprobiert, komme aber nicht auf richitge Ergebnis.
Mein Ansatz:

Sub Zeilenlöschen()
Dim ws As Worksheet

Set ws = Worksheets(1)

ls = ws.Cells(1, wsQ.Columns.Count).End(xlToLeft).Column
lz = ws.Cells(wsQ.Rows.Count, 1).End(xlUp).Row

For i = 1 To lz
If Application.CountIf(Range(Cells(i, 1), Cells(i, ls)), 0) = 4 Then
'hier soll dann jede weitere xte Zeile überprüft werden, ob sie alle 0 sind und wenn ja gelöscht werden

Vielen Dank für eure Hilfe!

Betrifft: AW: Jede xte Zeile löschen, wenn alle 0 sind
von: Hajo_Zi
Geschrieben am: 03.10.2020 15:11:24

Benutze Autofilter und lösche den sichtbaren Bereich, Start, Bearbeiten, Suchen..., Gehe zu, Inhalte, sichtbare Zellen.
Excel hat auch einen Makrorecorder.

GrußformelHomepage

Betrifft: AW: Jede xte Zeile löschen, wenn alle 0 sind
von: Günther
Geschrieben am: 03.10.2020 18:19:01

Moin,
ich bin mir nicht sicher, ob die vorgeschlagene Lösung zielführend ist …
In dem Fall wäre eine mathematische Definition des Begriffs/Wertes "x" hilfreich, und mich stört enorm die (wahrscheinlich vorgesehene) Fett-Formatierung, sprich der HTML-Code dafür.
 
Gruß
Günther  |  mein Excel-Blog

Betrifft: AW: Jede xte Zeile löschen, wenn alle 0 sind
von: Julia
Geschrieben am: 04.10.2020 10:37:11

Hallo Günther,

In diesem Fall bedeutet x = 4. Also ob in jeder vierten Zeile alle Werte 0 sind. Wenn ja, sollen alle diese Zeilen gelöscht werden. Im obigen Beispiel also Zeilen 3 und 7, 4 und 8. Zeile 6, die ja ebenfalls eine 0er Zeile ist, bleibt aber bestehen, da eben Zeile 2 keine ist.

1 1 1 1 1
2 1 1 1 1
3 0 0 0 0
4 0 0 0 0
5 1 1 1 1
6 0 0 0 0
7 0 0 0 0
8 0 0 0 0
wird zu

1 1 1 1 1
2 1 1 1 1
5 1 1 1 1
6 0 0 0 0

Ja, die Fett-Formatierung hatte aus irgendeinem Grund nicht funktioniert, sorry!

Grüße Julia

Betrifft: AW: Jede xte Zeile löschen, wenn alle 0 sind
von: Günther
Geschrieben am: 04.10.2020 12:04:43

Moin Julia,
ich denke, dass ich jetzt besser verstanden habe, was du erreichen willst.

Und falls keine der angebotenen Lösungen passt: ich würde das mit Power Query lösen. Meine beispielhafte Lösung bzw. einen Link bekommst du und (fast) jeder Anfragende per E-Mail (bitte auch den User-Namen mit angeben). Natürlich kostenlos, solange du nicht weitere Wünsche äußerst.

Damit ich auch weiß, worum es geht: Anfragen bitte mit dem Stichwort "Julias x=4 Filter" per Mail an mich (mein Name ist der Link zur Mail-Adresse). Und wenn du es nicht ausdrücklich das Gegenteil wünscht, werde ich deine Mail-Adresse sofort wieder löschen. Ich möchte keine Mailadressen behalten sondern dein Vertrauen!

Nur das Ergebnis (zur Evaluierung, ob es sich lohnt): https://my.hidrive.com/lnk/frAmj6TX (meine DE-Cloud).

 
Gruß
Günther  |  mein Excel-Blog

Betrifft: AW: Jede xte Zeile löschen, wenn alle 0 sind
von: Daniel
Geschrieben am: 03.10.2020 20:16:08

hi

kannst du mal genauer beschreiben, wann genau gelöscht werden soll?
so wie ich das beispiel deute, soll jede 3. Nullzeile gelöscht werden wobei die 3 auch variabel sein kann.

ich würde hier mit formeln und Hilfsspalten arbeiten, um in einem ersten schritt die zu löschenden Zeilen zu markieren und dann zu löschen.

1. formel für E1 bis Ende. diese Formel kennzeichnet die Null-Zeilen mit 1:
 =1*(zählenWenn($a1:d1;"<>0")=0)

2a. in f1 die formel:
=e1

2b. formel ab F2 bis ende, diese Formel zählt die Nullzeilen hoch:
=e2+f1

3a.in die Zelle G1 kommt die 0
3b. ab Zelle G2 bis ende diese Formel, sie kennzeichnet die zu löschenden Zeilen mit 0 und die anderen mit der Zeilennummer.
=wenn(und(e2=1;rest(f2;3)=0);0;zeile())
wenn man das soweit hat kann man die mit 0 gekennzeichneten Zeilen einfach über
daten - datentools - duplikate entfernen löschen. dabei die option "keine Überschrift" verwenden.

dann löscht man die Hilfsspalten wieder.

probiers erstmal von Hand aus, wenn es funktioniert und du es verstanden hast, programmierst du einfach diese Schritte in VBA nach.
das ist der einfachste und schnellste Weg um in großen Listen sehr schnell viele Zeilen mit bedingung zu löschen
außrdem hilft der Recorder beim erstellen des codes.

gruß Daniel

Betrifft: AW: Jede xte Zeile löschen, wenn alle 0 sind
von: Julia
Geschrieben am: 04.10.2020 10:48:59

Hallo Daniel,



Danke für deine Antwort. Ich glaube, ich habe mich nicht deutlich genug ausgedrückt. Ich möchte schauen, ob es in jeder vierten Zeile eine 0er Zeile gibt und wenn das für ALLE vierten Zeile gilt, dann sollen sie alle gelöscht werden:

also im ersten schritt würden Zeilen 1 und 5 überprüft werden -- nur 0er Zeilen? Nein! -- keine Zeilen löschen.

Nächster Schritt sind Zeilen 2 und 6 -- Beides 0er Zeilen? Nein -- Nichts löschen.

Nächster Schritt sind Zeilen 3 und 7 -- Beides 0er Zeilen? Ja! -- Beide Zeilen löschen

usw.



Ich hoffe, so wird es etwas deutlicher.



Ich habe deine Methode ausprobiert, sie kommt aber leider nicht zum richtigen Ergebnis.



Danke und Gruß

Julia

Betrifft: AW: Jede xte Zeile löschen, wenn alle 0 sind
von: Daniel
Geschrieben am: 04.10.2020 11:15:47

In dem Fall reichen dir zwei Hilfsspalten und das Formelwerk wäre:

In Spalte E wieder:
=1*(zählenWenn($a1:d1;"<>0")=0)
In Spalte F von F1 bis F4:
=Wenn(und(F1;F5);0;Zeile())

Ab F5 dann
=Wenn(Oder(und(F1;F5);und(F5;F9));0;Zeile())

Dann das Duplikateentfernen mit Spalte F als Kriterium.
Gruß Daniel

Betrifft: AW: Jede xte Zeile löschen, wenn alle 0 sind
von: GerdL
Geschrieben am: 03.10.2020 22:13:47

Moin Julia!
Sub Unit()

    Dim rngDel As Range, C As Range, Z As Long
    
    
    Set rngDel = Rows(Rows.Count)
    
    For Each C In Cells(1).CurrentRegion.Rows
    
        If Application.Sum(C) = 0 Then
            Z = Z + 1
            If Z = 3 Then
                Set rngDel = Union(rngDel, Rows(C.Row))
                Z = 0
            End If
        End If
    
    Next
    
    rngDel.Delete
    Set rngDel = Nothing


End Sub

Gruß Gerd

Betrifft: AW: Jede xte Zeile löschen, wenn alle 0 sind
von: Julia
Geschrieben am: 04.10.2020 10:55:39

Hallo Gerd,

danke für deine Lösung! Ich habe den anderen nochmal genauer geschrieben, wie ich das gemeint hatte.
Ich verstehe deine Lösung aber kann sie leider nicht auf mein Problem ummünzen..

Danke und Grüße
Julia