csv-Import nebeneinander

Bild

Betrifft: csv-Import nebeneinander
von: Patrick
Geschrieben am: 01.07.2015 17:42:11

Hallo Fachleute,
ich bin wieder dabei eine (besser gesagt hunderte und es kommen täglich neue) csv-Dateien zu importieren.
Meine Aufgabe ist es aber aus der beiliegenden csv-Datei (Spaltentrenner ;) die erste und die zwanzigste Spalte von Zeile 1 bis Zeile EOF nach Excel zu importieren. Zusätzlich soll dann noch in der Spalte C der importierte Dateiname dokumentiert werden.
Beim Import der nächsten csv-Datei soll unter die letzte Zeile eine Leerzeile und dann die nächste csv-Datei angefügt werden.
Ich habe mir Teilmakros aus dem Forum "zusammengelesen" aber das funzt nicht. Vermutlich liegt es auch an den unterschiedlichen Variablen die hier übergeben werden müssen.
Hier ist eine Beispiel-csv: https://www.herber.de/bbs/user/98584.txt
Die Formatierung in der Excel-Tabelle ist noch im Aufbau. Aber der Import der csv-Dateien würde schon sehr helfen.
Vielleicht geht das mit einer Schleife auch so, dass direkt alle csv-Dateien die sich im besagten Verzeichnis befinden importiert werden?
Danke für eure Gedanken und eure Zeit.
Patrick

Bild

Betrifft: AW: csv-Import nebeneinander
von: Michael
Geschrieben am: 01.07.2015 18:35:45
Hi Patrick,
hier https://www.herber.de/forum/archiv/1428to1432/t1430780.htm#1430780
wird eine sehr ähnliche Thematik diskutiert.
Bist Du sicher, daß Du die Spalte 20 willst? Ich sehe da nur 0en.
Ich würde den Import in ein Blatt "Temp" vornehmen und von dort die zwei Spalten kopieren.
Die Kernfunktion in Sepps Code findest Du im Hauptmenü unter Daten, externe Daten abrufen, Text. Weil Deine Daten anders strukturiert sind, könntest Du das mit dem Makrorekorder aufzeichnen und im Code entsprechend ersetzen.
Guck mal, ob Du damit zurechtkommst.
Schöne Grüße,
Michael

Bild

Betrifft: AW: csv-Import nebeneinander
von: Patrick
Geschrieben am: 06.07.2015 18:22:43
Hallo MIchael,
danke für den Link. Aber so wie ich es verstehe, geht an meinem Thema vorbei. Oder ich schaffe es nicht in dem Amkro das zu erkennen, was ich ändern müsste.
Die Spalte 20 ist falsch, das sollte die Spalte 18 sein. Pardon.
In dem Beispiel wird noch nach einer "1" gesucht; ich hingegen benötige die letzte nach dem Import die letzte beschriebene Zeile, danach eine Leerzeile und dann die nächste csv-Datei mit Spalte A (Station), B(Nummer), Spalte 18 (Messwert), Dateiname aus der csv-Datei.
Hast du und ihr noch eine andere Idee?
Danke,
Patrick

Bild

Betrifft: AW: csv-Import nebeneinander
von: Sepp
Geschrieben am: 06.07.2015 22:23:55
Hallo Patrick,

' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub import_CSV()
  Dim strPath As String, strFile As String
  Dim lngNext As Long
  
  With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = "D:\"
    .Title = "PDF-Export Ordnerauswahl"
    .ButtonName = "Auswahl..."
    .InitialView = msoFileDialogViewList
    If .Show = -1 Then
      strPath = .SelectedItems(1)
      If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    End If
  End With
  
  If Len(strPath) Then
    Range("A2:B" & Rows.Count) = ""
    lngNext = 2
    strFile = Dir(strPath & "*.csv", vbNormal)
    Do While strFile <> ""
      With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strPath & strFile, Destination:=Cells(lngNext, 1))
        .Name = strFile
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
      End With
      
      lngNext = Application.Max(lngNext, Cells(Rows.Count, 1).End(xlUp).Row + 2)
      strFile = Dir
    Loop
  End If
End Sub


Gruß Sepp


Bild

Betrifft: AW: csv-Import nebeneinander
von: Patrick
Geschrieben am: 07.07.2015 08:35:39
Hallo Sepp,
danke für dein script. Ich werde es im laufe des Tages mal testen.
Mich irritieren gerade die Zeilen "pdf-Export" und "ButtonName".
Muss ich hier erst noch einen Button in meinem Excel-Reiter anlegen?
Gruß,
Patrick

Bild

Betrifft: AW: csv-Import nebeneinander
von: Sepp
Geschrieben am: 07.07.2015 08:38:11
Hallo Patrick,
das ist nur der Titel des Ordner-Dialoges und die Beschriftung des Buttons desselben.
Habe ich nur vergessen anzupassen, aber das kannst du ja selber machen.

Gruß Sepp


Bild

Betrifft: AW: csv-Import nebeneinander
von: Patrick
Geschrieben am: 07.07.2015 22:00:02
Hallo Sepp,
okay. Verstanden. Hat auch geklappt...wo muss ich denn nun noch die Schleife einbauen, die mir den Dateinamen in die dritte Spalte schreibt? Der fehlt mir noch...
Danke!
Patrick

Bild

Betrifft: AW: csv-Import nebeneinander
von: Sepp
Geschrieben am: 07.07.2015 22:22:17
Hallo Patrick,
nix Schleife.

' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub import_CSV()
  Dim strPath As String, strFile As String
  Dim lngNext As Long, lngStart As Long
  
  With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = "D:\"
    .Title = "CSV-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
    Range("A2:C" & Rows.Count) = ""
    lngNext = 2
    strFile = Dir(strPath & "*.csv", vbNormal)
    Do While strFile <> ""
      With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strPath & strFile, Destination:=Cells(lngNext, 1))
        .Name = strFile
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
      End With
      lngStart = lngNext
      lngNext = Application.Max(lngNext, Cells(Rows.Count, 1).End(xlUp).Row)
      Range(Cells(lngStart, 3), Cells(lngNext, 3)) = strFile
      lngNext = lngNext + 2
      strFile = Dir
    Loop
  End If
End Sub


Gruß Sepp


Bild

Betrifft: AW: csv-Import nebeneinander
von: Patrick
Geschrieben am: 08.07.2015 06:54:30
Morgen Sepp,
herzlichen Dank! Super! Funktioniert!
Jetzt "trau" ich mich nicht weiter zu fragen, jetzt muss ich auch mal selber weitermachen. Es bleibt eine beeindruckende Sache: Makro und VBA....aber es will noch nicht so ganz in meinen Kopf rein.
Danke ..und bis zum nächsten Mal ;-)
Patrick

 Bild

Beiträge aus den Excel-Beispielen zum Thema "csv-Import nebeneinander"