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

Forumthread: Bestimmte Zeilen aus mehreren Dateien auslesen

Bestimmte Zeilen aus mehreren Dateien auslesen
mari
Hallo zusammen,
ich soll aus mehreren Excel Dateien die in einem Ordner liegen (my_Documents)eine bestimmte Information raus lesen und diese in eine neue Datei reinschreiben. Dies würde manuell mehrere Stunden gar Tage dauern. Deswegen würde ich euch gerne um eure Hilfe bitten.
Ein Makro wäre toll, welches Datei für Datei aus dem Ordner ausließt und aus jeder Datei aus dem ersten Sheet (welche unterschiedlich heißen) G6 abfragen, ob hier eine 1 oder eine 0 steht.
Steht hier eine 1 soll in eine neu erstellte Datei diese Info reingeschrieben werden, sowie die Info welche in G1 drin steht.
Steht in G6 eine 0 soll dies ignoriert werden und die Spalte J6 (3 weiter) abgefragt werden. Dies solange bis in einer Spalte nichts mehr drin steht.
Ich hab mal ein Beispiel hochgeladen:

Ich hoffe es ist verständlich und ihr könnt mir weiter helfen.
Gruß mari
Anzeige
AW: Bestimmte Zeilen aus mehreren Dateien auslesen
12.01.2010 09:53:17
Tino
Hallo,
geht es mit diesem Code?
Pfad musst wo die Dateien sind noch anpassen.
Tabelle wo die Daten ab A12 eingefügt werden sollen auch anpassen. (im Bsp. Tabelle1)
Sub LeseInfo()
Dim sFile$, meArFile()
Dim A&, AA&
Dim meArData()
Dim oExcelFile As Workbook
Dim iCalc%

'Ordner anbgeben am Ende auf "\" achten 
Const strPath$ = "C:\MeinOrdner\"

sFile = Dir(strPath & "*.xls")
'Dateien sammeln 
Do While sFile <> ""
 Redim Preserve meArFile(A)
 meArFile(A) = strPath$ & sFile
 A = A + 1
 sFile = Dir()
Loop

If A > 0 Then
    With Application
        iCalc = .Calculation
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
        
            Redim Preserve meArData(1 To 3, 1 To A)
            
            'Dateien durchsuchen 
            For A = Lbound(meArFile) To Ubound(meArFile)
                Set oExcelFile = Workbooks.Open(meArFile(A), ReadOnly:=True)
                With oExcelFile.Worksheets(1)
                      If .Cells(6, 7) = 1 Then
                        AA = AA + 1
                        meArData(1, AA) = .Cells(1, 7)
                        meArData(2, AA) = .Cells(6, 7)
                        meArData(3, AA) = oExcelFile.Name
                      End If
                      oExcelFile.Close SaveChanges:=False
                End With
            Next A
            
            'Tabelle anpassen wo die Daten hin sollen ************************** 
            With Sheets("Tabelle1")
                .Range("A12").Resize(.Rows.Count - 12, 3).ClearContents
                If AA > 0 Then
                    Redim Preserve meArData(1 To 3, 1 To AA)
                    .Range("A12").Resize(AA, 3) = Application.Transpose(meArData)
                Else
                    MsgBox "Keine Datei mit 1 in G6 gefunden", vbInformation
                End If
            End With
            
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = iCalc
    End With
Else
    MsgBox "Keine Excel- Datei im Ordner", vbInformation
End If

End Sub
Gruß Tino
Anzeige
AW: Bestimmte Zeilen aus mehreren Dateien auslesen
12.01.2010 11:31:24
mari
Hallo Tino,
erstmal vielen Dank für deine Mühe.
Ich habe dein Code mal kopiert und getestet ..
Es funktioniert ZUM TEIL
Dh er durchsucht tatsächlich den ordner "C:\MeinOrdner\"
und sammelt alle xls. Das ist supi.
Allerdings hab ich das gefühl, dass er nur G6 abfragt und dann in die neue Datei reinschreibt.
J6 + M6 + P6 werden irgendwie ignoriert obwohl da eine 1 drin ist.
Kannst du bitte nochmal einen Blick darauf werfen?
Grüße
mari
Anzeige
AW: Bestimmte Zeilen aus mehreren Dateien auslesen
12.01.2010 10:41:23
fcs
Hallo mari,
hier meine Makro-Lösung erstellt unter Excel 2003 - sollte aber auch unter 2007 laufen.
Gruß
Franz
Sub DatenImportieren()
Dim sVerzeichnis$, sDatei$
Dim wbZiel As Workbook, wbQuelle As Workbook
Dim wksZiel As Worksheet, wksQuelle As Worksheet
Dim ZeileZ&, FileCount&
Dim Zelle As Range
Const StartZelle$ = "G6" '1. Auszulesende Zelle in Tabelle 1
Const Schritt& = 3 'Spaltenabstand der auszulesenden Zellen
On Error GoTo Fehler
'Suchverzeichnis auswahlen
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Ordner mit zu durchsuchenden Dateien wählen"
.ButtonName = "Auswälen"
If .Show = -1 Then
sVerzeichnis = .SelectedItems(1)
sDatei = Dir(sVerzeichnis & Application.PathSeparator & "*.xl*")
If sDatei  "" Then
'neue Datei mit einem Tabellenblatt für Ergebnisdaten erstellen
Set wbZiel = Workbooks.Add(Template:=xlWBATWorksheet)
'Zieltabellenblatt Objektvariable zuweisen
Set wksZiel = wbZiel.Worksheets(1)
ZeileZ = 1
With wksZiel
'Titelzeile ausfüllen
.Cells(ZeileZ, 1) = "Info"
.Cells(ZeileZ, 2) = "Stück"
.Cells(ZeileZ, 3) = "Dateiname"
End With
End If
Application.ScreenUpdating = False
Do Until sDatei = ""
FileCount = FileCount + 1
Application.StatusBar = "Datei, laufende Nr. " & FileCount & " wird bearbeitet."
'Quelldatei schreibgeschützt öffnen
Set wbQuelle = Workbooks.Open( _
Filename:=sVerzeichnis & Application.PathSeparator & sDatei, _
ReadOnly:=True)
'Tabelle1 Objektvariable zuweisen
Set wksQuelle = wbQuelle.Worksheets(1)
'Werte aus Blatt 1 auslesen
Set Zelle = wksQuelle.Range(StartZelle)
Do Until IsEmpty(Zelle)
If Zelle.Value  0 Then
ZeileZ = ZeileZ + 1
With wksZiel
'Info aus Zeile 1 eintragen
.Cells(ZeileZ, 1) = wksQuelle.Cells(1, Zelle.Column).Value
'Stückzahl eintragen
.Cells(ZeileZ, 2) = Zelle.Value
'Dateiname eintragen
.Cells(ZeileZ, 3) = sDatei 'gespeicherter Dateiname
'              .Cells(ZeileZ, 3) = wksQuelle.Cells(1, 1).Value 'Dateinem in A1 des Quellblatts
End With
End If
'Nächste Zelle setzen
Set Zelle = Zelle.Offset(0, Schritt)
Loop
wbQuelle.Close savechanges:=False
Set wksQuelle = Nothing
Set wbQuelle = Nothing
sDatei = Dir
Loop
Application.ScreenUpdating = True
MsgBox "Alle Dateien ausgelesen"
End If
End With
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case Else
Application.ScreenUpdating = True
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
If Not wbQuelle Is Nothing Then wbQuelle.Close savechanges:=False
End Select
End With
Set wbZiel = Nothing
Set wbQuelle = Nothing
Application.StatusBar = False
End Sub

Anzeige
AW: Bestimmte Zeilen aus mehreren Dateien auslesen
12.01.2010 11:43:42
mari
Hallo Franz,
vielen Dank für deine Mühe.
Es öffnet sich sogar ein Fenster wo ich den Ordner auswählen kann .. wahnsinn !! Danke
Nach dem ersten Test hat das wunderbar funktioniert.
Nachdem er fertig ist bekomm ich allerdings noch die Fehlermeldung:
Fehler-Nr.:9
Index außerhalb des gültigen Bereichs
Das ist aber denk ich mal weiterhin nicht schlmm oder?
Gruß mari
Anzeige
AW: Bestimmte Zeilen aus mehreren Dateien auslesen
12.01.2010 13:57:55
fcs
Hallo mari,
keine Ahnung, warum die Meldung kommt, obwohl scheinbar alles ok durchläuft.
Füge noch folgende Zeile vor "Fehler:" ein, dann sollte auch das nicht passieren.
  Err.Clear
Fehler:

Gruß
Franz
AW: Bestimmte Zeilen aus mehreren Dateien auslesen
12.01.2010 14:24:09
mari
Hallo Franz,
gesagt getan ! Und du hattest recht. Der Fehler kommt nicht mehr. Dankeschön !
Ich hätte noch eine Frage.
Wenn in einer der Zeilen eine 1 steht zB G6 hab ich ja geschrieben, dass er dann die Info aus G1 auch kopieren soll.
Wenn die Info jetzt aber nicht in G1 steht sondern in F1 also IMMER 1 vor dem wo ich beschrieben habe.
Wo kann ich das in deinem Code ändern?
Hier?
'Info aus Zeile 1 eintragen
.Cells(ZeileZ, 1) = wksQuelle.Cells(1, Zelle.Column).Value
Gruß
mari
Anzeige
AW: Bestimmte Zeilen aus mehreren Dateien auslesen
12.01.2010 17:46:11
fcs
Hallo mari,
dann muss man von der Spalten-Nummer noch 1 abziehen, damit as F1 statt G1 der Wert ausgelesen wird.
'Info aus Zeile 1 eintragen
.Cells(ZeileZ, 1) = wksQuelle.Cells(1, Zelle.Column - 1).Value

Gruß
Franz
AW: Bestimmte Zeilen aus mehreren Dateien auslesen
13.01.2010 09:38:49
mari
Hallo Franz,
supi. Vielen vielen Dank
Gruß mari
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Bestimmte Zeilen aus mehreren Excel-Dateien auslesen


Schritt-für-Schritt-Anleitung

Um bestimmte Zeilen aus mehreren Excel-Dateien auszulesen, kannst Du ein VBA-Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke Alt + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Rechtsklicke im Projektfenster und wähle Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub LeseInfo()
    Dim sFile$, meArFile()
    Dim A&, AA&
    Dim meArData()
    Dim oExcelFile As Workbook
    Dim iCalc%

    'Ordner angeben am Ende auf "\" achten
    Const strPath$ = "C:\MeinOrdner\"

    sFile = Dir(strPath & "*.xls")
    'Dateien sammeln 
    Do While sFile <> ""
        Redim Preserve meArFile(A)
        meArFile(A) = strPath$ & sFile
        A = A + 1
        sFile = Dir()
    Loop

    If A > 0 Then
        With Application
            iCalc = .Calculation
            .ScreenUpdating = False
            .EnableEvents = False
            .Calculation = xlCalculationManual

            Redim Preserve meArData(1 To 3, 1 To A)

            'Dateien durchsuchen 
            For A = LBound(meArFile) To UBound(meArFile)
                Set oExcelFile = Workbooks.Open(meArFile(A), ReadOnly:=True)
                With oExcelFile.Worksheets(1)
                    If .Cells(6, 7) = 1 Then
                        AA = AA + 1
                        meArData(1, AA) = .Cells(1, 7) ' G1
                        meArData(2, AA) = .Cells(6, 7) ' G6
                        meArData(3, AA) = oExcelFile.Name
                    End If
                    oExcelFile.Close SaveChanges:=False
                End With
            Next A

            With Sheets("Tabelle1")
                .Range("A12").Resize(.Rows.Count - 12, 3).ClearContents
                If AA > 0 Then
                    .Range("A12").Resize(AA, 3) = Application.Transpose(meArData)
                Else
                    MsgBox "Keine Datei mit 1 in G6 gefunden", vbInformation
                End If
            End With

            .ScreenUpdating = True
            .EnableEvents = True
            .Calculation = iCalc
        End With
    Else
        MsgBox "Keine Excel-Datei im Ordner", vbInformation
    End If
End Sub
  1. Passe den Pfad an: Ändere C:\MeinOrdner\ zu dem Ordner, in dem Deine Excel-Dateien gespeichert sind.
  2. Führe das Makro aus: Gehe zurück zu Excel, drücke Alt + F8, wähle LeseInfo und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb des gültigen Bereichs"
    Füge vor der Fehlerbehandlung die Zeile Err.Clear hinzu, um diesen Fehler zu vermeiden.

  • Makro funktioniert nur teilweise
    Wenn das Makro nur G6 abfragt, überprüfe den Code auf die Schleife, die J6, M6 usw. abfragt. Stelle sicher, dass die Offset-Funktion korrekt verwendet wird.


Alternative Methoden

Wenn Du kein VBA verwenden möchtest, kannst Du auch Power Query nutzen, um Daten aus mehreren Dateien zu konsolidieren. Dies ist besonders nützlich, wenn Du keine Programmierkenntnisse hast.

  1. Gehe zu Daten > Abrufen und transformieren > Aus Datei > Aus Ordner.
  2. Wähle den Ordner aus und lade die Daten.
  3. Verwende die Power Query-Editor-Funktionen, um die gewünschten Spalten zu filtern und zu transformieren.

Praktische Beispiele

Hier ist ein Beispiel, wie Du den Code anpassen kannst, um auch Informationen aus Zellen wie F1 statt G1 auszulesen:

.Cells(ZeileZ, 1) = wksQuelle.Cells(1, Zelle.Column - 1).Value

Durch diese Änderung wird der Wert aus der Zelle vor der aktuellen Zelle verwendet.


Tipps für Profis

  • Verwende Application.StatusBar, um den Fortschritt anzuzeigen, wenn Du viele Dateien durchsuchst.
  • Optimiere die Performance: Setze Application.ScreenUpdating und Application.EnableEvents auf False, um die Performance zu erhöhen, während das Makro läuft.

FAQ: Häufige Fragen

1. Wie kann ich das Makro für andere Dateiformate anpassen?
Ändere die Zeile sDatei = Dir(sVerzeichnis & Application.PathSeparator & "*.xl*") entsprechend, um andere Formate wie .xlsx oder .xlsm zu unterstützen.

2. Wo kann ich den Pfad für die Quell-Dateien ändern?
Ändere den Wert von Const strPath$ im Code, um den Pfad zu Deiner Datei anzupassen.

3. Welche Excel-Version wird benötigt?
Das Beispiel wurde unter Excel 2003 erstellt, funktioniert aber auch unter Excel 2007 und späteren Versionen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige