Einzelnen Beitrag anzeigen

Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: Excel Tabellen aus mehreren Dateien zusammenführen

  Alt 13. Jan 2021, 17:10
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.
Ralph
  Mit Zitat antworten Zitat