Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten aus anderen Exceldateien auslesen

Daten aus anderen Exceldateien auslesen
06.01.2017 16:47:40
Al
Hallo zusammen,
ich habe eine Problemstellung und würde diese gerne durch ein Makro lösen. Ich bin mir aber nicht sicher, ob das so ohne weiteres möglich ist, da meine VBA-Kenntnisse eher bescheiden sind.
Ich möchte aus knapp 3500 Exceldateien, die in diversen Ordnern enthalten sind, bestimmte Zellen auslesen und in ein anderes Exceldokument einfügen. Der Einfachheit halber habe ich das andere Dokument in die selbe Datei einfügt (siehe hochgeladene Exceldatei). Die ausgelesenen Daten sollen in Zeilen hintereinander eingesetzt werden, sodass keine Zeile überschrieben wird.
Folgende Besonderheiten müssen berücksichtigt werden:
Die Zeichnungsnr. soll vorzugsweise aus der dem Dateinamen entnommen werden und eingefügt werden (nur Zeichenanzahl bis zu 14 Stellen laden, da auch andere Exceldateien in dem Ordner enthalten sein können!)
Stahlgewicht und Oberfläche sind nur auf bestimmten Seiten und in variierenden Zellen enthalten (gelb markierte Stellen)
Spontan hätte ich gesagt, dass man ein Button programmiert, mit dem man einen Ordner wählt, in dem die Exceldateien enthalten sind.
Hat jemand eine zündende Idee? Sonst wird es sehr aufwendig für mich nächste Woche :)
https://www.herber.de/bbs/user/110378.xls

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: einige Unklarheiten
06.01.2017 17:19:17
Fennek
Hallo,
in der Ergebnisdatei ist folgendes unklar:
Gestänge Masttyp Mastteil Zeichnungsnr.
Ebensso nach welchem Prinzip die Dateinamen aufgebaut sind.
Insgesamt kling die Aufgabe machbar, aber für umsonst? Wenn Sie es von Hand machen, sind Sich wochenlang, also sollte das know-how einiges Wert sein. An welches Budget haben Sie gedacht?
mfg
AW: einige Unklarheiten
06.01.2017 17:30:22
Michael
Hi,
außerdem: sind die 01 bis 06 verschiedene Dateien oder Blätter EINER Datei?
Heißen die immer gleich? Also: muß man pro Datei in einem bestimmten Blatt nach "Stahlgewicht" suchen oder in allen? Und: kann man nach dem ersten abbrechen oder muß man alle erfassen?
Gruß,
Michael
Anzeige
AW: einige Unklarheiten
06.01.2017 18:38:14
Al
Es kann sein, dass in einer Datei mehrere Stahlgewichte ausgelesen werden müssen (in diesem Beispiel für "Horizontalverband und obere Ausf.", "Unterschuss für 4x+0,0" und "1 SF-Ecke +0,0") und diese sollen in der anderen Exceldatei untereinander aufgeführt werden.
Es gibt auch beispielsweise Blätter mit nur 1 oder 2 Seiten und auf einer ist in der Zeile wo "Stahlgewichte" steht das Gewicht und die Fläche auszulesen.
@Michael: Wie genau meinst du das "Heißen die immer gleich?"
@Fennek: Leider kann ich kein Budget anbieten, da das nicht seitens der Firma unterstützt wird. Aber trotzdem danke für dein Interesse ;)
Anzeige
AW: Daten aus anderen Exceldateien auslesen
06.01.2017 18:07:36
Dieter
Hallo Al,
ich habe dir mal ein Programm zusammengebastelt, welches jeweils die Daten eines Verzeichnisses den bereits vorhandenen Daten im Blatt "Ziel" hinzufügt. Unterverzeichnisse des gewählten Verzeichnisses werden nicht berücksichtigt, es wäre aber nicht die Welt, das zu ergänzen.
Das Programm geht davon aus, dass der Text "Stahlgewicht" - falls überhaupt vorhanden - jeweils in der letzten Zeile der Spalte F steht. Falls diese Bedingung nicht generell erfüllt ist, lässt sich das aber leicht ändern.
Als Zeichnungsnummer wird jeweils der Dateiname ohne Endung verwendet. Die Alternative - Entnahme aus L3 - ist auskommentiert.
Viele Grüße
Dieter
Datei: https://www.herber.de/bbs/user/110380.zip
Anzeige
AW: Daten aus anderen Exceldateien auslesen
06.01.2017 18:46:06
Al
Tausend Dank schon mal für die schnelle Antwort.
Ich habe noch eine Frage: Sobald ich auf "Start" klicke kommt die Fehlermeldung "Das Projekt oder die Bibliothek ist nicht auffindbar" und die Codezeile "fd As FileDialog" wird grau hinterlegt. Kannst du mir da weiterhelfen?
Dazu vielleicht noch eine Info; ich arbeite gerade mit einem mac-Betriebssystem und auf der Arbeit mit Windows. Soweit ich weiß funktionieren nicht alle Befehle auf mac. Könnte es vielleicht daran liegen?
Gruss
AW: Daten aus anderen Exceldateien auslesen
06.01.2017 19:58:05
Dieter
Hallo Al,
ich hab mal kurz gegoogelt und dabei erfahren, dass der FileDialog (hier verwendet zur Auswahl des zu bearbeitenden Verzeichnisses) auf dem Mac nicht existiert.
Leider habe ich vom Mac keine Ahnung. Vielleicht kann da hier jemand weiterhelfen.
Vorerst kannst du das Programm einfach so testen, dass du den Befehl
Dim fd As FileDialog
auskommentierst und ebenso die ersten 7 Zeilen nach den Dim-Anweisungen.
Anstelle von
pfad = fd.SelectedItems(1)
setzt du dann
pfad = "C:\DeinVerzeichnis\"
So kannst du wenigsten einzelne Verzeichnisse abarbeiten.
Viele Grüße
Dieter
Anzeige
AW: Daten aus anderen Exceldateien auslesen
06.01.2017 20:42:55
Al
Ich probiere es am besten am Montag auf der Arbeit.
Vielen Dank erstmal.
@ Dieter Klemke_AW: Daten auslesen
09.01.2017 09:50:00
Al
Hallo Herr Klemke,
zunächst einmal klappt das Makro super, vielen Dank.
Nun gibt es auch Excelblätter, in denen das Stahlgewicht tatsächlich nicht in der letzten Zeile steht (siehe angehängte Exceldatei). Im Makro steht "letzteZeile = wsZ.Cells(wsZ.Rows.Count, "A").End(xlUp).Row"... Wie könnte ich dem Makro sagen, dass er nur die Werte für Stahlgewicht und -Oberfläche aus der Zeile auslesen soll, in der das Wort "Stahlgewicht" steht.
Eine weitere Besonderheit hat sich gezeigt; Wie es scheint, sind die Excelblätter geringfügig anders aufgebaut. In der von mir angehängten Datei ist das Mastteil (hier Benennung genannt) nicht in Zelle O3 sondern in M3 zu finden. Ich habe in der entsprechenden Zeile "wsZ.Cells(zeileZ, "C") = ws.Range("M3")" unter der Zeile "wsZ.Cells(zeileZ, "C") = ws.Range("O3")" ergänzt, nur leider liest das Makro nun nur die Zeile M3 aus. Gibt es da eine Lösung, dass das Makro hier selbst erkennt, wann er in welcher Zelle den Masttyp auszulesen hat?
Vielen Dank.
Gruß
https://www.herber.de/bbs/user/110417.xlsx
Anzeige
@ Dieter Klemke_AW: Daten auslesen
09.01.2017 12:36:21
Dieter
Hallo Al,
das lässt sich beides machen. Bzgl. des Mastteils orientiert sich das Programm am Schlüsselwort "Mastteil:" in Zelle N3 oder am Schlüsselwort "Benennung:" in Zelle K3.
Ich habe das Programm noch so abgeändert, dass alle Excel-Dateien berücksichtigt werden, deren Dateiname ohne Endung max. 14 Zeichen lang ist.

Sub DatenAuslesen()
Dim ergebnis As Long
Dim fd As FileDialog
Dim fil As File
Dim fol As Folder
Dim fso As FileSystemObject
Dim letzteZeileZ As Long
Dim pfad As String
Dim pos As Long
Dim suchErgebnis As Object
Dim wb As Workbook
Dim ws As Worksheet
Dim wsZ As Worksheet  ' Zielblatt
Dim zeichNr As String
Dim zeileStahlgewicht As Long
Dim zeileZ As Long
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
fd.InitialFileName = ThisWorkbook.Path & "\"
ergebnis = fd.Show
If ergebnis = 0 Then
MsgBox Prompt:="Abbruch durch den Benutzer"
Exit Sub
End If
pfad = fd.SelectedItems(1)
Set wsZ = ThisWorkbook.Worksheets("Ziel")
letzteZeileZ = wsZ.Cells(wsZ.Rows.Count, "A").End(xlUp).Row
Set fso = New FileSystemObject
Set fol = fso.GetFolder(pfad)
zeileZ = letzteZeileZ + 1
For Each fil In fol.Files
If fil.Name Like "*.xls*" Then
pos = InStrRev(fil.Name, ".")
zeichNr = Left$(fil.Name, pos - 1)
If Len(zeichNr) 
Viele Grüße
Dieter
Anzeige
@ Dieter Klemke_AW: Daten auslesen
09.01.2017 12:56:35
Dieter
Hallo Al,
mir ist noch eingefallen, dass man die Zielliste zu Kontrollzwecken mit dem Namen von Arbeitsmappe, Blatt und Pfad ergänzen sollte.
Das sieht dann folgendermaßen aus:

Sub DatenAuslesen()
Dim ergebnis As Long
Dim fd As FileDialog
Dim fil As File
Dim fol As Folder
Dim fso As FileSystemObject
Dim letzteZeileZ As Long
Dim pfad As String
Dim pos As Long
Dim suchErgebnis As Object
Dim wb As Workbook
Dim ws As Worksheet
Dim wsZ As Worksheet  ' Zielblatt
Dim zeichNr As String
Dim zeileStahlgewicht As Long
Dim zeileZ As Long
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
fd.InitialFileName = ThisWorkbook.Path & "\"
ergebnis = fd.Show
If ergebnis = 0 Then
MsgBox Prompt:="Abbruch durch den Benutzer"
Exit Sub
End If
pfad = fd.SelectedItems(1)
Set wsZ = ThisWorkbook.Worksheets("Ziel")
letzteZeileZ = wsZ.Cells(wsZ.Rows.Count, "A").End(xlUp).Row
Set fso = New FileSystemObject
Set fol = fso.GetFolder(pfad)
zeileZ = letzteZeileZ + 1
For Each fil In fol.Files
If fil.Name Like "*.xls*" Then
pos = InStrRev(fil.Name, ".")
zeichNr = Left$(fil.Name, pos - 1)
If Len(zeichNr) 
Viele Grüße
Dieter
Anzeige
@ Dieter Klemke_AW: Daten auslesen
09.01.2017 13:16:28
Al
Funktioniert einwandfrei, danke.
Ich hätte da noch eine Verständnisfrage: Gibt es die Möglichkeit, dass auch Unterordner berücksichtigt werden bei der Suche? Ich bin der Ansicht, dass das nicht möglich ist, da wir ja ein Pfad eingeben müssen mit einem Zielordner. Ist das richtig?!
Grüße
@ Dieter Klemke_AW: Daten auslesen
09.01.2017 14:51:47
Dieter
Hallo Al,
das hatte ich doch schon gesagt, man kann natürlich auch die Unterordner einbeziehen. Dazu muss man das Programm nur etwas umstrukturieren. Es sieht dann folgendermaßen aus:

Option Explicit
Dim fso As FileSystemObject
Dim zeileZ As Long
Dim wsZ As Worksheet  ' Zielblatt
Sub DatenAuslesen_mit_Unterverz()
Dim ergebnis As Long
Dim fd As FileDialog
Dim fol As Folder
Dim letzteZeileZ As Long
Dim pfad As String
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
fd.InitialFileName = ThisWorkbook.Path & "\"
ergebnis = fd.Show
If ergebnis = 0 Then
MsgBox Prompt:="Abbruch durch den Benutzer"
Exit Sub
End If
pfad = fd.SelectedItems(1)
Set fso = New FileSystemObject
Set fol = fso.GetFolder(pfad)
Set wsZ = ThisWorkbook.Worksheets("Ziel")
letzteZeileZ = wsZ.Cells(wsZ.Rows.Count, "A").End(xlUp).Row
zeileZ = letzteZeileZ + 1
Folder_abarbeiten Verzeichnis:=fol
Set fso = Nothing
End Sub
Sub Folder_abarbeiten(Verzeichnis As Folder)
Dim fil As File
Dim fol As Folder
Dim pos As Long
Dim suchErgebnis As Object
Dim wb As Workbook
Dim ws As Worksheet
Dim zeichNr As String
Dim zeileStahlgewicht As Long
For Each fil In Verzeichnis.Files
If fil.Name Like "*.xls*" Then
pos = InStrRev(fil.Name, ".")
zeichNr = Left$(fil.Name, pos - 1)
If Len(zeichNr) 
Viele Grüße
Dieter
Anzeige
@ Dieter Klemke_AW: Daten auslesen
09.01.2017 16:16:44
Al
Achja, jetzt sehe ich es auch. Das Programm klappt super!
Vielen Dank für die Hilfe.
Grüße

361 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige