Dateinamen eingelesenen Daten zuordnen etc.

Bild

Betrifft: Dateinamen eingelesenen Daten zuordnen etc.
von: Dennis
Geschrieben am: 25.08.2015 19:45:14

Hallo zusammen,
dies ist mein erster Beitrag hier im Forum und ich hoffe darauf, dass mir jemand helfen kann ;-)
Zu meinem Problem:
Ich habe über ein Makro Daten aus einer *.csv-Datei in Excel eingelesen. Ein Datensatz besteht i.d.R. aus zehn Werten. Ich möchte nun über ein Macro a) eine automatische Zuordnung der Daten mit dem entsprechenden Dateinamen der CSV-Datei in Excel implementieren (d.h. Ordner kann 100 od. aber auch 1000 Datensätze enthalten, muss also flexibel gestaltet sein) und b) diese Daten automatisch in eine Auswertetabelle übertragen (neues Register).
In der Auswertetabelle werden Positionen (oben, unten) und zwei verschiedene Dicken von Bauteilen berücksichtigt. Die Werte aus der CSV-Datei folgen dabei immer einem Schema:
Bspw. die ersten 5 Werte (Pos. oben, Dicke 1, Dicke 2), die anderen 5 Werte (Pos. unten, Dicke 1, Dicke 2).
Manuell ist das auf Dauer etwas mühselig, von daher würde ich das gerne etwas einfacher gestalten.
Vielen Dank im Voraus!
Grüße

Bild

Betrifft: AW: Dateinamen eingelesenen Daten zuordnen etc.
von: Sepp
Geschrieben am: 25.08.2015 19:51:39
Hallo Dennis,
zeig den Code zum Einlesen der csv's.

Gruß Sepp


Bild

Betrifft: AW: Beispielmappe
von: Matthias
Geschrieben am: 25.08.2015 23:24:50
Hallo Dennis,
Beispiel-Mappe wäre natürlich auch nicht schlecht:
-Wie sehen deine eingelesenen Daten aus?
-Wie sieht deine Auswertetabelle aus?
-Wie wo werden die Pos. oben/unten hingeschrieben?
-Am besten eine Soll-/Ist-Situation aufzeigen.
Das sind alles so Sachen, die sich besser vorstellen lassen wenn man das bildlich vorliegen hat und es reduziert die Rückfragen. Zusätzlich kann man geschriebenen Code dann auch ausprobieren.
lg Matthias

Bild

Betrifft: AW: Beispielmappe
von: Dennis
Geschrieben am: 26.08.2015 09:52:07
Vielen Dank für die schnellen Rückmeldungen! Anbei findet Ihr eine Beispielmappe mit den eingelesenen Daten:
https://www.herber.de/bbs/user/99830.xlsm
Im Register Datenimport stehen Daten von vier *.csv-Dateien mit jeweils 10 Werten (D4:D13; I4:I13; N4:N13 usw.)
Hier sollen nun in einem ersten Schritt die jeweiligen Dateinamen hinzugefügt werden. Im zweiten Schritt sollen die Werte dann in die entsprechenden Zeilen der Tabellen im Register "Auswertung" eingefügt werden.
Problem beim Dateneinlesen ist noch, dass die Werte in der falschen Reihenfolge eingefügt werden, also nicht beginnend mit dem kleinsten Wert des Dateinamens von links nach rechts (1.1_1o; 1.1_1u; 1.1_2o; 1.1_2u usw.), sondern umgekehrt.
Bsp.: D4:D8 (Register "Dateiimport") sollen in B3:B7 (Register "Auswertung") / D9:D13 sollen in C3:C7 usw. vorausgesetzt die Reihenfolge stimmt.
Im jetzigen Zustand würde es lauten:
S4:S8 müsste in B3:B7 / S9:S13 müsste in C3:C7
Am Ende soll ein Makro entstehen, welches die einzelnen Schritte beinhaltet und nur einmal ausgeführt werden muss. Wichtig dabei ist, dass Programm muss sowohl 2 Dateien od. aber 100 verarbeiten können und die Zuordnungen müssen stimmen.
Vielen Dank im Voraus!
Grüße,
Dennis

Bild

Betrifft: AW: Beispielmappe
von: Matthias
Geschrieben am: 26.08.2015 17:06:38
Hallo Dennis,
ich muss ehrlich sagen, mit Modulen hast du schonmal nicht gegeizt. Das Makro kommt mir auch irgendwie bekannt vor. Jedoch ist es nicht für deine Verwendung ausgelegt gewesen, die importierten Daten gleich in ein Tabellenblatt zu stopfen, statt es temporär irgendwo zwischenzulagern (s. Kommentartexte). Daher rührt auch die umgekehrte Sortierung.
https://www.herber.de/bbs/user/99842.xlsm
Mit der kleinen Änderung wird der Dateiname in Zeile 1 geschrieben und alle neuen Dokumente rechts an die Bestehenden angefügt.
Als Vorlage für die Auswertung dient eine kleine Tabelle im entsprechenden Reiter, wo du die Formeln per Hand anpassen kannst. Richte diese Vorlage so ein, dass deine erste Datei so ausgewertet wird wie du sie haben möchtest. Dann leere das Dokument und importiere die Datei erneut und die Formeln sollten übernommen worden sein.
Das Aufwendige an deiner Auswertung sind vor allem die Formeln für die Standardabweichung. Dazu hab ich leider keine passende Formel gefunden um diese für die komplette Zeile zu ermöglichen. Daher eher behelfsmäßig im Makro für jeden neuen Eintrag die Formel erweitert. Vielleicht hat zu diesem Punkt einer der Experten eine formelmäßige Lösung?
lg Matthias

Bild

Betrifft: AW: Beispielmappe
von: Dennis
Geschrieben am: 26.08.2015 17:47:36
Hallo Matthias,
super vielen Dank für die prompte Antwort und die Umsetzung in der kurzen Zeit. Ich habe mich gerade daran gemacht, die Vorlage nochmal anzupassen. Mir sind ein zwei Sachen aufgefallen, wo ich noch nicht genau weiß, wie ich diese im Skript korrigieren kann. Ich probiere es jedenfalls erst einmal alleine und melde mich dazu aber nochmal.
Jedenfalls vielen Dank für das Überarbeiten, das hat mich einen weiten Schritt nach vorne gebracht!
Thumbs up! Super Leute hier im Forum...
Gruß,
Dennis

Bild

Betrifft: AW: Beispielmappe
von: Dennis
Geschrieben am: 27.08.2015 12:07:44
Hallo Matthias,
ich komme leider nach einigem hin- und her probieren überhaupt nicht weiter!
Die Dateien werden schon falsch importiert, was an den csv-Dateien als solches liegt. Hier findest du ein Beispiel einer Datei, wie ich sie einlesen und am besten so sortiert darstellen möchte, wie du das in deiner Vorlage bereits umgesetzt hast:
https://www.herber.de/bbs/user/99853.xlsx
Die Dateinamen, die in die Zeilen geschrieben werden, würde ich gerne ohne die Endung ".csv" einfügen. Wo kann ich das ändern?
Zudem wäre es klasse, wenn man das Skript so anpassen könnte, dass man im Register Auswertung immer folgendes Schema der Ergebnisstabellen erhält:
3 Ergebnistabellen (Daten der ersten 6 csv-Dateien) + Ergebnistabelle Standardabweichung
In Abhängigkeit der Dateienanzahl jeweils dann untereinander ausgewertet einfügen lassen. Ist das möglich?
Vielen Dank im Voraus!

Bild

Betrifft: AW: Beispielmappe
von: Matthias
Geschrieben am: 28.08.2015 09:01:40
Hallo Dennis,
der Dateiname ist in der Variablen myFile enthalten. Mit folgender Zeile wird darin die Position des Punktes bestimmt und der Name bis dahin gekürzt:

myFileCut = Left(myFile, InStrRev(myFile, ".") - 1) 'Dateiname ohne Endung
Zum Thema des falschen Importierens: Das liegt daran, dass du ein anderes Trennzeichen benutzt hast.
.TextFileCommaDelimiter = False
muss stattdessen True lauten.
Komischerweise gibt es mit der runtergeladenen Datei ein anderes Problem mit dem Spalten auszählen. Ich habe da auch noch was ändern müssen.
https://www.herber.de/bbs/user/99868.xlsm
Zur Auswertung: Möglich ist alles. Nur war es einfacher für mich, die Auswertung nach rechts fortschreitend anzulegen, da die importieren Dateien genauso angeordnet sind. Durch kopieren der Auswertetabelle erübrigt sich dann eine Anpassung der Formeln durch VBA, sodass du es selbst einfacher hast diese Formeln bei Bedarf anzupassen.
"3 Ergebnistabellen (Daten der ersten 6 csv-Dateien) + Ergebnistabelle Standardabweichung"
Kannst du mir dazu eine kleines Beispiel fertig machen? Das hilft mir sehr. Danach kann ich auch gern deine Auswertung runterwärts anlegen.
lg Matthias

Bild

Betrifft: AW: Beispielmappe
von: Dennis
Geschrieben am: 28.08.2015 18:04:47
Hallo Matthias,
das schaut soweit prima aus... Ich habe in der folgenden Datei ein neues Register (Muster_Auswertung) angelegt, in dem das Schema der Auswertung aufgezeigt ist (rosa hinterlegt):
https://www.herber.de/bbs/user/99884.xlsm
3 Ergebnistabellen rechts nebeneinander + Ergebnis Standardabw. & Mittelwert
Das Ganze dann in Abhängigkeit der Anzahl an einzulesenden csv-Dateien untereinander:

1.1_1    1.1_2    1.1_3    Tabelle MW & Stdabw.
1.2_1    1.2_2    1.2_3    Tabelle MW & Stdabw.
2.1_1    2.1_2    2.1_3    Tabelle MW & Stdabw.
2.2_1    2.2_2    2.2_3    Tabelle MW & Stdabw.
Die Bezüge sind für die ersten drei Ergebnistabellen + Standardabw. & Mittelwert eingetragen.
Wie du sehen kannst, muss die erste Tabelle den Namen 1.1_1, die zweite Tabelle den Namen 1.2_1 usw. haben, quasi ohne die Angabe "-o od-u". Es sind immer 2 csv-Dateien für eine Ergebnistabelle notwendig...
Ich habe dort auch die korrekte Zuweisung der Bezüge für die Werte eingetragen. Es gilt am Bsp. der ersten Ergebnistabelle (1.1_1):
- erste Spalte > Import aus D6 bis D10
- zweite Spalte > Import aus D11 bis D15
- dritte Spalte > Import aus J6 bis J10
- vierte Spalte > Import aus J11 bis J15
Die Werte aus dem Register "Dateiimport" müssen quasi immer mit der Spalte D beginnend jeweils um 6 Spalten weiter in die Auswertung importiert werden:
D, J, P, V, AB, AH usw.
Ich hoffe das ist verständlich geschrieben und du kannst damit etwas anfangen!
Thanks again!
Grüße,
Dennis

Bild

Betrifft: AW: Beispielmappe
von: Matthias
Geschrieben am: 01.09.2015 10:39:10
Hallo Dennis,
hoffe das funktioniert soweit. Hab es wegen Zeitmangel leider nicht ausgiebig testen können.
https://www.herber.de/bbs/user/99941.xlsm
Er sollte jetzt für jeden Dateinamen der noch nicht vorkommt (ohne Endung "-o"/"-u" zu unterscheiden) eine neue Tabelle anlegen.
Gibt es diese Datei mit der gleichen Endung schon, kommt ein Hinweis dass diese Datei bereits vorhanden ist, wird aber trotzdem importiert (man kann auch das Importieren an dieser Stelle verhindern, falls das gewünscht ist müsste das eingebaut werden).
Gibt es diese Datei nur mit der anderen Endung bereits, wird keine neue Ergebnistabelle angelegt, denn die werden ja in der Tabelle der zugehörigen Datei mit angezeigt.
Die Formeln in deiner Ergebnistabelle sind jetzt anders aufgebaut.
lg Matthias

Bild

Betrifft: AW: Beispielmappe
von: Dennis
Geschrieben am: 03.09.2015 17:00:43
Hallo Matthias,
an der Stelle nochmals vielen Dank für deine tatkräftige Unterstützung! Ich habe noch einen Laufzeitfehler drin, aber die Umsetzung der eigentlichen Funktionen läuft tadellos. Es wird auch keine Infobox mehr eingeblendet, dass x-Dateien importiert wurden, aber das ist auch nur ein kosmetischer Fehler.
Fazit: Thumbs up an dieses Forum und ein besonderer Dank an Matthias!

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Dateinamen eingelesenen Daten zuordnen etc."