Effizientes Einfügen neuer Datensätze in formatierte Excel-Tabellen mit Excel VBA (Makros)

Melden

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

  1. Markiere deinen Datenbereich (z. B. A1 bis C1 mit den Überschriften "Vorname", "Nachname", "Alter").
  2. Drücke Strg + T, um daraus eine Tabelle zu machen.
  3. 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

  1. Drücke Alt + F11, um den VBA-Editor zu öffnen.
  2. Gehe auf Einfügen -> Modul.
  3. 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:

  1. Gehe in Excel auf das Register Einfügen -> Illustrationen -> Formen.
  2. Zeichne ein Rechteck (oder einen Button).
  3. Mache einen Rechtsklick auf die Form und wähle Makro zuweisen.
  4. Wähle DatensatzHinzufuegen aus 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.

0