Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1460to1464
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Einlesen von bestimmten Datensätze aus Verzeichnis

Einlesen von bestimmten Datensätze aus Verzeichnis
10.12.2015 08:07:08
bestimmten
Hallo,
ich habe eine Liste mit Produktnummern (alphanummerisch,Spalte A). Zu diesen Produktnummern würde ich gerne Tagespreise ergänzen und zwar in den Spalten ab B. Die betreffenden Tagespreise befinden sich in bestimmten Tagesdateien (Quelle.xlsx) , die identisch aufgebaut sind und identische Dateinamen haben. Im Tabellenblatt "Werte" und dort in der Spalte A befindet sich die Produktnummer (Alphanumerisch)und in Spalte E der Preis. Diese Tagesdateien liegen in Ordnern mit folgender Syntax: Jahr_Monat_Tag. Also z. B. 2015\2015_12\04.
Ich würde gerne die Werte aus einem Monatsordner dazuspielen, es würde also reichen, wenn man alle Dateien mit dem Namen Werte.xls im Monatsordner 2015\2015_12 durchsuchen würde. Sollte die Produktnummer nicht in allen Dateien vorhanden sein, dann sollte ein Leerzelle ausgegeben werden. Als Spaltenkopf wäre der Pfad der durchsuchten Datei denkbar, oder aber der Wert, der sich in Spalte D der Quelldatei befindet (Tagesdatum), was wohl übersichtlicher wäre.
Ich habe Analysedatei und Quelldatei angehängt.
https://www.herber.de/bbs/user/102146.xlsx
https://www.herber.de/bbs/user/102145.xlsx
Viele Grüße
Bernd

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einlesen von bestimmten Datensätze aus Verzeichnis
10.12.2015 19:42:24
bestimmten
Hallo Bernd,
folgenden Code in ein allgemeines Modul der Analyse-Datei. Im Code das Startverzeichnis zur Ordnerauswahl anpassen!
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub import()
Dim objFSO As Object, objFolder As Object, objSub As Object, objFile As Object
Dim strPath As String, strFormula As String, strRef As String
Dim lngLast As Long, lngCol As Long
Dim CalculationMode As Long

On Error GoTo ErrorHandler

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  CalculationMode = .Calculation
  .Calculation = xlManual
  .DisplayAlerts = False
End With

With Application.FileDialog(msoFileDialogFolderPicker)
  .InitialFileName = "E:\Forum\Test\2015" 'Startverzeichnis anpassen!
  .Title = "Import - Ordnerauswahl"
  .ButtonName = "Import Starten"
  .InitialView = msoFileDialogViewList
  If .Show = -1 Then
    strPath = .SelectedItems(1)
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
  End If
End With

If Len(strPath) Then
  With Sheets("Analyse")
    With .Range(.Cells(1, 2), .Cells(1, .Columns.Count)).EntireColumn
      .Clear
      .ColumnWidth = 10.71
    End With
    lngLast = Application.Max(2, .Cells(Rows.Count, 1).End(xlUp).Row)
    lngCol = 2
    Set objFSO = CreateObject("Scripting.Filesystemobject")
    Set objFolder = objFSO.getfolder(strPath)
    For Each objSub In objFolder.SubFolders
      Set objFile = objFSO.getFile(objSub.Path & "\Quelle.xlsx")
      If Not objFile Is Nothing Then
        strRef = "'" & objSub.Path & "\[Quelle.xlsx]Werte'!"
        strFormula = "=INDEX(" & strRef & "$D:$D,MATCH(A2," & strRef & "$A:$A,0))"
        With .Range(.Cells(2, lngCol), .Cells(lngLast, lngCol))
          .Formula = strFormula
          .Value = .Value
        End With
        With .Cells(1, lngCol)
          .Formula = "=" & strRef & "E2"
          .Value = .Value
          .NumberFormat = "m/d/yyyy"
        End With
        lngCol = lngCol + 1
      End If
      Set objFile = Nothing
    Next
  End With
  MsgBox "Daten wurden importiert!", vbInformation
End If

ErrorHandler:

With Err
  If .Number <> 0 Then
    MsgBox "Fehler in Prozedur:" & vbTab & "'nn'" & vbLf & String(25, "—") & _
      vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
      "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
      .Description & vbLf, 81968, "VBA - Fehler in Prozedur - import", .HelpFile, .HelpContext
    .Clear
  End If
End With

On Error GoTo 0

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .Calculation = CalculationMode
  .DisplayAlerts = True
  .StatusBar = False
End With

Set objFSO = Nothing
Set objFolder = Nothing
End Sub

Gruß Sepp

Anzeige
AW: Einlesen von bestimmten Datensätze aus Verzeichnis
11.12.2015 09:50:36
bestimmten
Hallo Sepp,
klappt wie immer hervorragend! Nur noch 2 Dinge:
1. Kann man #NV durch Leerstelle ersetzen?
2. Könnte man in der Analysedatei noch eine Spalte nach rechts rücken, so dass die Daten ab Spalte C aus der Quelle gelesen werden?
Vielen Dank schon mal!
Bernd

Änderung in Code
11.12.2015 10:09:20
Sepp
Hallo Bernd,
zu 1: ändere die Zeile
lngCol = 3
Zu 2: ändere die Formel
strFormula = "=IFERROR(INDEX(" & strRef & "$D:$D,MATCH(A2," & strRef & "$A:$A,0)),"""")"
Gruß Sepp

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige