Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
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
CSV-Dateien auslesen
05.03.2016 19:26:33
Rico
Hallo und guten Tag zusammen!
Ich benötige mal eine kompetente Hilfe zum Thema csv-Dateien auslesen:
Aus einer Produktionssoftware bekomme ich insgesamt 15 einzelne csv-Dateien geliefert, die aus jeweils zwei Spalten bestehen. In Spalte 1 steht ein Zeitstempel (im Format TT.MM.JJJJ hh.mm.ss) und in Spalte 2 die entsprechenden Werte. Die verschiedenen Dateien werden immer zum gleichen Zeitpunkt ausgelesen und haben daher alle den gleichen Zeitstempel.
Ich möchte jetzt in einer separaten Datei (.xlsx) alle 15 Rubriken nebeneinander stehen haben. Die jeweiligen Werte darunter. Dabei sollte es neben den Rubriken auch eine getrennte Spalte für das Datum und die Uhrzeit geben.
Leider steht in den csv-Dateien der Name der entsprechenden Rubrik nur im Registernamen und nicht in der Spaltenüberschrift. Der Registername (also die Rubrikenbezeichnung) sollte aber der entsprechenden Spalte zugeordnet werden.
Als besondere Schwierigkeit kommt noch folgendes hinzu: Die Dateien werden aller ein oder zwei Tage ausgelesen, aber zu verschiedenen Uhrzeiten. Idealerweise sollten die Werte aber in ein und derselben Datei stehen. Besteht die Möglichkeit, dass die neu hinzugekommenen Werte unterhalb der bereits eingetragenen Werte eingefügt werden?
Eine Beispieldatei (mit Ausgangsbasis und gewünschter Lösung) habe ich mal angehängt.
Ich benötige einen entsprechenden Automatismus per VBA. Für Lösungsvorschläge für diese „harte Nuss“ bin ich sehr dankbar!
Viele Grüße
Rico
https://www.herber.de/bbs/user/104133.xlsx

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
nur Hinweis
05.03.2016 19:47:25
Michael
Hi Rico,
wäre es wegen der "Zeitverschiebung" nicht geschickter, die beiden Spalten mit Datum & Zeit wegzulassen und die Angaben über jeder einzelnen Spalte zu platzieren?
Userbild
Die Zeitangaben der ersten stimmen mit den anderen ja sowieso nicht überein...
Und: heißen die 15 Datein immer gleich? Oder gibt es einen Ordner, in dem nur diese stehen? Wie verhält sich das?
Schöne Grüße,
Michael

AW: nur Hinweis
05.03.2016 20:13:09
Rico
Hi Michael,
vielen Dank für den Hinweis!
Also die Zeiten sind in jeder der csv-Dateien gleich. Daher ist es besser, wenn Datum und Uhrzeit in jeweils einer Spalte untereinander stehen und die Werte entsprechend rechts davon.
Die csv-Dateien heißen bei jeder Auswertung gleich (Auswertung1, Auswertung2, usw...) und werden in einem separaten Ordner gespeichert. Sobald die Auswertung erfolgt ist, können diese aber verschoben oder überschrieben werden. Sie werden ja dann nicht mehr benötigt. Der Name des Ordners ist immer derselbe.
Ich hoffe, dass diese Erläuterungen hilfreich waren.
Danke und Gruß
Rico

Anzeige
AW: CSV-Dateien auslesen
05.03.2016 23:59:08
Oberschlumpf
Hi Rico
Hier, versuch mal:
https://www.herber.de/bbs/user/104138.xlsm
Ohne Code-Anpassung muss die Test-Datei in dem Verzeichnis gespeichert werden, in dem auch sich die csv-Dateien befinden.
Möchtest du aber die Test-Datei woanders speichern, musst du im Code eine Zeile anpassen.
Diese Zeile ist mit einem Kommentar markiert.
"Anleitung"
Öffne die Datei + starte das enthaltene Makro.
1. Wenn die spätere Übersichtstabelle (hier Tabelle1) noch ganz leer ist, oder wenn später schon Daten enthalten sind, wirst du immer gefragt, ob die Daten erhalten bleiben oder gelöscht werden sollen.
2. Nun wird im Verzeichnis der Test-Datei, oder in dem von dir festgelegtem Verzeichnis, nach csv-Dateien gesucht (und das auch nur in einem dieser Verzeichnisse; es werden keine Unterverzeichnisse durchsucht)
3. Die erste csv-Datei wird per Code in Tabelle2 eingelesen.
Ach so! Du hast nicht verraten, wie die Daten in den csv-Dateien voneinander getrennt sind.
Ich hab TAB-Trennung unterstellt. Wenn zur Trennung ein Komma, Semikolon oder irgdwas anderes verwendet wird, muss der code angepasst werden.
4. Sobald sich die Daten der csv-Datei in den Spalten A + B befinden, wird zuerst der Eintrag in A (Datum + Uhrzeit in der gleichen Zelle) mit Hilfe einer Array-Variable so getrennt, dass diese Werte später in der Übersichtstabelle (Tabelle1) in den Spalten A + B eingetragen werden können.
5. Im nächsten Schritt wird der eigentliche Wert aus Tabelle2, Spalte B nach Tabelle1, Spalte C übertragen.
Dies alles geschieht für alle Zeilen, die in Tabelle2 von der csv-Datei belegt sind.
6. Im letzten Schritt, was die erste csv-Datei betrifft, wird der Dateiname der csv-Datei ohne .csv in C1 eingetragen
(bei folgenden csv-Dateien dann in die jeweils folgenden Spalten, immer Zeile 1)
7. Der Inhalt in Tabelle2 wird gelöscht, und es wird die nächste csv-Datei eingelesen
8. Jetzt aber wird der Eintrag in Spalte A (Datum + Uhrzeit) ignoriert, da sie ja schon in Tabelle1 vorhanden sind.
Es wird nur noch der Wert von Tabelle2, Spalte B nach Tabelle1, nächste freie Spalte übertragen.
Die Schritte wiederholen sich so lange, bis alle csv-Dateien eingelesen wurden.
Hilfts?
Ciao
Thorsten

Anzeige
AW: CSV-Dateien auslesen
06.03.2016 07:36:52
Rico
Hallo Thorsten,
vielen, vielen Dank! Das ist genial! Ich werde das morgen auf Arbeit gleich einmal ausprobieren.
Über den Speicherort der Test-Datei habe ich mir noch keine Gedanken gemacht. das sollte aber kein Problem darstellen. Dank deiner hinterlegten Kommentare und der sehr übersichtlichen Erklärung kann ich ja die entsprechenden Anpassungen vornehmen.
Nochmals ein großes Dankeschön!
Rico

AW: CSV-Dateien auslesen
07.03.2016 11:37:02
Rico
Hallo Thorsten,
ich habe heute den Code ausprobiert. So richtig funktioniert das leider noch nicht. Keine Ahnung, was ich hier falsch mache…
Also, meine Auswertungsdatei liegt im gleichen Verzeichnis, wie die csv-Dateien. Es gibt auch keine Unterverzeichnisse.
Die csv-Dateien haben folgendes Format:
Date/Time Values
01.03.2016 15:40 17,6599998
01.03.2016 15:50 17,9400005
01.03.2016 16:00 20,6800003
01.03.2016 16:10 23,4399986
01.03.2016 16:20 23,1000004
01.03.2016 16:30 22,8999996
01.03.2016 16:40 23,039999
01.03.2016 16:50 23,0199986
Wenn ich das Makro starte, passiert folgendes: Es erscheint die Abfrage, ob die Übersichtstabelle zurückgesetzt werden soll.
Bestätige ich mit „nein“, wird in die (leere) Tabelle1 nur das Datum ohne die Uhrzeit geschrieben.
In Spalte C1, D1 usw. schreibt er die Namen der csv-Dateien (ohne csv). Genauso, wie es sein soll!
Starte ich einen erneuten Abruf und bestätige die Abfrage wieder mit „nein“, werden die Überschriften erneut eingetragen (zusätzlich zu den bereits bestehenden Überschriften in den nächsten Spalten).
Bestätige ich allerdings mit „ja“, werden die Einträge in Tabelle1 gelöscht und danach Datum und Uhrzeit getrennt und in Spalte A bzw. B geschrieben. Genauso, wie beschrieben.
Bei der Uhrzeit bringt er zwar das korrekte Format, aber auch teilweise Werte aus der Wertespalte.
In Tabelle2 übernimmt er, wie unter Punkt 3 beschrieben, die Werte.
Das war es aber dann schon. Er übernimmt keine Werte in Tabelle1, sondern hört einfach auf.
Strenggenommen benötige ich die Abfrage wegen der Übersichtstabelle gar nicht, da die Auswertung aller paar Tage erfolgen soll und die bestehenden Werte nicht überschrieben werden sollen. Ich habe die entsprechenden Zeilen mal versuchsweise gelöscht, aber nur eine Fehlermeldung bekommen…
Allerdings habe ich festgestellt, dass meine csv-Dateien nicht korrekt nach Datum sortiert sind. In einer anderen Auswertung habe ich dafür folgenden Code verwendet:
With .Sort
.SortFields.Clear
.SortFields.Add Key:=Cells(erste_datenzeile, 2), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortTextAsNumbers
.SetRange rng
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Trotzdem ist es mir nicht gelungen, den Code einzubinden…
Vielleicht kannst du ja nochmal drüberschauen, was ich falsch gemacht habe.
Im Voraus schonmal ein ganz großes Dankeschön!
Rico

Anzeige
AW: CSV-Dateien auslesen
07.03.2016 11:48:07
Oberschlumpf
Hi Rico
zu allererst wäre es cool, wenn du uns denn mal eine Bsp-csv-Datei zeigst.
Und dann schaue ich mal weiter.
Bis zu meiner nächsten Antwort kann es aber bis heute Abend dauern, da ich ja auch noch n Job habe :-)
Ciao erst mal
Thorsten

AW: CSV-Dateien auslesen
07.03.2016 12:02:31
Rico
Hi Thorsten,
kein Problem! Ich finde es großartig, dass du dir die Zeit nimmst!
Ich wollte mal eine „Original-csv“ hochladen, das geht aber hier offensichtlich nicht. Also habe ich die .txt als Beispiel genommen:
https://www.herber.de/bbs/user/104156.txt
Ich hoffe, dass das so ausreicht.
Vielen Dank!
Rico

Anzeige
AW: CSV-Dateien auslesen
07.03.2016 21:52:27
Oberschlumpf
Hi Rico
- Bsp-Dateien sind Gold wert! -
Kleiner Tipp + Bitte von mir:
Wenn du mal wieder eine neue Frage stellst (also ein ganz neuer Thread), dann zeig am besten gleich von Beginn an eine Bsp-Datei.
So...
Denn mit deinen zuletzt hier gezeigten Bsp-Zeilen konnte ich nicht erkennen, dass es in Spalte A auch Einträge mit Uhrzeit = "00:00:00" gibt.
Und zumindest bei mir führte der erste Testlauf genau wegen der 0Uhr-Zeitpunkte zu einem Fehler, und das Makro wurde abgebrochen.
Ich habe den Fehler behoben, und bei mir funktioniert mein Code mit deiner Bsp-Datei einwandfrei.
...hier die Datei...
https://www.herber.de/bbs/user/104174.xlsm
Die Abfrage, die ich einbaute, habe ich wieder gelöscht.
Nun werden, wenn die Datei komplett leer ist, in Zeile 1 die Überschriften gesetzt, auch das Format für FETT und auch die Zeilenfixierung.
Dann werden nach und nach die csv-Dateien eingelesen und auch korrekt dargestellt.
- Spalte A = Datum
- Spalte B = Uhrzeit
- Spalte C = Wert
So, wenn ich das Makro noch mal starte, wird eben deine Bsp-Csv-Datei erneut eingelesen...
- Spalte A = Datum
- Spalte B = Uhrzeit
- Spalte D, also die nächste freie Spalte = Wert
usw...
Das Problem, das ich jetzt noch sehe...
Mal angenommen...
...du startest heute das Makro, und es werden 3 csv-Dateien eingelesen
Spalte C,D,E
Datum = 04.03.2016
Bis jetzt passt alles noch.
Aber du willst ja das nächste Einlesen in der nächsten freien Spalte F beginnen, und die Werte in den Spalten C bis E sollen erhalten bleiben.
Nun startest du irgdwann das nächste Einlesen z Bsp mit wieder 3 csv-Dateien
Spalte F,G,H
Datum 14.03.2016
Nun steht aber in Spalte A das neue Datum, aber die Werte aus den Spalten C bis E gehören ja zu dem älteren Datum.
Oder ist das für dich nicht wichtig?
Dann sollte nun alles passen.
Hilfts?
Ciao
Thorsten

Anzeige
AW: CSV-Dateien auslesen
08.03.2016 11:28:40
Rico
Hallo Thorsten,
zunächst mal ganz vielen Dank für deine Mühe! Deinen Tipp werde ich selbstverständlich in Zukunft berücksichtigen.
Jetzt habe ich deinen neuen Code hinterlegt. Mit der Beispieldatei klappt auch alles hervorragend! Allerdings funktioniert es mit meinen neu ausgelesenen CSV-Dateien nicht. Ich habe auch rausgefunden, woran das liegt: Die Beispiel-CSV war (von mir unbewusst) als Unicode gespeichert, die ausgelesenen Dateien sind als ANSI gespeichert.
Wo muss ich denn im Code die Anpassung vornehmen, damit er auch ANSI-Dateien erkennt? Meine Recherche hat leider nichts ergeben.
Die CSV Dateien sind übrigens immer die gleichen, d. h. beim erneuten Auslesen habe ich Dateien mit gleichen Namen aber neuen Werten. Darum benötige ich auch keine zusätzlichen Spalten. Daher kein Problem!
Meine Idee war halt, dass die neu ausgelesenen Werte unter die bereits bestehenden eingefügt werden. Geht das?
Vielleicht findest du ja noch die Zeit, um mich auf die richtige Spur zu bringen…
Ganz lieben Dank!
Rico

Anzeige
AW: CSV-Dateien auslesen
08.03.2016 17:35:21
Oberschlumpf
Oha!
Hallo Rico
Da habe ich in deiner Erstfrage etwas total falsch verstanden.
Ich hatte gedacht, neu eingelesene csv-Dateien sollen immer rechts angefügt werden, also nächste freie Spalte.
Aber du meinst, neue Werte sollen - immer - ab der nächsten freien Zeile eingefügt werden.
Das Ergebnis soll dann so aussehen?

Datum      Uhrzeit  csv-name1 csv-name2 ...
03.03.2016 12:15:00 22,123456 12,456789
csv-name3 csv-name4 ...
07.03.2016 09:12:00 14,123456 11,778899
...
Oder wiederholen sich die csv-namen immer, so dass die Einträge in der ersten Zeile reichen?
Auf jeden Fall muss ich sehr viel umprogrammieren.
Daher warte ich lieber erst mal auf deine Antwort zu meinen neuen Fragen.
Ciao
Thorsten

Anzeige
AW: CSV-Dateien auslesen
09.03.2016 08:53:47
Rico
Hi Thorsten,
also erstmal möchte ich dir sagen, dass ich dir unwahrscheinlich dankbar für deine Arbeit bin!
Diesmal habe ich auch gleich eine Beispieldatei mitgeliefert ;-)
Die Namen der CSV-Dateien sind immer gleich, demzufolge reichen die Einträge in der ersten Zeile. In der Beispieldatei habe ich mal entsprechende Kommentare dazu gemacht.
Was ich aber absolut nicht verstehe: Das Makro funktioniert tadellos bei den Dateien, die ich in Unicode gespeichert habe. Die ausgelesenen Dateien sind offensichtlich als ANSI gespeichert. Bei denen bringt er keine Werte… Darauf bin ich zufällig gestoßen, als ich die hochgeladene txt-Datei erneut als csv gespeichert habe. Ich habe das mit verschiedenen Test-CSV probiert.
Jetzt hoffe ich, dass sich der Aufwand in Grenzen hält.
Vielen Dank!
Rico
https://www.herber.de/bbs/user/104213.xlsm

Anzeige
AW: CSV-Dateien auslesen
09.03.2016 17:42:39
Oberschlumpf
Hi Rico
Ich muss noch mal was fragen.
Was genau meinst du denn mit: als ANSI oder Unicode gespeichert?
Mit welchem Programm speicherst du die csv-Dateien in dem einen oder anderen Format?
Und dazu erklär bitte mal den Weg, was du klicken/auswählen musst, um speichern zu können.
Ich hab ja nun die 2 Bsp-CSV-Tabellen in der Datei.
In der "falschen?" sind einige Einträge, in denen nur Buchstaben stehen. Ist das der Fehler?
Ciao
Thorsten

AW: CSV-Dateien auslesen
10.03.2016 06:55:15
Rico
Hi Thorsten,
die CSV-Dateien werden aus einer Produktionssoftware ausgelesen. Das mit den Buchstaben in der Wertespalte hat nichts zu sagen. Das sind nur Einträge, die nicht ausgewertet werden können. Also eine Art Fehlermeldung.
Die Dateien bekomme ich als „Excel-Dateien“ (also mit Excel-Symbol im Dateinamen) mit der Endung .csv. Als ich hier eine Beispieldatei mit der Endung .csv hochladen wollte, wurde das abgelehnt. Begründung: csv-Datei nicht erlaubt. Also habe ich die Datei in eine .txt-Datei umgewandelt.
Nachdem du mir mitgeteilt hattest, das das Makro jetzt funktioniert, habe ich genau diese Beispiel-Datei mit der Endung .txt wieder in eine .csv umgewandelt (Datei - Speichern unter - als .csv speichern). Da kann ich dann noch auswählen, ob ich die als Unicode oder ANSI speichern will. Ich habe da vorher noch nie darauf geachtet. Also habe ich versuchsweise eine als Unicode und noch eine als ANSI im Format CSV gespeichert.
Ich verwende Excel 2013 unter Windows 8.
Bei der als Unicode gespeicherten Datei funktioniert das Makro tadellos, bei der ANSI-Datei werden keine Werte eingelesen. Bei den mir vorliegenden Original-Dateien liest das Makro keine Werte ein. Daher vermute ich, dass es an der Codierung liegt. Ich hatte dieses Problem vorher auch noch nie.
Es gibt in der Produktionssoftware, wo die CSV-Dateien erzeugt werden, aber offensichtlich auch keine Möglichkeit, da irgendwas auszuwählen oder einzustellen.
Gruß Rico

Anzeige
AW: CSV-Dateien auslesen
10.03.2016 07:16:59
Christian
Mit der Codierung hatten wir in einem ähnlichen Prozess auch Mühe. Das lag offenbar daran, dass Excel (für Mac) beim Öffnen oder Schliessen der Datei bzw. beim Speichern als .CSV die Codierung veränderte. Uns blieb nichts anderes übrig, als Anpassungen der exportierten Datei vor dem Wiedereinlesen in ein anderes System nicht in EXCEL, sondern in LibreOffice zu machen.
Ich weiss jetzt nicht, ob das etwas hilft oder ob diese Verunglimpfung von Microsoft in einem Excel-Forum angebracht ist, aber für uns war das die ein gangbarer Umweg und ich fand keine bessere Lösung.

AW: CSV-Dateien auslesen
10.03.2016 09:16:05
Rico
Danke für den Hinweis!
Ich habe leider keine Idee, wie ich das lösen kann. Es sind ja 14 oder 15 Dateien, die jeden Tag ausgewertet werden sollen...

AW: CSV-Dateien auslesen
10.03.2016 10:43:39
Oberschlumpf
Hi Rico
Und ich vermute jetzt mal, dass wir für eine mögliche Lösung genau so eine CSV-Datei benötigen, die (noch) nicht so funktioniert, wie du es benötigst.
Daher schlage ich vor, dass du eine "fehlerhafte" CSV-Datei in ein ZIP-Archiv packst, und ann eben diese ZIP-Datei hier uploadest.
Dann schauen wir mal weiter.
Ciao
Thorsten

AW: CSV-Dateien auslesen
10.03.2016 18:16:28
Oberschlumpf
Hi Rico
1 Blick in die - wertvolle! Bsp-Datei - und ich hab den Fehler sofort gefunden...zumindest für diese Datei.
Der Fehler ist nicht eine mögliche, unterschiedliche Codierung beim Speichern, sondern das Trennzeichen für den Datumseintrag und dem eigentlichen Wert.
In deiner ersten Bsp-Datei war das Trennzeichen ein TAB.
In der jetzigen Bsp-Datei ist das Trennzeichen ein Semikolon.
Mein Code "sucht" nach dem TAB-Zeichen und trennt die Daten entsprechend.
Du erwähntest, dass mein Code im Versuch mit deinen "echten" Dateien - gar nichts - in der Tabelle anzeigt.
Ich hab mit meinem "alten" Code deine neue Datei gerade mal getestet.
Ergebnis 1. Datenzeile:

Spalte A        Spalte B
29.02.2016	19:40:00;22,0599994659424

Es wird also - schon - etwas angezeigt.
Es ist zwar nicht so, wie gewünscht, weil eben Uhrzeit + Wert in der gleichen Zelle stehen, aber die Aussage: "es wird gar nichts angezeigt", ist falsch - zumindest aus meiner Sicht.
Ok, es kann an unseren Excel-Versionen liegen.
Du nutzt XL 365, ich nutze XL 2010.
Da kann es natürlich sein, dass deine Version gar nix anzeigt.
Ok, ich bitte dich nun, bevor ich programmiere, dass du mal alle csv-Dateien wegen des Trennzeichens überprüfst.
Wenn nämlich alle Dateien das Semikolon als Trennzeichen nutzen, muss ich anders (einfacher) programmieren, als wenn auhc nur 1 Datei dabei ist, die ein - anderes - Trennzeichen benutzt; z Bsp TAB oder Leerzeichen...oder oder oder.
Ciao erst mal :-)
Thorsten

AW: CSV-Dateien auslesen
11.03.2016 07:39:25
Rico
Hi Thorsten,
du hast vollkommen Recht! In der „alten“ Version hat er tatsächlich etwas angezeigt, genau wie in deinem Screenshot. In der Uhrzeitspalte konnte ich hinter der Uhrzeit auch etwas erkennen. Allerdings hatte ich eine Datei mit Null-Werten erwischt und konnte daher nicht wirklich Werte sehen. Die Wertespalte war dafür leer.
Die CSV-Dateien sehen alle so aus, wie die letzte Beispieldatei. Daher sollten auch die Trennzeichen alle gleich sein. Trotzdem habe ich mal vorsichtshalber eine andere Beispieldatei angehängt ;-)
Vielen Dank!
Rico
https://www.herber.de/bbs/user/104263.zip

295 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige