Excel Makro zum Einfügen von Daten aus anderen Excel Dateien
Hallo,
ich bin neu hier im Forum und kenne mich leider nicht so gut mit Excel/VBA aus.
Im Zuge eines Versuchs während meines Maschinenbaustudiums muss wöchentlich Excel Ausleitungen von anderen Programmen in eine Masterdatei einfügen. Es gibt jeweils 2 Ausleitungen welche unterschiedliche Daten enthalten.
Um dies für meine Nachfolger möglichst einfach zu gestalten, möchte ich gerne ein Makro in die Masterdatei einfügen.
Mein Problem/ Anliegen:
Ich habe eine bestehende Excel Datei "A", diese bestehende Datei besitzt in den ersten zehn Zeilen einen Kopf, bzw. Auswertungsformeln, in [A13:A276] sind Einträge vorhanden. Die Einträge sind z.B. AB123F, B354CD usw..
Weiter rechts, also in Spalte B:F sollen Daten von zwei anderen Excel Dateien, "B" und "C" importiert werden.
Ab Spalte G sind manuell eingetragene Werte, welche [A13:A276] zugeordnet sind, diese dürfen nicht verloren gehen, oder umsortiert werden.
Die Werte der Spalten B und D sollen von Excel Datei "B" und die Werte der Spalten C, E, F sollen von Excel Datei "C" importiert werden.
Die Excel Dateien "B" und "C" sollten die bereits vorhandenen Einträge von "A" enthalten, können unter Umständen aber auch abweichen.
Es sollen also Daten entsprechend den Einträgen in der Spalte A, der Masterdatei "A" eingelesen werden. Wenn in "A" [A13], AB123F enthalten ist, sollen die Dateien "B" und "C" durchsucht werden. Bei Übereinstimmung soll die jeweilige Zeile, somit auch die jeweilige Spalte ausgelesen und in die passende Zeile der Masterdatei eingefügt werden.
In der Datei "B" stehen in den Spalten D und E die relevanten Einträge, in der Datei "C" in den Spalten E, J, und K.
Es ist wichtig dass die Reihenfolge der Einträge in der Spalte A bei "A", "B" und "C" übereinstimmt, da ansonsten die Zuordnung der manuell eingetragenen Daten nicht mehr übereinstimmt.
Bei Abweichung wäre es gut wenn eine Fehlermeldung erscheint.
Die beiden Excel Dateien "B" und "C" möchte ich gerne manuell, über ein Suchfenster auswählen.
Vielen vielen Dank für die Hilfe und schöne Grüße aus Bayern
Tom
ich bin neu hier im Forum und kenne mich leider nicht so gut mit Excel/VBA aus.
Im Zuge eines Versuchs während meines Maschinenbaustudiums muss wöchentlich Excel Ausleitungen von anderen Programmen in eine Masterdatei einfügen. Es gibt jeweils 2 Ausleitungen welche unterschiedliche Daten enthalten.
Um dies für meine Nachfolger möglichst einfach zu gestalten, möchte ich gerne ein Makro in die Masterdatei einfügen.
Mein Problem/ Anliegen:
Ich habe eine bestehende Excel Datei "A", diese bestehende Datei besitzt in den ersten zehn Zeilen einen Kopf, bzw. Auswertungsformeln, in [A13:A276] sind Einträge vorhanden. Die Einträge sind z.B. AB123F, B354CD usw..
Weiter rechts, also in Spalte B:F sollen Daten von zwei anderen Excel Dateien, "B" und "C" importiert werden.
Ab Spalte G sind manuell eingetragene Werte, welche [A13:A276] zugeordnet sind, diese dürfen nicht verloren gehen, oder umsortiert werden.
Die Werte der Spalten B und D sollen von Excel Datei "B" und die Werte der Spalten C, E, F sollen von Excel Datei "C" importiert werden.
Die Excel Dateien "B" und "C" sollten die bereits vorhandenen Einträge von "A" enthalten, können unter Umständen aber auch abweichen.
Es sollen also Daten entsprechend den Einträgen in der Spalte A, der Masterdatei "A" eingelesen werden. Wenn in "A" [A13], AB123F enthalten ist, sollen die Dateien "B" und "C" durchsucht werden. Bei Übereinstimmung soll die jeweilige Zeile, somit auch die jeweilige Spalte ausgelesen und in die passende Zeile der Masterdatei eingefügt werden.
In der Datei "B" stehen in den Spalten D und E die relevanten Einträge, in der Datei "C" in den Spalten E, J, und K.
Es ist wichtig dass die Reihenfolge der Einträge in der Spalte A bei "A", "B" und "C" übereinstimmt, da ansonsten die Zuordnung der manuell eingetragenen Daten nicht mehr übereinstimmt.
Bei Abweichung wäre es gut wenn eine Fehlermeldung erscheint.
Die beiden Excel Dateien "B" und "C" möchte ich gerne manuell, über ein Suchfenster auswählen.
Vielen vielen Dank für die Hilfe und schöne Grüße aus Bayern
Tom
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 254018
Url: https://administrator.de/forum/excel-makro-zum-einfuegen-von-daten-aus-anderen-excel-dateien-254018.html
Ausgedruckt am: 12.05.2025 um 09:05 Uhr
4 Kommentare
Neuester Kommentar

Hallo Tom!
Grüße Dieter
Es ist wichtig dass die Reihenfolge der Einträge in der Spalte A bei "A", "B" und "C" übereinstimmt, da ansonsten die Zuordnung der manuell eingetragenen Daten nicht mehr übereinstimmt.
Soll heißen, dass die Sucheinträge in den Dateien A/B/C die gleiche Zeilennummer haben müssen oder wie ist das zu verstehen?Grüße Dieter

Hallo Tom!
OK, unter der Annahme, dass sich die Daten in allen Arbeitsmappen im Sheet(1) befinden, sollte es mit diesem Code funktionieren:
Wobei, bei erfolgloser Suche anstatt einer MsgBox die betroffenen Zellen (B:F) Leer sind
Grüße Dieter
OK, unter der Annahme, dass sich die Daten in allen Arbeitsmappen im Sheet(1) befinden, sollte es mit diesem Code funktionieren:
Option Explicit
Private Const RowStartA = 13 'Daten ab Zeile 13
Private Const ColDataA = "B:F" 'Daten(A): B:F
Private Const ColDataB = "D,B,E,D" 'Daten(B): D->B, E->D
Private Const ColDataC = "E,C,J,E,K,F" 'Daten(C): E->C, J->E, K->F
Public Sub DataImport()
Dim oWkbB As Workbook, oWkbC As Workbook
Dim oWksA As Worksheet, oWksB As Worksheet, oWksC As Worksheet
Dim sFileB As Variant, sFileC As Variant
Dim oCell As Range, oCells As Range, oFound As Range
'Wahlweise einen anderen Ordnerpfad in Form "X:\Folder" angeben
ChDir ThisWorkbook.Path
'Import-Dateiauswahl(B/C) *.xlsx-Dateien, bei Bedarf entsprechend anpassen
sFileB = Application.GetOpenFilename("Excel-Datei(B) (*.xlsx), *.xlsx")
sFileC = Application.GetOpenFilename("Excel-Datei(C) (*.xlsx), *.xlsx")
If sFileB = False Or sFileC = False Then
MsgBox "Dateiauswahl unvollständig!", vbInformation, "Dateiauswahl . . ."
Exit Sub
End If
Set oWkbB = GetObject(sFileB) 'Set/Open Datei(B)
Set oWkbC = GetObject(sFileC) 'Set/Open Datei(C)
Set oWksA = ThisWorkbook.Sheets(1) 'Set Workbook(A)-Sheet1
Set oWksB = oWkbB.Sheets(1) 'Set Workbook(B)-Sheet1
Set oWksC = oWkbC.Sheets(1) 'Set Workbook(C)-Sheet1
With oWksA 'Daten-Bereich festlegen (A13:A??)
Set oCells = .Range(.Cells(RowStartA, "A"), .Cells(RowStartA, "A").End(xlDown))
End With
Application.ScreenUpdating = False
For Each oCell In oCells 'Alle Zellen(A13:A??) durchlaufen
If oCell.Text <> "" Then
With oWksA.Rows(oCell.Row) 'Aktuelle Zeile Spalte(B:F) Inhalte löschen
.Columns(ColDataA).ClearContents
End With
With oWksB.Columns("A:A") 'Datei(B) Spalte A durchsuchen
Set oFound = .Find(oCell.Text, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
End With
If Not oFound Is Nothing Then 'Datei(B): Wenn gefunden Daten kopieren
Call GetValues(oWksA, oWksB, ColDataB, oCell.Row, oFound.Row)
End If
With oWksC.Columns("A:A") 'Datei(C) Spalte A durchsuchen
Set oFound = .Find(oCell.Text, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
End With
If Not oFound Is Nothing Then 'Datei(C): Wenn gefunden Daten kopieren
Call GetValues(oWksA, oWksC, ColDataC, oCell.Row, oFound.Row)
End If
End If
Next
oWkbB.Close False 'Datei(B) schließen (speichern=False)
oWkbC.Close False 'Datei(C) schließen (speichern=False)
Application.ScreenUpdating = True
MsgBox "Fertig!", vbInformation, "Datenimport . . ."
End Sub
Private Sub GetValues(ByRef oWksA, ByRef oWksX, ByRef sCols, ByVal iRowA As Long, ByVal iRowX As Long)
Dim aColumns As Variant, i As Integer
aColumns = Split(sCols, ",")
With oWksX.Rows(iRowX)
For i = 0 To UBound(aColumns) Step 2
oWksA.Cells(iRowA, aColumns(i + 1)).Value = .Columns(aColumns(i)).Value
Next
End With
End Sub
Grüße Dieter