OK. Sorry das ich noch weiter Frage, aber dann kann ich dir vllt. nachher mit einem konkreteren Makro helfen. Kann man der Datei (am Namen z.B.) ansehen, welche Spalte die gefüllte ist oder muss man das in dem Makro erst rausfinden. Da würde dann natürlich helfen, wenn immer die erste Zeile (bzw. wg. Headline) die zweite Zeile in der betreffenden Spalte auch Daten drin hätte, denn dann könnte man durch alle Spalten durchgehen, schauen in welcher Spalte in Zeile 2 was steht und weiß dann: In dieser Datei sind die Daten in Splate X.
Fangen wie mal an:
Leere Excel-Datei, wo das Makro reinkommt:
Code:
Public Sub Fill Table
Dim w as Worksheet, wQuelle as Worksheet, wb as Workbook
Dim Dateiliste as Collection, fn as String
Dim row as Long, col as Long, c as Long
Set Dateiliste=New Collection
Dateiliste.Add "Pfad und Name Datei 1.xlsx"
Dateiliste.Add "Pfad und Name Datei 2.xlsx"
'usw.
'Natürlich könnte man auch alle Dateien in ein Verzeichnis machen und
'dann hier eine Funktion benutzen, die das Verzeichnis ausliest und alle Dateien
'in diese Liste hier schreibt. Kann man Googlen, wie das ginge.
'Das Worksheet, wo alles reinkommt
Set w=ThisWorkbook.Worksheets(1)
'Die erste Datei öffnen und die Headline sowie die Spalten 1-4 übertragen:
fn=Dateiliste.Items(0)
Set wb = Workbooks.Open(fn)
'Annahme: Die Tabelle ist immer im ersten Workshheet/Arbeitsblatt
Set wQuelle=wb.Worksheets(1)
For col From 1 to wb.UsedRange.Columns.Count
'Headline übertragen
w.cells(1,col).value=wQuelle.Cells(1,col)
'Spalte übertragen bei 1-4
If Col<=4 then
For row=2 to wQuelle.UsedRange.Rows.Count
w.cells(row,col).value=wQuelle.Cells(row,col)
Next row
End IF
Next col
Set wQuelle=Nothing
wb.Close False
'Jetzt nacheinander alle Dateien öffnen, volle Spalte suchen und übertragen
For Each fn in Dateiliste
Set wb = Workbooks.Open(fn)
Set wQuelle=wb.Worksheets(1)
'Richtige Spalte suchen, die in der zweiten Zeile hoffentlich Inhalt hat
For col From 5 to wb.UsedRange.Columns.Count
If wQuelle.Cells(2,col).value<>"" Then
c=col
Exit For
End If
Next col
'Spalte übertragen
For row=2 to wQuelle.UsedRange.Rows.Count
w.cells(row,c).value=wQuelle.Cells(row,c)
Next row
'Aufräumen und Datei schließen
Set wQuelle=Nothing
wb.Close False
Next fn
End Sub
Ist jetzt nur im Editor hingetippert, also bestimmt noch buggy.