Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Wenn Zeile nicht existiert dann einfügen

Wenn Zeile nicht existiert dann einfügen
11.08.2021 15:23:14
Emanuel
Hallo zusammen.
Ich versuche eine VBA Macro zu programmieren die mir erlaubt eine Zelle von der einen Tabelle1 zu Tabelle2 zu kopieren und vorher überprüft ob die Zelle die kopiert wird bereits in Tabelle2 vorhanden ist. Dabei soll die hinzugefügte neue Zelle in Tabelle2 unterhalb der bereits existierenden hinzugefügt werden. hier die mappe wie sie derzeit aussieht : https://www.herber.de/bbs/user/147555.htm
mein bisheriger code sieht so aus:

Sub ZeileEinfuegen()
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Dim rng As Range
Dim lngZeile As Long, lngZeileMax As Long
Dim lngZeileEinfuegen As Long
Set wsQuelle = Worksheets("Tabelle1")
Set wsZiel = Worksheets("Tabelle2")
'Letzte beschriebene Zelle in Spalte 3 von Import_user
lngZeileMax = wsQuelle.Cells(Rows.Count, 2).End(xlUp).Row
'letzte beschriebene Zelle in Spalte 2 von Datenbank
lngZeileEinfuegen = wsZiel.Cells(Rows.Count, 2).End(xlUp).Row
'Gehe durch alle Eingaben von Import_user
For lngZeile = 2 To lngZeileMax
'Ist der Eintrag bereits in der Datenbank enthalten?
Set rng = wsZiel.Columns(2).Find(What:=wsQuelle.Cells(lngZeile, 2).Value, LookAt:=xlWhole)
'Wenn der datensatz nicht vorhanden ist,...
If rng Is Nothing Then
'dann in die nächste Zeile
lngZeileEinfuegen = lngZeileEinfuegen + 1
'und füge den Inhalt ein.
wsZiel.Cells(lngZeileEinfuegen, 1).Value = wsQuelle.Cells(lngZeile, 3).Value
End If
Next
End Sub
>
Danke schonmal im Voraus für eure hilfe.
mfg
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn Zeile nicht existiert dann einfügen
11.08.2021 16:23:45
Werner
Hallo,
der Link funktioniert nicht (zumindest bei mir)
Im Code ist einiges mißverständlich:

'Letzte beschriebene Zelle in Spalte 3 von Import_user
lngZeileMax = wsQuelle.Cells(Rows.Count, 2).End(xlUp).Row
du schreibst letzte beschriebene Zelle in Spalte 3 - ermittelst die dann aber in Spalte 2 ?
im Zielblatt ermittelst du die letzte beschriebene Zelle in Spalte 2

lngZeileEinfuegen = wsZiel.Cells(Rows.Count, 2).End(xlUp).Row
anschließend schreibst du die Daten dann aber in Spalte 1 ?

wsZiel.Cells(lngZeileEinfuegen, 1).Value = wsQuelle.Cells(lngZeile, 3).Value
hier gleichst du per Find die Spalte B im Quellblatt mit der Spalte B im Zielblatt ab

Set rng = wsZiel.Columns(2).Find(What:=wsQuelle.Cells(lngZeile, 2).Value, LookAt:=xlWhole)
überträgst dann aber den Wert aus Spalte C obwohl du vorher geschrieben hast: ob die Zelle die kopiert wird bereits in Tabelle2 vorhanden ist
du überprüfst Spalte B und "kopierst" Spalte C ?
Also bitte eine Beispielmappe.
Gruß Werner
Anzeige
AW: Wenn Zeile nicht existiert dann einfügen
11.08.2021 16:38:19
Emanuel
Hallo Werner,
den Quellcode habe ich von einem anderem Forum. ich habe ihn hier nochmal etwas abgeändert mir sind die Fehler nach posten des Threads auch aufgefallen.
Userbild
Userbild

Option Explicit
Sub ZeileEinfuegen()
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Dim rng As Range
Dim lngZeile As Long, lngZeileMax As Long
Dim lngZeileEinfuegen As Long
Set wsQuelle = Worksheets("Tabelle1")
Set wsZiel = Worksheets("Tabelle2")
'Letzte beschriebene Zelle in Spalte 2 von Tabelle1
lngZeileMax = wsQuelle.Cells(Rows.Count, 2).End(xlUp).Row
'letzte beschriebene Zelle in Spalte 2 von Tabelle2
lngZeileEinfuegen = wsZiel.Cells(Rows.Count, 2).End(xlUp).Row
'Gehe durch alle Eingaben von Tabelle1
For lngZeile = 2 To lngZeileMax
'Ist der Eintrag bereits in der Tabelle2 enthalten?
Set rng = wsZiel.Columns(2).Find(What:=wsQuelle.Cells(lngZeile, 2).Value, LookAt:=xlWhole)
'Wenn der datensatz nicht vorhanden ist,...
If rng Is Nothing Then
'dann in die nächste Zeile
lngZeileEinfuegen = lngZeileEinfuegen + 1
'und füge den Inhalt ein.
wsZiel.Cells(lngZeileEinfuegen, 1).Value = wsQuelle.Cells(lngZeile, 3).Value
End If
Next
End Sub
Ich möchte noch kurz anmerken, dass ich mich mit python gut auskenne aber bei vba blicke ich einfach nicht durch :D
Anzeige
AW: Wenn Zeile nicht existiert dann einfügen
11.08.2021 17:07:54
Werner
Hallo,
und das ist jetzt eine Beispielmappe oder ein Bild?
Soll ich deine Datei nachbauen um dir zu helfen?
Gruß Werner
AW: Wenn Zeile nicht existiert dann einfügen
11.08.2021 19:04:41
Emanuel
Hallo Werner,
Ich wusste bis grade nicht, dass ich sogar ganze mappen hochladen kann, hier die mappe
https://www.herber.de/bbs/user/147565.xlsx
Anzeige
AW: Wenn Zeile nicht existiert dann einfügen
11.08.2021 20:41:41
Werner
Hallo,
da hast du dir ja mal richtig Mühe gemacht. Eine Beispielmappe mit einem einzigen Datensatz, ziemlich sinnvoll.
Trotzdem deine Mappe zurück. Das Makro kopiert zunächst einfach alles ins Blatt 2 und entfernt dann die Duplikate anhand Tabelle2 Spalte A.
https://www.herber.de/bbs/user/147566.xlsm
Gruß Werner
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilen in Excel einfügen, wenn sie nicht existieren


Schritt-für-Schritt-Anleitung

Um in Excel mithilfe von VBA eine Zeile von einer Tabelle in eine andere zu kopieren, wenn sie nicht bereits existiert, befolge diese Schritte:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf "VBAProject (deineDatei.xlsx)".
    • Wähle Einfügen > Modul.
  3. Kopiere den folgenden VBA-Code in das Modul:

    Option Explicit
    Sub ZeileEinfuegen()
       Dim wsQuelle As Worksheet
       Dim wsZiel As Worksheet
       Dim rng As Range
       Dim lngZeile As Long, lngZeileMax As Long
       Dim lngZeileEinfuegen As Long
    
       Set wsQuelle = Worksheets("Tabelle1")
       Set wsZiel = Worksheets("Tabelle2")
    
       'Letzte beschriebene Zelle in Spalte 2 von Tabelle1
       lngZeileMax = wsQuelle.Cells(Rows.Count, 2).End(xlUp).Row
       'letzte beschriebene Zelle in Spalte 2 von Tabelle2
       lngZeileEinfuegen = wsZiel.Cells(Rows.Count, 2).End(xlUp).Row
    
       'Gehe durch alle Eingaben von Tabelle1
       For lngZeile = 2 To lngZeileMax
           'Ist der Eintrag bereits in der Tabelle2 enthalten?
           Set rng = wsZiel.Columns(2).Find(What:=wsQuelle.Cells(lngZeile, 2).Value, LookAt:=xlWhole)
           'Wenn der Datensatz nicht vorhanden ist,...
           If rng Is Nothing Then
               'dann in die nächste Zeile
               lngZeileEinfuegen = lngZeileEinfuegen + 1
               'und füge den Inhalt ein.
               wsZiel.Cells(lngZeileEinfuegen, 1).Value = wsQuelle.Cells(lngZeile, 3).Value
           End If
       Next
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.


Häufige Fehler und Lösungen

  • Fehler: Der Kopiervorgang funktioniert nicht wie gewünscht.

    • Lösung: Überprüfe, ob die Spaltenbezüge im VBA-Code korrekt sind. Stelle sicher, dass du die richtigen Spalten für den Vergleich und das Einfügen verwendest.
  • Fehler: Ich erhalte eine Fehlermeldung, wenn ich das Makro ausführe.

    • Lösung: Stelle sicher, dass die Arbeitsblätter "Tabelle1" und "Tabelle2" existieren und dass die Daten in der erwarteten Struktur vorliegen.

Alternative Methoden

Neben VBA gibt es auch andere Möglichkeiten, dies in Excel zu erreichen:

  • Power Query: Du kannst Power Query verwenden, um Daten aus einer Tabelle zu laden und die Duplikate zu entfernen. Dies ist eine benutzerfreundliche Methode, um Daten zu transformieren und zu kombinieren.

  • Excel-Formeln: Mit einer Kombination aus WENN, VERGLEICH und INDEX-Formeln kannst du ebenfalls prüfen, ob ein Wert existiert und diesen dann in eine andere Zelle kopieren.


Praktische Beispiele

Angenommen, in "Tabelle1" hast du die folgenden Daten:

A B C
ID Name Alter
1 Max 30
2 Anna 25
3 Peter 40

Und in "Tabelle2" existieren bereits:

A B
ID Name
1 Max

Wenn du das Makro ausführst, wird "Tabelle2" nach dem Vorgang so aussehen:

A B
ID Name
1 Max
2 Anna
3 Peter

Tipps für Profis

  • Debugging: Verwende die Debug.Print-Anweisung, um während der Ausführung von Makros Variablenwerte im Direktfenster anzuzeigen. Dies kann helfen, Probleme zu identifizieren.

  • Makros sichern: Speichere deine Arbeitsmappe im .xlsm-Format, um sicherzustellen, dass deine Makros erhalten bleiben.

  • Schutz: Schütze deine Arbeitsblätter, um sicherzustellen, dass wichtige Daten nicht versehentlich geändert werden, während das Makro ausgeführt wird.


FAQ: Häufige Fragen

1. Frage Wie kann ich das Makro anpassen, um mehr Spalten zu kopieren?

Antwort: Du kannst weitere Zeilen im Code hinzufügen, um zusätzliche Daten zu kopieren. Achte darauf, die Spaltenindizes entsprechend zu ändern.

2. Frage Was kann ich tun, wenn das Makro zu lange dauert?

Antwort: Überprüfe, ob du große Datenmengen verarbeitest. Du kannst die Application.ScreenUpdating-Eigenschaft auf False setzen, bevor das Makro ausgeführt wird, um die Geschwindigkeit zu erhöhen. Setze sie am Ende wieder auf True.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige