Exel 2013 Datenauswertung
Guten Tag, ich bin neu hier und auf der Suche nach Antworten.
Was meine Person angeht bin ich in vielen Bereichen in meiner Firma Aktiv und mach so ziemlich alles was sonst nicht klappt.
Da ich aber ein Totaler leihe bin was VB in Verbindung mit Exel angeht, hoffe ich das hier die entsprechenden Kompetenzen zu finden sind.
Es geht um die Auswertung von Störungen die in csv Datein gespeichert werden.
Diese liegen auf dem jeweiligen Gerät im Firmennetz und sind per ftp abrufbar.
Vorab eine Frage:
1. Frage geht es die Abfrage direkt vom ftp zu machen?
Wenn nicht werde ich sie einfach Local abspeichern lassen und diese dann Automatisch aktuliesieren lassen.
Die csv Datein befinden sich in folgenden Ordnern:
C:\Auftrag\... Hier liegt der Aktuelle Auftrag mit seinr Nummer Als Beispiel 123456
Beispiel: C:\123456\...
C:\Auftrag\Location1\ Hier ist der Standort mit Namen versehen Beispiel Location1 & Location2
Beispiel: C:\123456\Location1\...
Beispiel: C:\123456\Location2\...
C:\Auftrag\Location1\0001... Hier sind die "Engines" Mit ihren Nummern gespeichert
Beispiel: C:\123456\Location1\0001\.... ( Hier Location1 mit Engine 0001) Dabei geht Location1 nur von 0001 bis 0019
Beispiel: C:\123456\Location2\0020\... ( Hier Location2 mit Engine 0020) Dabei geht Location2 nur von 0020 bis 0040
C:\Auftrag\Location1\0001\logs\...Im Ordner Logs wird für jeden Monat ein Ordner mit der jeweiligen Beschriftung 2015_07 für "Juli" angelegt.
In diesem Befinden sich dann die csv Datein die jeweils nach dem Tag Benannt sind an dem sie erstellt wurden info_2015_07_01.csv für den ersten Juli.
Beispiel:
C:\Auftrag\Location1\0001\logs\2015_07\log_2015_07_01.csv (...2015_07_01 bis ...2015_07_31)
C:\Auftrag\Location1\0001\logs\2015_08\log_2015_08_01.csv (...2015_08_01 bis ...2015_08_31)
(0001-0020)
C:\Auftrag\Location2\00020\logs\2015_07
(0021-0040)
Formatierung der csv
Timestamp;Comes;Goes;Duration;Variable;Message
07:49:00.680;;;;TEXT1TEXT;TEXT2TEXT
Die Exel Tabelle in der alles eingetragen werden soll, hat in der Zeile A1-H1 einen Header stehen der zum Filtern am Ende dient.
Das sieht wiefolgt aus:
Zelle
A1 = Ordernummer
B1 = Engine
C1 = Date [YYMMDD]
D1 = Time[hh:mm]
E1 = Errorcode
F1 = Errortext
Habe dazu im FOrum folgenden Code von "Culinardo"gefunden:
Dieser Code ist an sich super nur müsste er an "meine" Bedürfnisse angepasst werden.
Es soll nur eine Exeldatei mit einer Exel Tabelle erstellt werden bzw. in die Vorhandene eingefügt werden.
"Auswertung.xlsx"
1. Die Daten sollen untereinander ohne die Headline aus der csv kopiert werden.
2. Sie sollen ab Zeile 2 Beginnen.
3. Timestamp aus der CSV soll in der Tabelle ab D2 anfangen, untereinander
4. Text2 soll bei E2 anfangen, untereinander
5. Die anderen Spalten sollen nicht aus der CSV kopiert werden.
6. In Spalte A ab A2 soll immer die Auftragsnummer erscheinen sobald in Spalte D2 oder E2 etwas steht.
7. In Spalte B ab B2 soll immer die Enginenummer (Bsp. 0001) aus dem Order übernommen werden, indem die CSV liegen die gerade eingetragen werden
Also gemeint ist das die csv's in einem Unter Ordner von Engine liegen aber der Bezug wichtig ist.
Beispiel: C:\...\0001\Logs\2015_08\Info_2015_08_01.csv
Das muss sein damit man das ganze hinterher alles nach Engine Filtern kann.
8. Spalte C ab C2 soll mit dem Datum versehen werden, was die csv Datei trägt aber wenn möglich formatiert in, ist aber kein muss(C2 = 150801)
Beispiel: C:\...\0001\Logs\2015_08\Info_2015_08_01.csv
Am Ende sieht das so aus :**
A2= 149860
B2= 0001
C2= 150807
D2= 15:16:26.548
E2= TEXT2
Ich hoffe das ich es jetzt besser dargestellt habe als vorher, bin morgen aber den ganzen Tag Online, da ich auf Arbeit damit gerade zu tun habe.
LG
Was meine Person angeht bin ich in vielen Bereichen in meiner Firma Aktiv und mach so ziemlich alles was sonst nicht klappt.
Da ich aber ein Totaler leihe bin was VB in Verbindung mit Exel angeht, hoffe ich das hier die entsprechenden Kompetenzen zu finden sind.
Es geht um die Auswertung von Störungen die in csv Datein gespeichert werden.
Diese liegen auf dem jeweiligen Gerät im Firmennetz und sind per ftp abrufbar.
Vorab eine Frage:
1. Frage geht es die Abfrage direkt vom ftp zu machen?
Wenn nicht werde ich sie einfach Local abspeichern lassen und diese dann Automatisch aktuliesieren lassen.
Die csv Datein befinden sich in folgenden Ordnern:
C:\Auftrag\... Hier liegt der Aktuelle Auftrag mit seinr Nummer Als Beispiel 123456
Beispiel: C:\123456\...
C:\Auftrag\Location1\ Hier ist der Standort mit Namen versehen Beispiel Location1 & Location2
Beispiel: C:\123456\Location1\...
Beispiel: C:\123456\Location2\...
C:\Auftrag\Location1\0001... Hier sind die "Engines" Mit ihren Nummern gespeichert
Beispiel: C:\123456\Location1\0001\.... ( Hier Location1 mit Engine 0001) Dabei geht Location1 nur von 0001 bis 0019
Beispiel: C:\123456\Location2\0020\... ( Hier Location2 mit Engine 0020) Dabei geht Location2 nur von 0020 bis 0040
C:\Auftrag\Location1\0001\logs\...Im Ordner Logs wird für jeden Monat ein Ordner mit der jeweiligen Beschriftung 2015_07 für "Juli" angelegt.
In diesem Befinden sich dann die csv Datein die jeweils nach dem Tag Benannt sind an dem sie erstellt wurden info_2015_07_01.csv für den ersten Juli.
Beispiel:
C:\Auftrag\Location1\0001\logs\2015_07\log_2015_07_01.csv (...2015_07_01 bis ...2015_07_31)
C:\Auftrag\Location1\0001\logs\2015_08\log_2015_08_01.csv (...2015_08_01 bis ...2015_08_31)
(0001-0020)
C:\Auftrag\Location2\00020\logs\2015_07
(0021-0040)
Formatierung der csv
Timestamp;Comes;Goes;Duration;Variable;Message
07:49:00.680;;;;TEXT1TEXT;TEXT2TEXT
Die Exel Tabelle in der alles eingetragen werden soll, hat in der Zeile A1-H1 einen Header stehen der zum Filtern am Ende dient.
Das sieht wiefolgt aus:
Zelle
A1 = Ordernummer
B1 = Engine
C1 = Date [YYMMDD]
D1 = Time[hh:mm]
E1 = Errorcode
F1 = Errortext
Habe dazu im FOrum folgenden Code von "Culinardo"gefunden:
Sub ImportiereCSVDateien()
Const CSVPFAD = "E:\csv-dateien"
Dim wbTarget As Workbook, wbSource As Workbook, ws As Worksheet, ts As Worksheet
Set fso = CreateObject("Scripting.Filesystemobject")
Set wbTarget = ActiveWorkbook
Application.DisplayAlerts = False
'Lösche alle Worksheets bevor wir alle neu anlegen
While wbTarget.Worksheets.Count > 1
wbTarget.Worksheets(1).Delete
Wend
wbTarget.Worksheets(1).Name = "Zusammenfassung"
wbTarget.Worksheets(1).Range("A:ZZ").Clear
For Each f In fso.GetFolder(CSVPFAD).Files
If LCase(Right(f.Name, 3)) = "csv" Then
Workbooks.OpenText Filename:=f.Path
Set wbSource = ActiveWorkbook
On Error Resume Next
Set ws = wbTarget.Worksheets(f.Name)
If Err <> 0 Then
Set ws = wbTarget.Worksheets.Add
ws.Name = f.Name
ws.Range("A:ZZ").Clear
End If
wbSource.Worksheets(1).Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Semicolon:=True, TrailingMinusNumbers:=True
wbSource.Worksheets(1).Range("A:ZZ").Copy Destination:=ws.Range("A1")
wbSource.Close False
End If
Next
Set ts = wbTarget.Worksheets("Zusammenfassung")
Dim curCell As Range
Set curCell = ts.Range("A1")
For i = 1 To wbTarget.Worksheets.Count - 1
maxRow = wbTarget.Worksheets(i).Range("A1").End(xlDown).Row
maxCol = wbTarget.Worksheets(i).Range("A1").End(xlToRight).Column
wbTarget.Worksheets(i).Range(wbTarget.Worksheets(i).Cells(1, 1), wbTarget.Worksheets(i).Cells(maxRow, maxCol)).Copy Destination:=curCell
Set curCell = curCell.End(xlDown).Offset(2, 0)
Next
Application.DisplayAlerts = True
Set fso = Nothing
End Sub
Dieser Code ist an sich super nur müsste er an "meine" Bedürfnisse angepasst werden.
Es soll nur eine Exeldatei mit einer Exel Tabelle erstellt werden bzw. in die Vorhandene eingefügt werden.
"Auswertung.xlsx"
1. Die Daten sollen untereinander ohne die Headline aus der csv kopiert werden.
2. Sie sollen ab Zeile 2 Beginnen.
3. Timestamp aus der CSV soll in der Tabelle ab D2 anfangen, untereinander
4. Text2 soll bei E2 anfangen, untereinander
5. Die anderen Spalten sollen nicht aus der CSV kopiert werden.
6. In Spalte A ab A2 soll immer die Auftragsnummer erscheinen sobald in Spalte D2 oder E2 etwas steht.
7. In Spalte B ab B2 soll immer die Enginenummer (Bsp. 0001) aus dem Order übernommen werden, indem die CSV liegen die gerade eingetragen werden
Also gemeint ist das die csv's in einem Unter Ordner von Engine liegen aber der Bezug wichtig ist.
Beispiel: C:\...\0001\Logs\2015_08\Info_2015_08_01.csv
Das muss sein damit man das ganze hinterher alles nach Engine Filtern kann.
8. Spalte C ab C2 soll mit dem Datum versehen werden, was die csv Datei trägt aber wenn möglich formatiert in, ist aber kein muss(C2 = 150801)
Beispiel: C:\...\0001\Logs\2015_08\Info_2015_08_01.csv
Am Ende sieht das so aus :**
A2= 149860
B2= 0001
C2= 150807
D2= 15:16:26.548
E2= TEXT2
Ich hoffe das ich es jetzt besser dargestellt habe als vorher, bin morgen aber den ganzen Tag Online, da ich auf Arbeit damit gerade zu tun habe.
LG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 279724
Url: https://administrator.de/forum/exel-2013-datenauswertung-279724.html
Ausgedruckt am: 23.04.2025 um 03:04 Uhr
10 Kommentare
Neuester Kommentar

Moin,
einmal die Suchfunktion bemüht::
Ich würd das direkt mit Powershell machen, das geht fixer.
Aber deine Beschreibung ist leider etwas konfus, da du hier mehrere Spaltenreihenfolgen beschreibst kann man das nur schwer nachvollziehen. Eine Bereinigung und Nutzung der dir hier zu Verfügung stehenden Formatierungsmöglichkeiten, ständen dem Beitrag ganz gut.
Gruß grexit
einmal die Suchfunktion bemüht::
- Alle CSV-Dateien in einem Ordner mit einem VBA Makro einlesen
- Alle CSV-Dateien in einem Ordner mit einem VBA Makro einlesen Teil 2
- Excel Makro um CSV Dateien auszuwerten und gesammelt anzuzeigen.
Ich würd das direkt mit Powershell machen, das geht fixer.
Aber deine Beschreibung ist leider etwas konfus, da du hier mehrere Spaltenreihenfolgen beschreibst kann man das nur schwer nachvollziehen. Eine Bereinigung und Nutzung der dir hier zu Verfügung stehenden Formatierungsmöglichkeiten, ständen dem Beitrag ganz gut.
Gruß grexit

Mit Powershell lässt sich das ziemlich einfach und schnell so abbilden:
In Zeile 1 den Ordner angeben in dem die Auftragsordner '12345' etc. liegen (bitte kein Backslash am Ende angeben), und dann noch in Zeile 2 die Ausgabe-CSV-Datei angeben in der die Zusammengefassten Daten ausgegeben werden. Die kannst du dann nach dem Durchlauf in Excel direkt öffnen. Wurde hier nach deiner angegebenen Ordnerstruktur und dem Aufbau deiner CSV-Dateien einwandfrei getestet.
Gruß grexit
In Zeile 1 den Ordner angeben in dem die Auftragsordner '12345' etc. liegen (bitte kein Backslash am Ende angeben), und dann noch in Zeile 2 die Ausgabe-CSV-Datei angeben in der die Zusammengefassten Daten ausgegeben werden. Die kannst du dann nach dem Durchlauf in Excel direkt öffnen. Wurde hier nach deiner angegebenen Ordnerstruktur und dem Aufbau deiner CSV-Dateien einwandfrei getestet.
$folder = 'C:\Aufträge'
$outputFile = 'C:\AusgabeOrdner\consolidated.csv'
$consolidated = @()
gci $folder -Filter *.csv -recurse | %{
$date = $_.Basename -replace '.*(\d{2})_(\d{2})_(\d{2}).*','$1$2$3'
$dir = $_.DirectoryName.replace($folder,'').split('\')
$auftrag = $dir[2]; $engine = $dir[3]
$csv = Import-csv $_.FullName -Delimiter ";" -Encoding Default
$csv | Add-Member -MemberType NoteProperty -Name Ordernummer -Value $auftrag
$csv | Add-Member -MemberType NoteProperty -Name Engine -Value $engine
$csv | Add-Member -MemberType NoteProperty -Name Date -Value $date
$consolidated += $csv
}
$consolidated | select Ordernummer,Engine,Date,Timestamp,Variable,Message | export-csv $outputFile -Delimiter ';' -NoType -Encoding UTF8

Zitat von @andreasp85:
Das Script als solches ist super und funktioniert auch, aber ich bekomme leider nicht alle Dazugehörigen Daten.
Bei manchen Daten sin Buchstaben nicht gelesen wurden dadurch sind viele Datensätze nicht mehr gleich.
Beispiel: �No Wommunication�witp HeadGontrgl Aisle�16:3�:17>040 16:39:07.�08
Dazu musst du das Encoding der Dateien in Zeile 8 an deine Dateien anpassen (UTF8, etc). Bitte beachten das dieser Parameter erst ab Powershell 3.0 verfügbar ist. D.h. Wenn du noch PS 2.0 verwendest musst du ein Update fahren!Das Script als solches ist super und funktioniert auch, aber ich bekomme leider nicht alle Dazugehörigen Daten.
Bei manchen Daten sin Buchstaben nicht gelesen wurden dadurch sind viele Datensätze nicht mehr gleich.
Beispiel: �No Wommunication�witp HeadGontrgl Aisle�16:3�:17>040 16:39:07.�08
Die Tabelle sieht bei mir so aus:
Ordernummer Engine Date Timestamp Variable Message
Location1 Logs 20150701 07:49:00.680 TEXT
Statt Location steht sollte aber die Auftragsnummer "123456" (Beispiel) stehen.
Bei Engine sollten die Nummern der Egine stehen aus der die Spalte extrahiert wurde.
Damit die Daten auch der richtigen Engine zugeordnet werden können.

Nein, definitiv nicht.

Gibt es da noch eine möglichekit dieses zu lösen.
Liegt zu 100 % an deinen Daten und deren Kodierung!Das zweite Problem ist, was mir heute aufgefallen ist, dass das Datum leider immer verschieden in der Spalte "Date"
steht, die Formatierung ist nicht einhaltlich.
Dann musst du das auch erwähnen das das Datum auch anders vorliegen kann...Hellsehen kann ich nicht steht, die Formatierung ist nicht einhaltlich.
Wenn ich dir daten schicke, ist es dir dann möglich evtl. eine genauere Analyse zu machen?
Klar, aber umsons is der Gefatter noch nich tot.
Zitat von @andreasp85:
Das geht doch aus den obenen Beschreibung hervor jeder Monat 1 Ordner (Bsp.2015_08), jeder Tag eine Datei (2015_08_01).
Dachte das wäre verständlich, mein Fehler
Mein Skript nimmt nur das Datum aus dem Dateinamen ! Und das steht nicht in deinem Beitrag das das unterschiedlich formatiert wäre .., sondern immer YYYY_MM_DDDas geht doch aus den obenen Beschreibung hervor jeder Monat 1 Ordner (Bsp.2015_08), jeder Tag eine Datei (2015_08_01).
Dachte das wäre verständlich, mein Fehler
Wenn man weiß welche Formate vorkommen kann man das natürlich anpassen, deswegen meine angesprochene "Glaskugel" ...