VBA Tool zum löschen von Zeilenblöcken
09.03.2025 21:02:38
Phylosoraptor
Ich bin neu im Forum (und auch in der VBA Programmierung). Nachdem ich einen VBA Grundkurs absolviert habe, konnte ich bereits einige Erfolge erzielen. Allerdings bringt mich mein aktuelles Projekt an meine Grenzen. Aber vielleicht könnt ihr mir weiterhelfen und guten Input geben :)
Eine ausführliche Google Suche konnte mir leider keine befriedigenden Ergebnisse liefern.
Was soll das Makro können?
Es liegen mehrere Excel Sheets vor. Diese enthalten Zeilen mit mehreren Spalten an Daten. In der letzten Spalte sind die relevanten Daten für das Makro. Es gibt in unregelmäßigen Abständen Zeilenblöcke, in denen der Wert der letzten Spalte 0 ist.
Das Makro soll diese Zeilenblöcke erkennen und löschen.
Der Haken: Die ersten beiden und letzten beiden Zeilen dieser Blöcke sollen bestehen bleiben. Bonusfunktion: manchmal schleichen sich Zahlen im einstelligen Bereich in diese Nullblöcke. Die soll das Tool nach Möglichkeit übergehen und mit löschen.
Das Grundprinzip habe ich mir so gedacht:
- Gesamtlänge des Dokuments bestimmen
- Mit for Schleife von unten nach oben durchgehen
- sobald 0 auftaucht: Anfangspunkt des Blocks setzen
- sobald größer 0: Endpunkt des Blocks setzen
- Block löschen, wenn größer als 4 Zeilen und die ersten beiden und letzten beiden Zeilen behalten
- weiter loopen bis in Zeile 2 angekommen
Das ist aktuelle Schlachtfeld in meinem VBA Modul. Da ist noch sehr viel abstrakter Code drinnen.
Sub Nullwerte_loeschen()
Dim i As Integer 'Bereich in dem Loop läuft
Dim eingabe_user As String
Dim firstrow As Integer 'Erste Reihe des Blocks
Dim lastrow As Integer 'Endreihe des Blocks
Dim finalRow As Integer 'Gesamtlänge des Arbeitsblattes für Start des Check-Loops
Dim ws As Worksheet
'Messagebox mit Erklärung des Makros und Frage nach Ausführung
eingabe_user = MsgBox("Dieses Makro löscht alle Nullwerte. Bitte beachte, dass dies für die aktive Mappe und das aktive Blatt gilt! Möchtest du dieses Makro Ausführen?", vbOKCancel, "Löschen aller Nullwerte")
'start des Hauptloops
If eingabe_user = vbOK Then
Set ws = ThisWorkbook.ActiveSheet 'Arbeitsblatt und Arbeitsmappe definieren (aktive Mappe mit aktiven Blatt wird gewählt)
finalRow = Cells(65000, 1).End(xlUp).Row 'Gesamtlänge der Tabelle ermitteln
For i = finalRow To 2 Step -1 'starten des Check-Loops
If ws.Cells(i, 10).Value > 2 Then 'Hier ist ein Fehler!
firstrow = i 'Startpunkt des Blocks wird gespeichert (Aktuell wird jede Zeile gespeichert, oder keine)
'Elseif wert über 2 then
'lastrow bestimmen
'block löschen
Rows(firstrow & ":" & lastrow).EntireRow.Delete
'var reseten und weiter hochgehen
End If
Next i
MsgBox "Makro läuft"
Else
MsgBox "Fehler! Makro wird abgebrochen"
End If
End Sub
Lasst uns gerne über eure Ideen und Ansätze diskutieren! Ich freue mich auf euer Feedback.
Anzeige