Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Mehrere CSV Dateien in Excel importieren

Mehrere CSV Dateien in Excel importieren
28.01.2013 14:52:11
chandler
Hallo Forum,
ich habe das nachfolgende Makro meinen Bedürfnissen zum Teil angepasst.
Da ich um die 5000 CSV Dateien habe, würde ich gerne die als einzelne XLS Dateien
speichern unter dem gleichen Namen wie die bereits eingelesene CSV.
Noch besser, wenn es möglich wäre, in einer Scheife das ganze Verzeichnis mit den CSV’s einlesen und als XLS Dateien abspeichern.
Kann mir jemand helfen?
Sub Makro1()
Dim sPfad As String
Dim oQuery As QueryTable
If Dir("D:\Test", vbDirectory)  "" Then
ChDrive "D:"
ChDir "D:\Test"
sPfad = Application.GetOpenFilename("CSV Files (*.csv), *.csv")
If sPfad  CStr(False) Then
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & sPfad, Destination:=Range("A1"))
.Name = "sPfad"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = " "
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
For Each oQuery In ActiveSheet.QueryTables
oQuery.Delete
Next oQuery
With Rows("1:1")
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
Cells.Columns.AutoFit
Range("A1").Select
End If
Else
MsgBox "Der Pfad 'D:\Test' wurde nicht gefunden!", vbCritical
End If
End Sub
Vielen dank im Voraus. chandler

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Mehrere CSV Dateien in Excel importieren
28.01.2013 15:04:29
Daniel
HI
beispielsweise mit Hilfe der DIR-Funktion:
sPfad = dir("D:\Test\*.csv)
Do While sPfad  ""
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & "D:\Test\" & sPfad, Destination:=Range("A1"))
sPfad = Dir()
Loop

Gruß Daniel

Anzeige
AW: Mehrere CSV Dateien in Excel importieren
28.01.2013 15:23:19
chandler
Hallo Daniel,
vielen Dank. Hier mein Modifiziertes Makro.
Leider werden die einzelnen CSV Dateien in ein Tabellenblatt eingelese (importiert).
Ich hätte gerne das jede einzelne CSV in eine einzelne (separete) XLS importiert wird.
Sub Makro1()
Dim sPfad As String
sPfad = Dir("D:\Test\*.csv")
Do While sPfad  ""
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & "D:\Test\" & sPfad, Destination:=Range("A1"))
Name = "sPfad"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = " "
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
sPfad = Dir()
Loop
End Sub
Vielen Dank im Voraus. chandler

Anzeige
AW: Mehrere CSV Dateien in Excel importieren
28.01.2013 16:05:38
Daniel
Hi
nach dem Importieren einfach die Datei als CSV-Datei speichern
ActiveWorkbook.SaveAs Replace("D:\Test\" & sPfad, ".csv", ""), Fileformat:=xlnormal
die Zeile kommt dann vor das sPfad = Dir()
Gruß Daniel

AW: Mehrere CSV Dateien in Excel importieren
28.01.2013 16:28:34
chandler
Hallo Daniel,
ja, es funktioniert habe jetzt zwei Makros, die funktionieren.
Vielen, vielen Dank. chandler

Anzeige
AW: Mehrere CSV Dateien in Excel importieren
28.01.2013 15:19:40
Rudi
Hallo,
teste mal:
Sub aaaaa()
Dim sFile As String, sPath As String, iFree As Integer
Dim arrCSV, arrTmp, arrXLS(), i As Integer, j As Integer, n As Long
sPath = "c:\temp\"
sFile = Dir(sPath & "*.csv")
Application.ScreenUpdating = False
Do While Len(sFile)
iFree = FreeFile
Open sPath & sFile For Input As iFree
arrCSV = Split(Input(LOF(iFree), iFree), vbCrLf)
Close iFree
For i = 0 To UBound(arrCSV)
arrTmp = Split(arrCSV(i), ";")
n = Application.Max(n, UBound(arrTmp))
Next
ReDim arrXLS(1 To UBound(arrCSV) + 1, 1 To n + 1)
For i = 0 To UBound(arrCSV)
arrTmp = Split(arrCSV(i), ";")
For j = 0 To UBound(arrTmp)
arrXLS(i + 1, j + 1) = arrTmp(j)
Next
Next
With Workbooks.Add
.Sheets(1).Cells(1, 1).Resize(UBound(arrXLS), UBound(arrXLS, 2)) = arrXLS
.SaveAs sPath & Mid(sFile, 1, Len(sFile) - 4), 51
.Close
End With
sFile = Dir
Loop
End Sub

Gruß
Rudi

Anzeige
AW: Mehrere CSV Dateien in Excel importieren
28.01.2013 15:30:08
chandler
Hallo Rudi,
vielen Dank.
Bekomme bei: For i = 0 To UBound(arrCSV) Laufzeitfehler '6' Überlauf.
Die CSV Dateien haben über 50000 Zeilen.
Grüße. chandler

Dim i as Long owT
28.01.2013 15:32:15
Rudi

Korrektur
28.01.2013 15:31:31
Rudi
Hallo,
Version nicht beachtet.
.SaveAs sPath & Mid(sFile, 1, Len(sFile) - 4), xlWorkbookNormal
Gruß
Rudi

Anzeige
AW: Korrektur
28.01.2013 15:43:43
chandler
Hallo Rudi,
ich habe bereits in Excel 2003 aber auch Excel 2010 getestet. Nach wie vor die gleiche Fehlermeldung.
Hie der Code:
Sub aaaaa()
Dim sFile As String, sPath As String, iFree As Integer
Dim arrCSV, arrTmp, arrXLS(), i As Integer, j As Integer, n As Long
sPath = "D:\Test\"
sFile = Dir(sPath & "*.csv")
Application.ScreenUpdating = False
Do While Len(sFile)
iFree = FreeFile
Open sPath & sFile For Input As iFree
arrCSV = Split(Input(LOF(iFree), iFree), vbCrLf)
Close iFree
For i = 0 To UBound(arrCSV)
arrTmp = Split(arrCSV(i), ";")
n = Application.Max(n, UBound(arrTmp))
Next
ReDim arrXLS(1 To UBound(arrCSV) + 1, 1 To n + 1)
For i = 0 To UBound(arrCSV)
arrTmp = Split(arrCSV(i), ";")
For j = 0 To UBound(arrTmp)
arrXLS(i + 1, j + 1) = arrTmp(j)
Next
Next
With Workbooks.Add
.Sheets(1).Cells(1, 1).Resize(UBound(arrXLS), UBound(arrXLS, 2)) = arrXLS
'      .SaveAs sPath & Mid(sFile, 1, Len(sFile) - 4), 51
.SaveAs sPath & Mid(sFile, 1, Len(sFile) - 4), xlWorkbookNormal
.Close
End With
sFile = Dir
Loop
End Sub
Grüße chandler

Anzeige
dim i as long eingebaut? owT
28.01.2013 15:49:54
Rudi

AW: dim i as long eingebaut? owT
28.01.2013 16:10:13
chandler
Hallo Rudi,
es funktioniert, nur noch eins: Die Extensions.xls wird nicht angehängt, so das man manuell ergänzen muss. Wir könnte ich das noch realisieren?
Vielen Dank. chandler

AW: dim i as long eingebaut? owT
28.01.2013 16:14:44
Rudi
Hallo,
so schwer ist das doch nicht.
.SaveAs sPath & Mid(sFile, 1, Len(sFile) - 4) & ".xls", xlWorkbookNormal
Gruß
Rudi

Anzeige
AW: Funktioniert einwandfrei
28.01.2013 16:24:09
chandler
Hallo Rudi,
Alles Bestens. Funktioniert einwandfrei.
Vielen, vielen Dank. Grüße chandler
;

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

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