Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

nur neue Daten importieren

Forumthread: nur neue Daten importieren

nur neue Daten importieren
Werner
Hallo!
Trotz Suche finde ich keine Lösung für mein Problem (oder ich bin blind)...
Ich möchte Daten aus einem bestimmten Blatt von Datei 1 in ein best. Blatt von Datei 2 importieren.
Die Daten und Formatierungen usw. in Datei 2 sollen aber beibehalten werden.
Doppelte Einträge sollen nicht importiert werden. Also nur was Neu ist soll kopiert werden.
Das muss doch machbar sein?!
Gruß und Danke!!!
Werner
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
Tabellen vergleichen - neue Daten importieren
23.04.2010 08:39:09
fcs
Hallo Werner,
der Vergleich und die Aktualisierung von Daten sind nur dann möglich, wenn für den Vergleich eindeutige Kriterien vorhanden sind. Im Idealfall gibt es eine Spalte mit einem eindeutigen Schlüssel im ungünstigsten Fall muss man alle Spalten jeder Zeile vergleichen/durchsuchen um neue Daten zu identifizieren.
Nachfolgend zwei Beispielmakros.
Gruß
Franz
Sub Datenabgleich_Spalten()
'Daten aus zwei Tabellen abgleichen - mehrere/alle Spalten vergleichen
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim wbZiel As Workbook, wksZiel As Worksheet
Dim varSchluessel, lSpalteSchluessel As Long, Zelle As Range
Dim ZeileQuelle As Long, ZeileZiel As Long, Spalte As Long
Dim strAdresse1 As String, bIdentisch As Boolean
'Datei/Tabelle mit ggf. neuen Daten
Set wbQuelle = Workbooks("MappeDaten.xls") 'Name anpassen!
Set wksQuelle = wbQuelle.Worksheets("Tabelle2") 'Name - anpassen
'Datei/Tabelle in der Inhalte eingetragen werden sollen
Set wbZiel = Workbooks("MappeZiel.xls") 'Name anpassen!
Set wksZiel = wbZiel.Worksheets("Tabelle1") 'Name - anpassen
'Nr. der Spalte mit dem Hauptkriterium
lSpalteSchluessel = 1                       'ggf Anpassen
'Letzte Datenzeile in Zieltabelle
With wksZiel
ZeileZiel = .Cells(.Rows.Count, lSpalteSchluessel).End(xlUp).Row
End With
Application.ScreenUpdating = False
With wksQuelle
For ZeileQuelle = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
'Such-Werte aus Zeile in Zieltabelle einlesen
varSchluessel = .Cells(ZeileQuelle, lSpalteSchluessel)
'Begriff in Spalte Schlüsselspalte im Zieltabelle suchen
Set Zelle = wksZiel.Columns(lSpalteSchluessel).Find(what:=varSchluessel, _
LookIn:=xlValues, lookat:=xlWhole)
If Zelle Is Nothing Then 'neuer Datensatz
bIdentisch = False
Else
'Adresse der 1. Fundstelle merken
strAdresse1 = Zelle.Address
Do
bIdentisch = True
'Prüfen ob die anderen Werte auch übereinstimmen
For Spalte = 1 To 6                         'ggf. anpassen
'zuvergleichende SPalten festlegen
Select Case Spalte
Case 1 To 6                              'ggf. anpassen
If wksZiel.Cells(Zelle.Row, Spalte)  .Cells(ZeileQuelle, Spalte) Then
bIdentisch = False
Exit For
End If
Case Else
'Spalte überspringen
End Select
Next
If bIdentisch = True Then Exit Do
'Nächsten Namens-Eintrag suchen
Set Zelle = wksZiel.Columns(lSpalteSchluessel).FindNext(after:=Zelle)
Loop Until Zelle.Address = strAdresse1
End If
If bIdentisch = False Then
'neuen Datensatz übertragen
ZeileZiel = ZeileZiel + 1
.Rows(ZeileQuelle).Copy
wksZiel.Cells(ZeileZiel, 1).PasteSpecial Paste:=xlPasteValues
End If
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End With
End Sub
Sub Datenabgleich_Schluessel()
'Daten aus zwei Tabellen abgleichen per Schlüsselspalte
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim wbZiel As Workbook, wksZiel As Worksheet
Dim varSchluessel, lSpalteSchluessel As Long, Zelle As Range
Dim ZeileQuelle As Long, ZeileZiel As Long
'Tabelle mit ggf. neuen Daten
Set wbQuelle = Workbooks("MappeDaten.xls") 'Name anpassen!
Set wksQuelle = wbQuelle.Worksheets("Tabelle2") 'Name - anpassen
'Tabelle in der Inhalte eingetragen werden sollen
Set wbZiel = Workbooks("MappeZiel.xls") 'Name anpassen!
Set wksZiel = wbZiel.Worksheets("Tabelle1") 'Name - anpassen
'Nr. der Schlüsselspalte
lSpalteSchluessel = 1 'ggf Anpassen
'Letzte Datenzeile in Zieltabelle
With wksZiel
ZeileZiel = .Cells(.Rows.Count, lSpalteSchluessel).End(xlUp).Row
End With
Application.ScreenUpdating = False
With wksQuelle
For ZeileQuelle = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
'Such-Werte aus Zeile in Zieltabelle einlesen
varSchluessel = .Cells(ZeileQuelle, lSpalteSchluessel)
'Name in Spalte Schlüsselsüalte im Zieltabelle suchen
Set Zelle = wksZiel.Columns(lSpalteSchluessel).Find(what:=varSchluessel, _
LookIn:=xlValues, lookat:=xlWhole)
If Zelle Is Nothing Then 'neuer Datensatz
ZeileZiel = ZeileZiel + 1
.Rows(ZeileQuelle).Copy
wksZiel.Cells(ZeileZiel, 1).PasteSpecial Paste:=xlPasteValues
Else
'do nothing - keine bestehenden DAten ändern
End If
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End With
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Neue Daten in Excel importieren und doppelte Einträge vermeiden


Schritt-für-Schritt-Anleitung

Um neue Daten aus einer Excel-Datei in eine andere zu importieren, ohne bestehende Daten zu überschreiben, kannst Du die folgenden Schritte ausführen:

  1. Öffne beide Arbeitsmappen: Stelle sicher, dass die Quelldatei (z.B. MappeDaten.xls) und die Zieldatei (z.B. MappeZiel.xls) geöffnet sind.

  2. Makro erstellen: Drücke ALT + F11, um den VBA-Editor zu öffnen. Klicke auf "Einfügen" und dann auf "Modul", um ein neues Modul zu erstellen.

  3. Code einfügen: Kopiere den folgenden Code in das Modul. Dieser Code vergleicht die Daten und importiert nur neue Einträge.

Sub Datenabgleich_Schluessel()
    Dim wbQuelle As Workbook, wksQuelle As Worksheet
    Dim wbZiel As Workbook, wksZiel As Worksheet
    Dim varSchluessel, lSpalteSchluessel As Long, Zelle As Range
    Dim ZeileQuelle As Long, ZeileZiel As Long

    ' Tabelle mit ggf. neuen Daten
    Set wbQuelle = Workbooks("MappeDaten.xls") ' Name anpassen!
    Set wksQuelle = wbQuelle.Worksheets("Tabelle2") ' Name anpassen
    ' Tabelle in der Inhalte eingetragen werden sollen
    Set wbZiel = Workbooks("MappeZiel.xls") ' Name anpassen!
    Set wksZiel = wbZiel.Worksheets("Tabelle1") ' Name anpassen
    ' Nr. der Schlüsselspalte
    lSpalteSchluessel = 1 ' ggf. anpassen

    ' Letzte Datenzeile in Zieltabelle
    With wksZiel
        ZeileZiel = .Cells(.Rows.Count, lSpalteSchluessel).End(xlUp).Row
    End With

    Application.ScreenUpdating = False
    With wksQuelle
        For ZeileQuelle = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            ' Such-Werte aus Zeile in Zieltabelle einlesen
            varSchluessel = .Cells(ZeileQuelle, lSpalteSchluessel)
            ' Name in Spalte Schlüsselsäule im Zieltabelle suchen
            Set Zelle = wksZiel.Columns(lSpalteSchluessel).Find(what:=varSchluessel, _
            LookIn:=xlValues, lookat:=xlWhole)
            If Zelle Is Nothing Then ' neuer Datensatz
                ZeileZiel = ZeileZiel + 1
                .Rows(ZeileQuelle).Copy
                wksZiel.Cells(ZeileZiel, 1).PasteSpecial Paste:=xlPasteValues
            End If
        Next
    End With
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
  1. Makro ausführen: Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.

Häufige Fehler und Lösungen

  • Fehler: "Sub oder Funktion nicht definiert"

    • Lösung: Überprüfe, ob Du den Code korrekt eingefügt hast und dass der Subname nicht verändert wurde.
  • Fehler: Daten werden nicht importiert

    • Lösung: Stelle sicher, dass die Schlüsselspalte korrekt definiert ist und die Daten in der Quelldatei tatsächlich neu sind.
  • Fehler: Excel stürzt ab

    • Lösung: Reduziere die Anzahl der Daten oder schließe unnötige Anwendungen, um die Systemressourcen zu entlasten.

Alternative Methoden

Wenn Du keine Makros verwenden möchtest, kannst Du auch die Funktion „Daten abrufen“ in Excel nutzen, um neue Daten zu importieren:

  1. Wähle die Zelle in der Zieltabelle aus, wo die Daten erscheinen sollen.
  2. Gehe zu „Daten“ > „Abrufen und transformieren“ > „Aus Arbeitsmappe“.
  3. Wähle die Quelldatei aus und folge den Anweisungen, um die Daten zu importieren.
  4. Filtere die Daten, um nur neue Einträge anzuzeigen.

Praktische Beispiele

Angenommen, Du hast in MappeDaten.xls folgende Daten:

ID Name
1 Max
2 Julia
3 Tom

In MappeZiel.xls hast Du bereits die Daten:

ID Name
1 Max
2 Julia

Nach dem Ausführen des Makros werden nur die neuen Daten (ID 3, Tom) in die Zieltabelle eingefügt.


Tipps für Profis

  • Eindeutige Schlüssel verwenden: Stelle sicher, dass Deine Daten eindeutige Identifikatoren in einer Spalte haben, um Verwechslungen zu vermeiden.
  • Daten validieren: Überprüfe die Quelldaten regelmäßig auf Konsistenz, um Probleme beim Import zu vermeiden.
  • Backups erstellen: Mache regelmäßig Backups Deiner Arbeitsmappen, bevor Du umfangreiche Änderungen vornimmst.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um mehrere Spalten zu vergleichen? Du kannst die Schleife im Makro erweitern, um zusätzliche Spalten zu überprüfen, indem Du die For Spalte Schleife anpasst.

2. Funktioniert das auch in Excel 365? Ja, das Beispiel funktioniert in Excel 365 und in den meisten anderen Versionen von Excel, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige