Größeres Projekt mit VBA, Fragen
#1
Hallo, ich schreibe eine Stundenauswertung für ca. 20 Mitarbeiter. Ich bekomme montags von jedem MA eine CSV Datei mit seinen Termin für die laufende Woche. Diese Dateien sollen in einer Übersichtstabelle zusammengefügt werden. Das klappt eunter einfachen Bedingungen auch schon. Jetzt soll es aber etwas übersichtlicher werden. Ich brauche einen Code, der mir Die CSV Daten so in die Übersicht kopiert, dass zuerst z.B. in A2 Der Name des Mitarbeiters (ist gleich dem Dateinamen der CSV) Steht und ab dann eben von B2 bis G2 der Rest wiedergegeben wird. Jede Datei hat mehrere Zeilen, bislang wird mit
Code:
IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)

bis zur ersten Leerzeile übernommen. Das soll so auch bleiben.
Hier sollte jetzt die nächste Datei mit dem nächsten Mitarbeiternamen aufgelistet werden usw. Wie bekomme ich es hin, dass das Makro den Dateinamen in das Tabellenfeld bekomme und mir alle Daten aus den CSV entsprechend untereinander dargestellt werden?

Ich hoffe, es ist verständlich :19:
Antworten Top
#2
Hallo,

das sollte möglich, anhand einer Schleife durch die Mitarbeiterliste zu gehen, die Dateien zu öffnen, die Daten auzuwerten und die Dateien wieder zuschließen.
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • Andy_S_PB
Antworten Top
#3
Hallo

zum Thema CSV Dateien öffnen gibt es bereits eine Beispieldatei mit Code von snb an dem auch Stefan mitgearbeitet hat.  War in diesem Thread:  
Aus einer CSV-Datei ein bestimmtes Layout erzeugen mit Datenauswertung  -  von Daniel

Vielleicht kann man ja basierend auf diesem Makro da was umschreiben?  Einfach mal reinschauen ob da vielleicht was passt??

mfg Gast 123
Antworten Top
#4
Moin,

wenn Ich etwas dazu anmerken darf:
Es muss nicht immer die VBA-Keule sein,
obgleich die, m.E, natürlich mehr Spaß macht als beispielsweise PowerQuery (PQ), welches bei älteren Excel-Versionen als AddIn und ab neueren Version integriert ist.

Es gibt Spezialisten dafür in diesem Forum als auch außerhalb wie beispielsweise hier zu finden.

Für (Noch)Nicht-VBAler sicherlich der pflegbarere Weg für ein Projekt, denn das Erlernen von VBA als (Noch)Nicht-Entwickler per se würde ich als ein "Projekt" in Anführungszeichen sehen.
Antworten Top
#5
Ohje, von PQ hab ich ja noch nie was gehört (außer dem hier ortsansässigen PaderQuellgebiet :19: ) Sieht auf den ersten Blick schwerer aus als VBA, zumal ich die Logik des VBA eigentlich schon verinnerlicht habe, habe nur Probleme mit der Umsetzung, sprich der Syntax.

Es ist also so, dass der Import der Dateien vorhanden ist, also jeder MA ist auf einem Tabellenblatt vorhanden. Ich möchte einen Teil dieser Daten, ist meist eine Range von z.B. A2 bis Fxx (je nach Anzahl der Termine), in eine Übersichtstabelle untereinander einfügen, Spalte A der Name des Mitarbeiters (könnte man aus dem Tabellenblattnamen vielleicht einfügen), dann B bis G die Range der Daten. Darunter wieder A Name des nächsten Mitarbeiters, B bis G... usw. Ich tippe dass es hier eine For Next Schleife ist, die das macht, aber ich komme nicht drauf, wie das genau umzusetzen ist, weil ich eben die Syntax in VBA noch nicht so drauf habe. :20:
Antworten Top
#6
Hi Andy,

einige Ansätze bzw helfende Hände wurden Dir ja bereits angeboten.
Brauchst also keine Werbung mehr zu machen ;)

Ich schätze Du bist jetzt gut beraten, wenn Du eine Zielmappe und CSV-Datei als Muster zur Verfügung stellst.


Hinweis:
Nein, es braucht keine personenbezogenen Daten zu beinhalten. Strukturen beider Dateien sind wichtig.
Kein Text oder Bild um die Dateistruktur zu erläutern -
Antworten Top
#7
Werbung? Is mir neu   Blush  Okay, anbei eine Testtabelle mit (m)einer CSV.

Auf der Übersicht sieht man, wie es aussehen soll, mit einer 2. person (Platzhalter), da sollen dann die Dateien des nächsten MA hin.


Angehängte Dateien
.xlsx   Auslastung_Gesamt_KW39_Test.xlsx (Größe: 19,73 KB / Downloads: 8)
Antworten Top
#8
Hallo erst mal ....

anbei die Beispieldatei zurück, Button drücken und schauen ob das Resultat stimmt.
Würde mich freuen wenn dieses Beispiel zur Zufriedenheit funktioniert.

mfg Gast 123


Angehängte Dateien
.xlsm   Auslastung_Gesamt_KW39_Test.xlsm (Größe: 31,22 KB / Downloads: 12)
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Andy_S_PB
Antworten Top
#9
Gast123, 10000 Dank, das isses doch :18: 

Kann ich das jetzt mit beliebig vielen Datensätzen machen? Es sind bei Vollast etwa 20 CSV, die eingelesen/importiert werden.



Ich schließ Dich in mein Nachtgebet ein :19:

Nachtrag: Wie kann ich es noch einbauen, dass die Daten für jeden Datensatz separat nach Datum aufsteigend (Spalte D) und nach Kategorie (A/C, Spalte G) sortiert wird? Mit einem aufgezeichneten Makro schiebt er mir alle Datensätze ohne Leerzeilen untereinander, was die Lesbarkeit natürlich beeinträchtigt.
Antworten Top
#10
Hallo

machen wir als Hilfe zur Selbsthilfe gleich für dich und alle Leser die das Programm einsetzen wollen einen Grundkurs in VBA Codes. 
   For j = 2 To Worksheets.Count
      If Right(Worksheets(j).Name, 3) = "CSV" Then

Ich denke das kann man rein logisch begreifen und verstehen. Diesem "Simpel Makro", so klein wie es auch ist sind zwei Dinge völlig Schnuppe!! Wieviele Tabellen in der Mappe sind, das können auch > 200 sein! Und weil auch andere Tabellen in der Datei sein können werden nur die Sheets ausgewertet, wo am Ende der Text "CSV" steht!! Auch die KW wird abgeschnitten, vorausgesetzt ihr setzt immer dieses Trennzeichen "_" vor KW.

Wenn das fehlt kommt das Programm nur beim einfügen des Namens durcheinander.  Klein aber oho!  
PS  bei vielen Tabellen dauert es nur laenger! Wie lange genau habe ich nicht getestet.

mfg Gast 123
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Andy_S_PB
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste