Mehrere csv-Dateien in eine Excel-Tabelle?

Hallo an Alle,

Ich besitze nur grundlegende VBA-Kenntnisse und hoffe, dass mir jemand helfen kann.
Ich bin auf der Suche nach einem Makro, dass mir alle csv-Dateien, die sich in einem vorgegebenen Ordner befinden, automatisch in eine normale Excel-Tabelle untereinander importiert. Diese csv-Dateien sind alle gleich aufgebaut.
Ich habe schon verschiedene Lösungsansätze versucht und in diversen Foren gesucht. Leider schaffe ich es nicht, das Ganze nach meinen Vorstellungen umzusetzen. Ein großes Problem ist dabei, dass in meinen Versuchen die csv-Daten nachdem Import in den ersten beiden Spalten der Excel-Tabelle stehen und nicht aufgeteilt in den einzelnen Spalten.

Für jede Hilfe bin ich euch dankbar.

Moin, Teltorion,

dass in meinen Versuchen die csv-Daten nachdem Import
in den ersten beiden Spalten der Excel-Tabelle stehen und
nicht aufgeteilt in den einzelnen Spalten.

das wird an den Trennzeichen liegen, die musst Du selbst festlegen (Externe Daten > Textdateie > Trennzeichen > Auswahl). csv kommt bei uns meist mit dem Semicolon als Trennzeichen, bei den Amis mit Comma. Also vorher die Datei mit einem Editor inspizieren.

Bevor Du VBA bemühst, könntest Du den Prozess mal von Hand ausführen und mit dem Makrorekorder aufnehmen, anschließend das Makro anschauen und frisieren.

Gruß Ralf

Danke für den Tipp mit dem Makrorekorder. So ist es am Anfang für mich leichter.
Leider finde ich unter externe Daten nicht die Auswahl, die du vorgeschlagen hast. Unter Excel 2003 finde ich nur „Externe Daten importieren“ und dann komm ich nicht wirklich weiter, da ich mich nicht so gut auskenne. Oder bin ich da im falschen Menü gelandet?

Oder bin ich da im falschen Menü gelandet?

möglicherweise - ich reite immer noch Office 2000 :frowning:

Gruß Ralf

Ich habs gefunden:smile: danke
Jetzt bräuchte ich aber noch eine Idee wie ich mehrere Dateien hintereinander auswählen kann. Die csv-Dateien sind im einen Ordner.Die Namen und die Anzahl der csv-Dateien ändern sich regelmäßig (neue Dateien werden eingefügt, ältere gelöscht). Weiß leider nicht wie ich das in VBA bewerkstelligen könnte.
Danke für jede Hilfe.

Ich bin auf der Suche nach einem Makro, dass mir alle
csv-Dateien, die sich in einem vorgegebenen Ordner befinden,
automatisch in eine normale Excel-Tabelle untereinander
importiert. Diese csv-Dateien sind alle gleich aufgebaut.

Hallo Teltorion,

alt+F11, Einfügen—Modul, Code reinkopieren, ggfs. im Code Anpassungen vornehmen, Editor schließen.
Alt+F8, Makro „CSVEinlesen“ ausführen lassen.

Die Codezeile
'Call Loesch
ist durcj had Hochkomma noch inaktiv. Das noch folgenden Grund, überprüfe alle geöffneten csv-Mappen, ob da auch in Spalte A unten die allerunterste gefüllte Zelle des ganzen Blattes ist.
Denn der Code prüft nur Spalte A ab.

Sag also Bescheid, wenn unterhalb von Ax noch in anderen Spalten Werten stehen, dann muß man den Code umschreiben.
Genauso sag bescheid wenn auch die Mappennamenn mit erfasst werden sollen in der Zusammenfassung und wohin sie geschrieben werden sollen.

Wenn alles klar ist, mach das Hochkomma weg.

Gruß
Reinhard

Option Explicit

Sub CSVEinlesen()
Dim fs As FileSearch, ZeiQ As Long, ZeiZ As Long, F As Integer
Dim wksQ As Worksheet, wksZ As Worksheet
Set wksZ = ThisWorkbook.Worksheets("Tabelle1") 'Anpassen
Set fs = Application.FileSearch
On Error GoTo hell
Call Loesch
Application.ScreenUpdating = False
With fs
 .LookIn = "C:\test" 'Anpassen
 .SearchSubFolders = False 'Anpassen
 .Filename = "\*.csv"
 If .Execute() \> 0 Then
 For F = 1 To .FoundFiles.Count
 ZeiZ = wksZ.Cells(Rows.Count, 1).End(xlUp).Row + 1
 If ZeiZ = 2 Then ZeiZ = 1
 Workbooks.Open Filename:=.FoundFiles(F), Format:=4 '4=Semikolon 'Anpassen
 ZeiQ = ActiveWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
 ActiveWorkbook.Worksheets(1).Rows("1:" & ZeiQ).Copy Destination:=wksZ.Cells(ZeiZ, 1)
 Next F
 Else
 MsgBox "There were no CSV files found in c:\test."
 End If
 'Call Loesch
End With
hell:
If Err.Number 0 Then
 MsgBox ActiveWorkbook.Name & vbCr & Err.Number & vbCr & Err.Description
End If
Application.ScreenUpdating = True
End Sub

Sub Loesch()
Dim wkb As Workbook
Application.ScreenUpdating = False
For Each wkb In Workbooks
 If wkb.Name Like "\*.csv" Then
 wkb.Close savechanges:=False
 End If
Next wkb
Application.ScreenUpdating = True
End Sub

Hallo Reinhard,

erstmal vielen vielen Dank für deine Hilfe. Leider war ich am Wochenende verreist und habe deinen Artikel heute erst gelesen.

Habe das Makro eingefügt, angepasst und getestet.

Sag also Bescheid, wenn unterhalb von Ax noch in anderen
Spalten Werten stehen, dann muß man den Code umschreiben.

In Spalte A steht immer ein Wert drin, sprich in jedem Datensatz. Hier müssen keine Anpassungen vorgenommen werden.

Genauso sag bescheid wenn auch die Mappennamenn mit erfasst
werden sollen in der Zusammenfassung und wohin sie geschrieben
werden sollen.

So wie das Makro momentan arbeitet, reicht es vollkommen aus.

Leider werden die Datensätze der csv-Dateien in Excel in die ersten beiden Spalten eingefügt. Wie kann das angepasst werden?
Wenn ich eine einzelne csv-Datei über Excel öffne, sind alle Werte in den Spalten sauber angeordnet. So sollte es auch nach der Makroausführung in der Excel-Datei aussehen.

Kann man das Makro noch so anpassen, dass die Datensätze der csv-Dateien ab der 2.Zeile „kopiert“ werden und dann in Excel ebenfalls ab der 2.Zeile eingefügt werden.

Vielen Dank nochmal für Alles :smile:

Grüße

Hallo Teltorion,

Leider werden die Datensätze der csv-Dateien in Excel in die
ersten beiden Spalten eingefügt. Wie kann das angepasst
werden?

Das wird an den Trennzeichen liegen. Die kenne ich nicht aus der Ferne.
Du hast doch begrenzt Einfluß mit
Format:=4 '4=Semikolon

Ggfs. die beiden Spalten nochmals mit Text in Spalten trennen.
Kannst das ja machen und dabei ein makro aufzeichnen und den Code hier zeigen wenn es sauber trennt.

Grundproblem wird wohl sein, wenn das Trennzeichen das Semikolon hats szischen Spalten und du hast aber auch Semikolons in den Zellen als Text.

Im Notfall, muß man dann die CSVs per Vba-Code einlesen und selbst auftrennen.
Dazu muß man aber wissen wie die CSV aufgebaut ist mit Trennzeichen usw.

Kann man das Makro noch so anpassen, dass die Datensätze der
csv-Dateien ab der 2.Zeile „kopiert“ werden und dann in Excel
ebenfalls ab der 2.Zeile eingefügt werden.

Schreib in die For-Schleife dieses:

 ZeiZ = wksZ.Cells(Rows.Count, 1).End(xlUp).Row + 1
 Workbooks.Open Filename:=.FoundFiles(F), Format:=4 '4=Semikolon 'Anpassen
 ZeiQ = ActiveWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
 ActiveWorkbook.Worksheets(1).Rows("2:" & ZeiQ).Copy Destination:=wksZ.Cells(ZeiZ, 1)

Gruß
Reinhard