ich möchte Maschinendaten mit Excel auswerten. Die Daten stehen in über 50 Excel-Dateien, die immer gleich aufgebauten sind, in den Zellen B14:B43.
Ich möchte gerne, in einer neuen Datei diesen Spaltenbereich von allen Dateien nebeneinander aufgelistet bekommen. Zusätzlich soll in der ersten Zeile jeweils der Dateiname von der ausgelesenen Excel-Datei stehen.
Beispiel:
A1 = Datei1.xls
A2 = Datei1.Zelle.B14
A3 = Datei1.Zelle.B15
...
B1 = Datei2.xls
B2 = Datei2.Zelle.B14
B3 = Datei2.Zelle.B15
...
Die Quell-Dateien liegen im gleichen Verzeichnis, wo auch die Ziel-Datei gespeichert werden soll. Falls das nicht möglich ist, können die zu importieren Dateien aber auch vorher in einem vordefinierten Ordner ablegen werden.
Meine VBA-Kenntnisse sind leider nicht so gut. In einem anderen Thread habe ich folgenden Code gefunden. Dieser soll gesamte Excel Dateien nebeneinander auflisten. Allerdings kann ich diesen Code nicht für mein Vorhaben abändern, da der Code die zu kopierende Größe der auszulesenen Datei dadurch bestimmt, in dem er nach leeren Zellen sucht. In meinen Quell-Dateien enthalten die ersten Zellen sehr viele leere Zellen, wodurch das Script gar nichts kopiert.
Sub MWTabellenAusMehrerenDateienEinlesen()
Dim oTargetSheet As Worksheet, oTargetRange As Range
Dim oSourceBook As Workbook
Dim sPfad As String
Dim sDatei As String
Dim lngColumns As Long
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
'Schritt 1: Neues Arbeitsblatt für die Ergebnisse erstellen
Set oTargetSheet = ActiveWorkbook.Sheets.Add
'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "C:\TEST\Sammlung\"
sDatei = Dir(CStr(sPfad & "*.xl*")) 'Alle Excel Dateien
Do While sDatei ""
'Schritt 3: öffnen der Datei und Datenübertragung
Set oSourceBook = Workbooks.Open(sPfad & sDatei, False, True) 'nur lesend öffnen
'Datenübertragung alle genutzten Zeilen und Spalten
Set oTargetRange = oTargetSheet.Cells(1, Columns.Count).End(xlToLeft).Offset(, 2)
lngColumns = oSourceBook.Sheets("Tabelle1").Cells(1, 1).CurrentRegion.Columns.Count
oSourceBook.Sheets("Tabelle1").Cells(1, 1).CurrentRegion.Copy oTargetRange
oTargetRange.EntireColumn.SpecialCells(xlCellTypeBlanks).Resize(, lngColumns).Delete
'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
oSourceBook.Close False 'nicht speichern
'Nächste Datei
sDatei = Dir()
Loop
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
'Variablen aufräumen
Set oTargetSheet = Nothing
Set oSourceBook = Nothing
End Sub
Quelle:https://www.herber.de/forum/archiv/1700to1704/1702581_VBA_Daten_zentralisieren_fuer_weitere_Verwendung.html
Tag: Eine Spalte (Spaltenbereich) aus mehreren Excel-Dateien kopieren und nebeneinander einfügen / auflisten