VBA Zeilen löschen
#1
Hallo,

in meinem Excel File habe ich drei Tabellen, die immer vorhanden sind. (Bestellung, Bestand und EK)
Während der Arbeit mit der Datei können zusätzlich weitere Tabellenblätter hinzugefügt werden.
Diese haben immer einen unterschiedlichen Namen.
Für all diese Tabellen, die zusätzlich erzeugt werden sind Werte in den Spalten A, B und C vorhanden. Sollte in Spalte B eine 0 vorhanden sein, möchte ich, dass die gesamte Zeile entfernt wird.

Über Tipps wäre ich sehr dankbar.


Angehängte Dateien
.xlsx   VBA Zeilen löschen.xlsx (Größe: 11,58 KB / Downloads: 6)
Antworten Top
#2
So
Code:
Sub Zeilen_loeschen()
Dim i As Long
Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
   If ws.Name <> "Bestellung" And ws.Name <> "Bestand" And ws.Name <> "EK" Then
       For i = 1 To ws.Cells(Rows.Count, 1).End(xlUp).Row
           If ws.Cells(i, 2) = 0 Then
               ws.Rows(i).Delete
           End If
       Next i
   End If
Next ws

End Sub
Schöne Grüße
Berni
Antworten Top
#3
Hallo Berni,

der Code grundsätzlich funktioniert.
Nun müsste ich allerdings, wenn in einer Tabelle mehrere 0 vorhanden sind für jede einzelne das Makro starten.

Ist es auch möglich, dass alle auf einmal gelöscht werden ?

Danke dir schon einmal für die Hilfe
Antworten Top
#4
Nein, wieso solltest du das mehrmals starten müssen? Die zweite Schleife läuft doch in jedem Tabellenblatt von Zeile 1 bis zur letzten gefüllten Zeile durch.
Aber ich bin grad auf einen Fehler draufgekommen, die zweite Schleife muss ja rückwärts laufen, sonst passt es nicht.
Code:
Sub Zeilen_loeschen()
Dim i As Long
Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
  If ws.Name <> "Bestellung" And ws.Name <> "Bestand" And ws.Name <> "EK" Then
      For i = ws.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
          If ws.Cells(i, 2) = 0 Then
              ws.Rows(i).Delete
          End If
      Next i
  End If
Next ws

End Sub
Schöne Grüße
Berni
Antworten Top
#5
Keep it simple:


Code:
Sub M_snb()
   For Each it In Sheets
     If Left(it.Name, 1) = "T" Then
       it.Columns(2).Replace 0, "=1/0", 1
       it.Columns(2).SpecialCells(-4123, 16).EntireRow.Delete
     End If
   Next
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#6
Ich danke euch beiden für die Antworten.

Der Code von misterburns funktioniert.

Der andere leider nicht.

Trotzdem euch beiden besten Dank für die Unterstützung.
Antworten Top
#7
Der andere funktioniert womöglich nicht, weil die echte Datei wahrscheinlich nicht lauter Tabellenblätter enthält, die mit "T" beginnen.
Keep it simple...
Schöne Grüße
Berni
Antworten Top
#8
Ohne representative Dateien bleibt's nur Raterei.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#9
Hallo,

sehr gerne würde ich eine Datei hochladen.
Leider sind innerhalb der Tabelle so viele Verweise auf externe Daten, die leider sensibel sind, weshalb ein hochladen unmöglich ist.
Ohne diese Formel entstehen keine Werte und es findet keine Überprüfung durch die Makros statt.
Sorry

Unabhängig davon habe ich noch eine Frage:

Ist es möglich, dass das Makro auch alle Tabellenblätter löscht, die keinen Inhalt haben und nicht Bestellung Bestand oder EK heißen?`
Bei einem zusätzlichem Makro könnte ich die Logik von MisterBurns benutzen. Aber hier erschließt sich mir null die Verknüpfung..

Viele Grüße
Antworten Top
#10
Hi,

Du könntest zusätzlich noch prüfen, ob die Blätter leer sind, z.B. mit

If WorksheetFunction.CountBlank(Cells) = 17179869184# Then
MsgBox "leer"
End If
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste