Effizientes Einfügen neuer Datensätze in formatierte Excel-Tabellen mit Excel VBA (Makros)
Dieses Tutorial zeigt dir, wie du mit Excel VBA (Makros) sauber und effizient neue Datensätze in eine formatierte Excel-Tabelle (ListObject) einfügst.
Der Vorteil einer "echten" Tabelle (Einfügen -> Tabelle) gegenüber einem normalen Zellbereich ist, dass Formatierungen und Formeln automatisch übernommen werden.
Schritt 1: Vorbereitung der Excel-Tabelle
- Markiere deinen Datenbereich (z. B. A1 bis C1 mit den Überschriften "Vorname", "Nachname", "Alter").
- Drücke
Strg + T, um daraus eine Tabelle zu machen. - Klicke in die Tabelle, gehe oben im Menü auf Tabellenentwurf und gib ihr links unter "Tabellenname" einen Namen, z. B.
TabelleKunden.
Schritt 2: Den VBA-Editor öffnen
- Drücke
Alt + F11, um den VBA-Editor zu öffnen. - Gehe auf
Einfügen->Modul. - Kopiere den folgenden Code in das Modul:
Schritt 3: Der VBA-Code
Hier ist ein Standard-Code, der eine neue Zeile am Ende der Tabelle einfügt und mit Daten füllt.
Sub DatensatzHinzufuegen()
Dim ws As Worksheet
Dim tbl As ListObject
Dim neueZeile As ListRow
' 1. Arbeitsblatt und Tabelle definieren
Set ws = ThisWorkbook.Sheets("Tabelle1") ' Name deines Tabellenblatts
Set tbl = ws.ListObjects("TabelleKunden") ' Name deiner Tabelle
' 2. Eine neue Zeile am Ende der Tabelle hinzufügen
Set neueZeile = tbl.ListRows.Add
' 3. Die Zellen der neuen Zeile füllen
' .Range(1) entspricht der ersten Spalte der Tabelle
With neueZeile
.Range(1) = "Max" ' Vorname
.Range(2) = "Mustermann" ' Nachname
.Range(3) = 30 ' Alter
End With
MsgBox "Datensatz erfolgreich hinzugefügt!", vbInformation
End Sub
Schritt 4: Daten aus Zellen übernehmen (Dynamisch)
Normalerweise möchtest du keine festen Namen im Code haben, sondern Daten aus bestimmten Eingabefeldern in deinem Excel-Sheet (z. B. aus den Zellen E2, E3 und E4) übernehmen.
Ersetze den Teil "3. Die Zellen füllen" durch diesen Code:
With neueZeile
.Range(1) = ws.Range("E2").Value
.Range(2) = ws.Range("E3").Value
.Range(3) = ws.Range("E4").Value
End With
' Optional: Eingabefelder nach dem Speichern leeren
ws.Range("E2:E4").ClearContents
Schritt 5: Den Makro einer Schaltfläche zuweisen
Damit der Nutzer das Makro einfach starten kann:
- Gehe in Excel auf das Register Einfügen -> Illustrationen -> Formen.
- Zeichne ein Rechteck (oder einen Button).
- Mache einen Rechtsklick auf die Form und wähle Makro zuweisen.
- Wähle
DatensatzHinzufuegenaus und klicke auf OK.
Profi-Tipps für den Code
- Spaltennamen statt Nummern: Wenn du viele Spalten hast, ist es sicherer, die Spalten über ihren Namen anzusprechen, falls du später Spalten verschiebst:
Dim colIndex As Integer colIndex = tbl.ListColumns("Vorname").Index neueZeile.Range(colIndex) = "Max" - Fehler abfangen: Du kannst prüfen, ob die Eingabefelder leer sind, bevor du eine neue Zeile einfügst:
If ws.Range("E2").Value = "" Then MsgBox "Bitte Vorname eingeben!" Exit Sub End If
Warum ListObject (Tabelle) statt Range?
Wenn du mit tbl.ListRows.Add arbeitest, erkennt Excel automatisch, wo die Tabelle endet. Du musst nicht mühsam mit End(xlDown) die letzte Zeile suchen. Zudem werden alle Formeln in der Tabelle automatisch in die neue Zeile kopiert.