Anzeige
Archiv - Navigation
836to840
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
836to840
836to840
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten aus CSV-Dateien einlesen

Daten aus CSV-Dateien einlesen
22.01.2007 22:55:46
Patrick
Servus zusammen...
habe ein für mich, auch mit Hilfe der Suchfunktion, nicht lösbares Makro-Problem...
Ich habe eine Excel-Datei (Excel 2002) mit 5 Tabellenblättern
"1.Quartal" bis "5.Quartal" die mit Daten aus 5 CSV-Dateien befüllt werden sollen.
Die Daten aus der ersten CSV-Datei (immer alle Daten aus "Tabelle1) in das Tabellenblatt "1.Quartal" die aus der zweiten CSV-Datei in "2.Quartal" usw.
Bisher habe ich das mit Copy & Paste gemacht (alles markiert, kopiert und dann in das Tabellenblatt z.B. "1.Quartal" eingefügt...Datenenge ist ca. 100 Spalten x 80 Zeilen...
Das wollte ich jetzt mit einem Makro bzw einer Schaltfläche automatisieren...
Die CSV-Dateien liegen im gleichen Ordner wie die Excel-Datei und heisen "Auswertung1.csv" ... "Auswertung2.csv" etc...(der Ordner sollte aber beliebig benannt werden können ... es gibt somit keinen fixen Pfad für den Ordner)
Kann mir dabei jemand helfen?
- auslesen des Pfades
- kopiern der Daten
- einfügen der Daten
Auch das Einlesen der Daten pro Tabellenblatt wäre schon eine große Erleichterung...
Hoffe es kann mir jemand helfen...
Grüße, Pattes

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus CSV-Dateien einlesen
22.01.2007 22:58:52
Horst
"1.Quartal" bis "5.Quartal"
Neue Zeitrechnung, oder wie ist das zu sehen, in Deutschland gibt es 4 Quartale.
mfg Horst
AW: Daten aus CSV-Dateien einlesen
22.01.2007 23:05:01
Patrick
Hallo Horst...
das ein Jahr 4 Quartale hat ist im schon bewußt... ;-)
aber das fünfte ist sozusagen ein Vergleichsquartals aus dem letzten Jahr...
und 4 + 1 gibt 5 ... ergo 5 Quartale :-)
Grüße, Pattes
AW: Daten aus CSV-Dateien einlesen
23.01.2007 07:18:56
haw
Hallo Pattes,
hier eine Möglichkeit:

Sub QuartaleEinlesen()
Dim wb As Workbook, ws As Worksheet, wsQ As Worksheet
Dim i%, Nr$, efz%, lz%
Application.ScreenUpdating = False
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\"
.FileType = msoFileTypeAllFiles
.Filename = "Auswertung*.csv"
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
Application.StatusBar = Dir(.FoundFiles(i)) & " wird eingelsen ..."
Nr = Mid(Dir(.FoundFiles(i)), 11, 1)
Set wsQ = ThisWorkbook.Worksheets(Nr & ".Quartal")
efz = wsQ.Cells(Rows.Count, 1).End(xlUp).Row + 1
Set wb = Workbooks.Open(Filename:=.FoundFiles(i))
Set ws = wb.Worksheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row
ws.Range("A1:EZ80").Copy wsQ.Cells(efz, 1)
wb.Close False
Next i
End If
End With
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

Nachdem ich nicht wusste, welcher Bereich genau einzulesen ist, habe ich den Bereich A1:EZ80 genommen und in die jeweilige Quartalstabelle ab A1 kopiert.
Gruß Heinz
Anzeige
AW: Daten aus CSV-Dateien einlesen
23.01.2007 09:44:00
Patrick
Hallo Heinz,
vielen Dank für deine schnelle Antwort...
leider funktioniert es noch nicht ganz...
Vielleicht liegt es an mir...
1. Habe ich mich geirrt... das Tabellenblatt der CSV-Dateien ist immer gleich benannt
wie die Datei...
2. Die Dabellenblätter in der Excel-Datei heißen "1. Quartal"; "2. Quartal"... also mit einem "Leerzeichen" zwischen "." und "Quartal"...
In Zeile 13 bricht das Makro mit "Laufzeitfehler 9" "Index außerhalb des gültigen Bereichs" ab... siehe unten...
1

Sub QuartaleEinlesen()
2    Dim wb As Workbook, ws As Worksheet, wsQ As Worksheet
3    Dim i%, Nr$, efz%, lz%
4    Application.ScreenUpdating = False
5    With Application.FileSearch
6        .LookIn = ThisWorkbook.Path & "\"
7        .FileType = msoFileTypeAllFiles
8        .Filename = "Auswertung*.csv"
9        If .Execute() > 0 Then
10           For i = 1 To .FoundFiles.Count
11                Application.StatusBar = Dir(.FoundFiles(i)) & " wird eingelsen ..."
12               Nr = Mid(Dir(.FoundFiles(i)), 11, 1)
13                Set wsQ = ThisWorkbook.Worksheets(Nr & ".Quartal")
efz = wsQ.Cells(Rows.Count, 1).End(xlUp).Row + 1
Set wb = Workbooks.Open(Filename:=.FoundFiles(i))
Set ws = wb.Worksheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row
ws.Range("A1:EZ80").Copy wsQ.Cells(efz, 1)
wb.Close False
Next i
End If
End With
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

hoffe jemand kann mir hier weiterhelfen...
Grüße, Pattes
Anzeige
AW: Daten aus CSV-Dateien einlesen
23.01.2007 09:50:42
haw
Hallo Pattes,
du hast Recht, hier gehört ein Leerzeichen hinein, also:

Sub QuartaleEinlesen()
Dim wb As Workbook, ws As Worksheet, wsQ As Worksheet
Dim i%, Nr$, efz%, lz%
Application.ScreenUpdating = False
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\"
.FileType = msoFileTypeAllFiles
.Filename = "Auswertung*.csv"
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
Application.StatusBar = Dir(.FoundFiles(i)) & " wird eingelsen ..."
Nr = Mid(Dir(.FoundFiles(i)), 11, 1)
Set wsQ = ThisWorkbook.Worksheets(Nr & " .Quartal")
efz = wsQ.Cells(Rows.Count, 1).End(xlUp).Row + 1
Set wb = Workbooks.Open(Filename:=.FoundFiles(i))
Set ws = wb.Worksheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row
ws.Range("A1:EZ80").Copy wsQ.Cells(efz, 1)
wb.Close False
Next i
End If
End With
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

Gruß Heinz
Anzeige
AW: Daten aus CSV-Dateien einlesen
23.01.2007 10:06:10
Patrick
Hallo Heinz,
leider bricht er immernoch an der selben Stelle ab...
finden tut er 5 CSV-Dateien ... nur mit den Tabellenblättern in Excel scheint er Pobleme zu haben...
Grüße, Pattes
AW: Daten aus CSV-Dateien einlesen
23.01.2007 10:18:19
haw
Hallo Pattes,
es kann nur eine Kleinigkeit fehlen.
Mit Nr = Mid(Dir(.FoundFiles(i)), 11, 1) lese ich die Nummer aus dem csv-Dateinamen aus, also das elfte Zeichen. Sollte dein Dateinamen doch etwas anders aussehen, dann stimmt das Ganze natürlich nicht mehr. Das Wort "Auswertung" hat 10 Buchstaben, also ist die Nummer das 11. Zeichen. Dieses füge ich in der Zeile
Set wsQ = ThisWorkbook.Worksheets(Nr & " .Quartal")
mit " .Quartal" zusammen, also z.B. Auswertung1.csv ergibt 1 .Quartal - was auch falsch ist, da der Punkt ja bei der Zahl und nicht bem Wort Quartal steht alsonoch einmal:

Sub QuartaleEinlesen()
Dim wb As Workbook, ws As Worksheet, wsQ As Worksheet
Dim i%, Nr$, efz%, lz%
Application.ScreenUpdating = False
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\"
.FileType = msoFileTypeAllFiles
.Filename = "Auswertung*.csv"
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
Application.StatusBar = Dir(.FoundFiles(i)) & " wird eingelsen ..."
Nr = Mid(Dir(.FoundFiles(i)), 11, 1)
Set wsQ = ThisWorkbook.Worksheets(Nr & ". Quartal")
efz = wsQ.Cells(Rows.Count, 1).End(xlUp).Row + 1
Set wb = Workbooks.Open(Filename:=.FoundFiles(i))
Set ws = wb.Worksheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row
ws.Range("A1:EZ80").Copy wsQ.Cells(efz, 1)
wb.Close False
Next i
End If
End With
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

Jetzt sollte es klappen
Gruß Heinz
Anzeige
AW: Daten aus CSV-Dateien einlesen
23.01.2007 11:01:09
Patrick
Hallo Heinz,
vielen Dank erstmal... klappt jetzt auch schon fast ...
Das Einlesen scheint jetzt zu funktioniern, er zeigt es zumindest unten links an...
aber er kopiert die Daten nicht in die jeweiligen Tabellenblätter der Excel-Datei...
Den Copy-Befehl kann ich identifizieren... aber keinen "Paste-Befehl" ... könntest du nochmal draufschauen?
Grüße, Pattes
AW: Daten aus CSV-Dateien einlesen
23.01.2007 11:05:12
Patrick
Hallo Heinz,
vielen Dank erstmal... klappt jetzt auch schon fast ...
Das Einlesen scheint jetzt zu funktioniern, er zeigt es zumindest unten links an...
aber er kopiert die Daten nicht in die jeweiligen Tabellenblätter der Excel-Datei...
Den Copy-Befehl kann ich identifizieren... aber keinen "Paste-Befehl" ... könntest du nochmal draufschauen?
Grüße, Pattes
Anzeige
AW: Daten aus CSV-Dateien einlesen
23.01.2007 11:32:45
haw
Hallo Pattes,
die Zeile
ws.Range("A1:EZ80").Copy wsQ.Cells(efz, 1)
kopiert den Bereich A1:EZ80 aus der Tabelle ws (=Tabelle1 der geöffneten Datei) in den Bereich ab Zeile efz (=erste freie Zeile) der Tabelle wsQ (= Quartalsdatei laut Nummer der geöffneten csv-Datei). Diese einzeilige Schreibweise braucht keine weiteren Zeilen.
Versuche einmal dieses:

Sub QuartaleEinlesen()
Dim wb As Workbook, ws As Worksheet, wsQ As Worksheet
Dim i%, Nr$, efz%, lz%
Application.ScreenUpdating = False
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\"
.FileType = msoFileTypeAllFiles
.Filename = "Auswertung*.csv"
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
Application.StatusBar = Dir(.FoundFiles(i)) & " wird eingelsen ..."
Nr = Mid(Dir(.FoundFiles(i)), 11, 1)
Set wsQ = ThisWorkbook.Worksheets(Nr & ". Quartal")
MsgBox wsQ.name
efz = wsQ.Cells(Rows.Count, 1).End(xlUp).Row + 1
Set wb = Workbooks.Open(Filename:=.FoundFiles(i))
Set ws = wb.Worksheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row
ws.Range("A1:EZ80").Copy wsQ.Cells(efz, 1)
wb.Close False
Next i
End If
End With
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

Ich habe eine Zeile MsgBox wsQ.name eingefügt, mit der dir der Name der Quartalstabelle angezeigt wird, überprüfe, ob es der richtige ist.
Ich habe es eben noch einmal probiert, es klappt!
Gruß Heinz
Anzeige
AW: Daten aus CSV-Dateien einlesen
23.01.2007 11:59:52
Patrick
Hallo Heinz,
war mein Fehler... dachte, dass das was bisher in der Tabelle steht überschrieben wird... das Einlesen klappt jetzt...
Die Formatierung stimmt leider nicht, es werden die Daten aus mehreren Zellen der CSV-Datei in eine Zelle der Excel-Tabelle geschrieben und myriaden von ";;;;;;;" angezeigt.
Das passiert beim manuellen "alles markieren; Copy; Paste" nicht...gibt es dafür auch eine Lösung?
ansonsten ist es genau so wie ich mir das ausgemalt hatte...
Grüße, Pattes
AW: Daten aus CSV-Dateien einlesen
23.01.2007 12:12:54
haw
Hallo Pattes,
natürlich kann man das umgehen, es nur notwendig, genau zu wissen, was in der Datei steht und was daraus eingelesen werden soll.
Ebenso ist festzulegen, ob der Inhalt der jeweiligen Quartalstabelle überschrieben oder der Inhalt der Auswertungsdatei angehängt werden soll.
Das was ich dir geschrieben habe, waren eben ein nur paar Annahmen.
Also liefere alle Details, dann bekommst du auch genau das was du brauchst.
Gruß Heinz
Anzeige
AW: Daten aus CSV-Dateien einlesen
23.01.2007 13:06:15
Patrick
Hallo Heinz,
das mit den Details ist nicht ganz so einfach... aber ich versuche es mal...
In der CSV-Datei stehen die Daten in separaten Zellen, nach dem Einlesen
stehen zum Teil mehrere in einer Zelle.... aber so wie ich das erkennen kann,
sind alle Zelleneinträge der CSV-Datei mit ";" abgetrennt...
Bsp.: CSV-Datei: Jan. Feb. Mär. - je in einer Zelle
Excel-Datei Jan.;Feb.;Mär.; - alles in einer Zelle
Die Daten in der Excel-Datei (Tabelle "1. Quartal" etc.) könne jedesmal überschrieben werden...
Hoffe das die Erklärung verständlich ist... für einen Nichtprogrammierer ist das nicht so einfach...
Grüße und Danke für deine Mühe, Pattes
Anzeige
AW: Daten aus CSV-Dateien einlesen
23.01.2007 13:44:16
haw
Hallo Pattes,
ohne genaue Kenntnisse der Situation ist es fast unmöglich eine genaue Lösung zu liefern.
Eine CSV-Datei (CommaSeparatedValue) ist eine Textdatei, d.h. sie hat keine Zellen. Dass "alles in eine Zelle" eingelesen wird, ist eigentlich ein Excel-Bug.
Man kann die csv-Datei in eine txt-Datei umbennen und als Text einlesen, dann hat man wieder alles in einzelnen Zellen, wie aus Excel gewohnt.
Dass sich in der csv-Datei Zeilen mit lauter Semikola befinden, hat seine Ursache in der nicht ganz korrekten Speicherung einer Exceltabelle als csv-Datei. Es hat seine Ursache darin, dass an und für sich leere Zeilen mitgespeichert werden.
Ich habe hier ein paar Sachen geändert:
Datei wird in txt kopiert, eingelesen und dann wieder gelöscht
Zieltabelle wird immer überschrieben
Nur der benutzte Bereich der Auswertungsdatei wird eingelesen
Die alten Codezeilen habe ich auskommentiert

Sub QuartaleEinlesen()
Dim wb As Workbook, ws As Worksheet, wsQ As Worksheet
Dim i%, Nr$, efz%, lz%, AuswDatei1$, AuswDatei2$
Application.ScreenUpdating = False
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\"
.FileType = msoFileTypeAllFiles
.Filename = "Auswertung*.csv"
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
Application.StatusBar = Dir(.FoundFiles(i)) & " wird eingelsen ..."
Nr = Mid(Dir(.FoundFiles(i)), 11, 1)
Set wsQ = ThisWorkbook.Worksheets(Nr & ". Quartal")
'                MsgBox wsQ.Name
'                efz = wsQ.Cells(Rows.Count, 1).End(xlUp).Row + 1
efz = 1
AuswDatei1 = .FoundFiles(i)
AuswDatei2 = Replace(AuswDatei1, "csv", "txt")
FileCopy AuswDatei1, AuswDatei2
'                Set wb = Workbooks.OpenText(Filename:=AuswDatei2)
Set wb = Workbooks.OpenText(Filename:=AuswDatei2, Origin _
:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True)
Set ws = wb.Worksheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row
wsQ.Cells.ClearContents
'                ws.Range("A1:EZ80").Copy wsQ.Cells(efz, 1)
ws.UsedRange.Copy wsQ.Cells(efz, 1)
wb.Close False
Kill AuswDatei2
Next i
End If
End With
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

Gruß Heinz
Anzeige
AW: Daten aus CSV-Dateien einlesen
23.01.2007 14:13:32
Patrick
Hallo Heinz,
das mit den Details ist nicht ganz so einfach... aber ich versuche es mal...
In der CSV-Datei stehen die Daten in separaten Zellen, nach dem Einlesen
stehen zum Teil mehrere in einer Zelle.... aber so wie ich das erkennen kann,
sind alle Zelleneinträge der CSV-Datei mit ";" abgetrennt...
Bsp.: CSV-Datei: Jan. Feb. Mär. - je in einer Zelle
Excel-Datei Jan.;Feb.;Mär.; - alles in einer Zelle
Die Daten in der Excel-Datei (Tabelle "1. Quartal" etc.) könne jedesmal überschrieben werden...
Hoffe das die Erklärung verständlich ist... für einen Nichtprogrammierer ist das nicht so einfach...
Grüße und Danke für deine Mühe, Pattes
AW: Daten aus CSV-Dateien einlesen
23.01.2007 14:25:43
haw
Hallo Pattes,
das hatten wir schon mal, gibt's was Neues?
Gruß Heinz
AW: Daten aus CSV-Dateien einlesen
23.01.2007 15:28:33
Patrick
Hallo Heinz,
leider funktioniert es noch nicht ganz... er steigt mit der Fehlermeldung
"Funiction oder Variable erwartet" bei(Workbooks.OpenText)aus (siehe ---->)

Sub QuartaleEinlesen()
Dim wb As Workbook, ws As Worksheet, wsQ As Worksheet
Dim i%, Nr$, efz%, lz%, AuswDatei1$, AuswDatei2$
Application.ScreenUpdating = False
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\"
.FileType = msoFileTypeAllFiles
.Filename = "Auswertung*.csv"
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
Application.StatusBar = Dir(.FoundFiles(i)) & " wird eingelsen ..."
Nr = Mid(Dir(.FoundFiles(i)), 11, 1)
Set wsQ = ThisWorkbook.Worksheets(Nr & ". Quartal")
'                MsgBox wsQ.Name
'                efz = wsQ.Cells(Rows.Count, 1).End(xlUp).Row + 1
efz = 1
AuswDatei1 = .FoundFiles(i)
AuswDatei2 = Replace(AuswDatei1, "csv", "txt")
FileCopy AuswDatei1, AuswDatei2
'                Set wb = Workbooks.OpenText(Filename:=AuswDatei2)
hier ---->>     Set wb = Workbooks.OpenText(Filename:=AuswDatei2, Origin _
:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True)
Set ws = wb.Worksheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row
wsQ.Cells.ClearContents
'                ws.Range("A1:EZ80").Copy wsQ.Cells(efz, 1)
ws.UsedRange.Copy wsQ.Cells(efz, 1)
wb.Close False
Kill AuswDatei2
Next i
End If
End With
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

Ist bstimmt "nur" eine Kleinigkeit... aber beheben kann ich es trotzdem nicht...
Grüße, Pattes
AW: Daten aus CSV-Dateien einlesen
23.01.2007 15:39:59
haw
Hallo Pattes,
aber nun, oder ... ;-)

Sub QuartaleEinlesen()
Dim wb As Workbook, ws As Worksheet, wsQ As Worksheet
Dim i%, Nr$, efz%, lz%, AuswDatei1$, AuswDatei2$
Application.ScreenUpdating = False
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\"
.FileType = msoFileTypeAllFiles
.Filename = "Auswertung*.csv"
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
Application.StatusBar = Dir(.FoundFiles(i)) & " wird eingelsen ..."
Nr = Mid(Dir(.FoundFiles(i)), 11, 1)
Set wsQ = ThisWorkbook.Worksheets(Nr & ". Quartal")
efz = 1
AuswDatei1 = .FoundFiles(i)
AuswDatei2 = Replace(AuswDatei1, "csv", "txt")
FileCopy AuswDatei1, AuswDatei2
Workbooks.OpenText Filename:=AuswDatei2, Origin _
:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True
Set wb = ActiveWorkbook
Set ws = wb.Worksheets(1)
lz = ws.Cells(Rows.Count, 1).End(xlUp).Row
wsQ.Cells.ClearContents
ws.UsedRange.Copy wsQ.Cells(efz, 1)
wb.Close False
Kill AuswDatei2
Next i
End If
End With
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

Gruß Heinz
AW: Daten aus CSV-Dateien einlesen
23.01.2007 15:48:30
Patrick
Hallo Heinz,
unglaublich.... es funktioniert... ganz genau so wie ich es mir vorgestellt habe...
leider fehlet es mir an der Fähigkeit es umzusetzen ;-)
Werde mir das mal ganz genau anschauen was das Makro so alles macht... vielleicht komm
ich noch dahinter wie man sowas programmiert...
Vielen Dank nochmal, Pattes

314 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige