VBA-Makro-Beispiele für den Excel-Alltag
Die folgenden Makros lösen typische Alltagsaufgaben und lassen sich direkt in ein leeres Modul kopieren. Passe Bereichs- und Blattnamen an deine Datei an.
Leere Zeilen in einem Bereich löschen
Löscht alle komplett leeren Zeilen innerhalb der Spalten A bis D, von unten nach oben – wichtig, damit sich die Zeilennummern beim Löschen nicht verschieben:
Sub LeereZeilenLoeschen()
Dim i As Long
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Application.CountA(Range("A" & i & ":D" & i)) = 0 Then
Rows(i).Delete
End If
Next i
End Sub
Zellen bedingt formatieren (per Code statt Regel)
Markiert alle Umsätze über 100 € in Spalte B fett und grün – nützlich, wenn das Ergebnis fest in die Zelle geschrieben statt als bedingte Formatierung hinterlegt werden soll:
| A | B | |
|---|---|---|
| 1 | Kunde | Umsatz |
| 2 | Müller GmbH | 148,00 € |
| 3 | Schmidt KG | 72,00 € |
| 4 | Weber & Co. | 205,50 € |
Sub UmsatzUeber100Markieren()
Dim z As Long, letzteZeile As Long
letzteZeile = Cells(Rows.Count, 2).End(xlUp).Row
For z = 2 To letzteZeile
If Cells(z, 2).Value > 100 Then
Cells(z, 2).Font.Bold = True
Cells(z, 2).Font.Color = RGB(33, 115, 70)
End If
Next z
End Sub
Aktives Blatt als PDF speichern
Speichert das aktuelle Tabellenblatt als PDF im selben Ordner wie die Arbeitsmappe, mit Dateiname wie das Blatt:
Sub AlsPDFSpeichern()
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\" & ActiveSheet.Name & ".pdf"
End Sub
Alle Arbeitsblattnamen auflisten
Schreibt die Namen aller Tabellenblätter der Arbeitsmappe untereinander ab Zelle A1 eines neuen Blatts – praktisch als Inhaltsübersicht bei vielen Blättern:
Sub BlattnamenAuflisten()
Dim ws As Worksheet, i As Long
i = 1
For Each ws In ThisWorkbook.Worksheets
Cells(i, 1).Value = ws.Name
i = i + 1
Next ws
End Sub
Meldungsfenster mit aktuellem Datum
Ein einfaches, aber nützliches Beispiel für Nutzerdialoge – zeigt eine Meldung mit dem heutigen Datum:
Sub HeutigesDatumAnzeigen()
MsgBox "Heute ist der " & Format(Date, "dd.mm.yyyy")
End Sub
Lass dir ähnliche Abläufe erst vom Makrorekorder aufzeichnen und passe den Code danach an eigene Schleifen und Bedingungen an – das geht meist schneller, als alles von Grund auf selbst zu tippen.
Häufige Fehler
- Von oben statt unten löschen – wer Zeilen in einer aufsteigenden Schleife löscht, überspringt dabei Zeilen, weil sich die Nummerierung verschiebt.
- Feste Zeilenanzahl statt letzte Zeile ermitteln –
End(xlUp).Rowpasst sich automatisch an, eine fest eingetragene Zahl bricht bei mehr oder weniger Daten. - Pfad bei ExportAsFixedFormat falsch – ohne gültigen Ordnerpfad meldet Excel einen Laufzeitfehler.