Daten aus csv auslesen und in andere csv oder xls wegschreiben
Hallo an alle Fachleute und Spezialisten,
ich möchte ein Problem mit VBA lösen und habe in den veröffentlichten Codes immer nur faaast das Passende gefunden.
Hier nun mein spezielles Problem. Ich habe eine Menge csv-Dateien, deren Struktur immer gleich ist. Nur bestimmte Zahlenwerte sind immer verschieden.
Ich möchte jetzt aus jeder csv-Datei z.B. den Wert in Zeile 1000, vor dem ersten Komma (was in Excel A:1000 wäre) auslesen und in eine neue csv-Datei in Zeile 1 an die erste Stelle schreiben. Dann den Wert aus Zeile 1001 in die erste Zeile der neuen csv an die zweite Stelle kommagetrennt usw. Das z.B. bis Zeile 1005 (und alles in die erste Zeile der neuen csv kommagetrennt).
Wenn fertig, kommt die nächste Datei aus der Dateiensammlung ran. Wieder Zeile 1000 bis 1005 auslesen und kommageternnt in die zweite Zeile der neuen csv schreiben usw. bis alle Dateien durch sind.
Ich hoffe, ich konnte die Aufgabe verständlich beschreiben. Übrigens, ich möchte die neu erstellte csv dann mit Excel weiterbearbeiten. Man könnte also auch gleich eine Exceldatei erzeugen und die einzelnen Werte in die Spalten A bis E eintragen. Die nächste Datei muss dann die nächste Zeile füllen.
Schonmal vielen Dank für Eure geschötzte Hilfe.
Gruß
OKIEH-44
ich möchte ein Problem mit VBA lösen und habe in den veröffentlichten Codes immer nur faaast das Passende gefunden.
Hier nun mein spezielles Problem. Ich habe eine Menge csv-Dateien, deren Struktur immer gleich ist. Nur bestimmte Zahlenwerte sind immer verschieden.
Ich möchte jetzt aus jeder csv-Datei z.B. den Wert in Zeile 1000, vor dem ersten Komma (was in Excel A:1000 wäre) auslesen und in eine neue csv-Datei in Zeile 1 an die erste Stelle schreiben. Dann den Wert aus Zeile 1001 in die erste Zeile der neuen csv an die zweite Stelle kommagetrennt usw. Das z.B. bis Zeile 1005 (und alles in die erste Zeile der neuen csv kommagetrennt).
Wenn fertig, kommt die nächste Datei aus der Dateiensammlung ran. Wieder Zeile 1000 bis 1005 auslesen und kommageternnt in die zweite Zeile der neuen csv schreiben usw. bis alle Dateien durch sind.
Ich hoffe, ich konnte die Aufgabe verständlich beschreiben. Übrigens, ich möchte die neu erstellte csv dann mit Excel weiterbearbeiten. Man könnte also auch gleich eine Exceldatei erzeugen und die einzelnen Werte in die Spalten A bis E eintragen. Die nächste Datei muss dann die nächste Zeile füllen.
Schonmal vielen Dank für Eure geschötzte Hilfe.
Gruß
OKIEH-44
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 112644
Url: https://administrator.de/forum/daten-aus-csv-auslesen-und-in-andere-csv-oder-xls-wegschreiben-112644.html
Ausgedruckt am: 25.04.2025 um 13:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo OKIEH-44!
Als Batch etwa so:
bzw doch als VBA-Version:
Grüße
bastla
Als Batch etwa so:
@echo off & setlocal
set "Basis=D:\Deine CSV-Dateien"
set "Typ=csv"
set "Erg=D:\Gesamt"
set /a Von=1000
set /a Bis=1005
set /a sk=Von-1
if exist "%Erg%" del "%Erg%"
for %%i in ("%Basis%\*.%Typ%") do call :ProcessFile "%%i"
move "%Erg%" "%Erg%.%Typ%"
goto :eof
:ProcessFile
set Zeile=
for /f "skip=%sk% tokens=1,2 delims=:," %%a in ('findstr /n "^" %1') do call :ProcessLine %%a "%%b"
>>"%Erg%" echo\%Zeile%
goto :eof
:ProcessLine
if %1 gtr %Bis% goto :eof
set "Zeile=%Zeile%%~2%"
if %1 lss %Bis% set "Zeile=%Zeile%,"
goto :eof
Sub Sammle()
Basis = "D:\Deine CSV-Dateien"
Typ = "csv" 'in Kleinbuchstaben
Von = 1000
Bis = 1005
Zeile = 3 'Daten werden ab dieser Zeile eingetragen
Set fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In fso.GetFolder(Basis).Files
If LCase(fso.GetExtensionname(Datei.Name)) = Typ Then
Spalte = 1'Daten werden ab dieser Spalte eingetragen
Inhalt = Split(Datei.OpenAsTextStream.ReadAll, vbCrLf)
For i = Von - 1 To Bis - 1
Cells(Zeile, Spalte) = Split(Inhalt(i), ",")(0)
Spalte = Spalte + 1
Next
End If
Zeile = Zeile + 1
Next
End Sub
bastla
Hallo OKIEH-44!
Zum Batch: Lass einfach das "skip=%sk%" vor "tokens" weg, dann klappt's auch mit einer "Von"-Zeile 1 (aufgrund Deiner Vorgabe "Zeile 1000" war ich nicht davon ausgegangen, dass Du in Zeile 1 beginnen würdest, und habe versucht, den Ablauf durch Überspringen der ersten 999 Zeilen zu beschleunigen).
Zum Makro: Etwas leichter ginge es, wenn Du auch eine Fehlermeldung anzubieten hättest. Sollte diese Meldung "Variable nicht definiert" lauten, müsstest Du nur ein allfälliges "Option Explicit" entfernen (oder für jede verwendete Variable per "Dim" eine Deklaration vornehmen).
[Edit]
Bei genauerer Betrachtung fällt mir noch die Zeile
auf - diese sollte unverändert geblieben sein, also:
[/Edit]
Grüße
bastla
P.S.: Zum Posten von Batches/Scripts hätte die Forensoftware eine passende ""-Formatierung zu bieten ...
Zum Batch: Lass einfach das "skip=%sk%" vor "tokens" weg, dann klappt's auch mit einer "Von"-Zeile 1 (aufgrund Deiner Vorgabe "Zeile 1000" war ich nicht davon ausgegangen, dass Du in Zeile 1 beginnen würdest, und habe versucht, den Ablauf durch Überspringen der ersten 999 Zeilen zu beschleunigen).
Zum Makro: Etwas leichter ginge es, wenn Du auch eine Fehlermeldung anzubieten hättest. Sollte diese Meldung "Variable nicht definiert" lauten, müsstest Du nur ein allfälliges "Option Explicit" entfernen (oder für jede verwendete Variable per "Dim" eine Deklaration vornehmen).
[Edit]
Bei genauerer Betrachtung fällt mir noch die Zeile
If LCase(fso.GetExtensionname(alle.csv)) = Typ Then
If LCase(fso.GetExtensionname(Datei)) = Typ Then
Grüße
bastla
P.S.: Zum Posten von Batches/Scripts hätte die Forensoftware eine passende ""-Formatierung zu bieten ...