AW: Gleich strukturierte Excel-Dat. zusammenführen
22.02.2017 22:22:12
Alex
Hallo Jochen,
Nochmals herzlichen Dank für Deine Unterstützung und entschuldige mich für die verspätete Antwort. Das "Problem" ist privater Natur (Auswertung von Sensormessdaten) und kann tagsüber im Geschäft nicht daran arbeiten. Daher bin ich erst heute Abend dazu gekommen Deine Lösungen auszuprobieren.
Du hast mir wirklich eine Menge Arbeit erspart und dazu habe ich noch einiges gelernt. Dafür wirklich nochmals herzlichen Dank. Ich weiss leider nicht wie ich mich revanchieren kann, mit VBA-Tipps wird es für mich schwierig sein. Aber wenn Du z.B. etwas aus der Schweiz benötigst, einfach melden...
Zurück zur Lösung, ich habe noch einige Anpassungen gemacht.
Die Spaltenübersetzung habe ich aufgetrennt, damit die Spalten C und D beide übernommen werden, ansonsten würde die Spalte C durch die "Treppe" ersetzt werden und die Spalte E wäre leer in der Zieldatei.
Deine Korrektur für die Treppe funktioniert ebenfalls super.
Hier nochmals die vollständige Lösung, evtl. kann davon sonst noch jemand profitieren:
Option Explicit
'Die Arbeitsmappe, die diesen Code enthält benötigt eine leere Tabelle "Main"
'Die Arbeitsmappe, die diesen Code enthält benötigt eine Tabelle "Sources"
'Die tausende Arbeitsmappen solltest Du in die Tabelle "Sources" importieren/einlesen
Sub Datensammler()
Dim myAM As Workbook
Dim mySh As Worksheet
Dim ze As Long 'Zeilenzähler
Dim i As Long ' noch ein Zeilenzähler
Dim t As Long 'variable für die "Treppe"
Dim myFile As Range 'Dateinamen in Tabelle "Sources" incl. Pfadname in Spalte A ?
Set myAM = ThisWorkbook
Set mySh = myAM.Sheets("Main")
Application.ScreenUpdating = False
'Alle Daten aus Tabelle "Main" löschen
mySh.Cells.Delete
'Zeilenzähler; Variable mit Startwert belegen, Start in Zeile 1
ze = 1
'Schleife starten. Alle Dateien aus der Tabelle "Sources" nacheinander öffnen
'und mit nachfolgendem Code gewünschte Daten in die Tabelle "Main" hineinkopieren
For Each myFile In Sheets("Sources").Range("A1:A2") 'mehr als 2500 Dateien? Anpassen
Workbooks.Open Filename:=myFile.Value
With Sheets(1) ' Tabellenname anpassen sofern nicht "Tabelle1"
.Range("A1").Copy Destination:=mySh.Range("A" & ze)
.Range("B1:B41").Copy Destination:=mySh.Range("B" & ze)
.Range("C1:C41").Copy Destination:=mySh.Range("D" & ze)
.Range("D1:D41").Copy Destination:=mySh.Range("E" & ze)
.Range("E1").Copy Destination:=mySh.Range("F" & ze)
.Range("E2").Copy Destination:=mySh.Range("G" & ze)
.Range("E3").Copy Destination:=mySh.Range("H" & ze)
mySh.Range("A" & ze).Copy
mySh.Range("A" & ze + 1 & ":A" & ze + 40).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End With
ActiveWorkbook.Close savechanges:=False
With mySh
'In den Spalten F, G, H Zellen senkrecht verbinden
.Range(Cells(ze, 6), Cells(ze + 40, 6)).Merge
.Cells(ze, 6).HorizontalAlignment = xlCenter
.Cells(ze, 6).VerticalAlignment = xlCenter
.Cells(ze, 7).HorizontalAlignment = xlCenter
.Cells(ze, 7).VerticalAlignment = xlCenter
.Cells(ze, 8).HorizontalAlignment = xlCenter
.Cells(ze, 8).VerticalAlignment = xlCenter
.Range(Cells(ze, 7), Cells(ze + 40, 7)).Merge
.Range(Cells(ze, 8), Cells(ze + 40, 8)).Merge
'Die Spalte C mit der gewünschten "Treppe runter & rauf" füllen
t = -60
For i = ze To ze + 20
.Cells(i, 3) = t
t = t + 3
Next
For i = ze + 21 To ze + 40
.Cells(i, 3) = t
t = t + 3
Next
'Zeilenzähler um 41 erhöhen; die nächsten Daten sollen angehängt werden
ze = ze + 41
End With
Next
With Columns("A:A")
.Replace What:=".000000", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.HorizontalAlignment = xlCenter
End With
Range("A1").Select
Application.ScreenUpdating = True
End Sub
Viele Grüsse aus der Schweiz
Alex