lisa110

CRV-Datei auslesen und in Excel konvertieren?

Hallo zusammen,

Für ein Projekt an der Hochschule sollen wir eine Prozessfähigkeitsanalyse mit Excel durchführen.
Die Daten die wir erhalten sind allerdings CRV-Dateien?????
1
Wir bekommen pro Analyse ca. 50 CRV-Dateien in einem Ordner, aus diesen soll jeweils der Höchstwert herausgesucht werden und in einer Excel-Datei automatisch hinterlegt werden in der Reihenfolge wie die Dateien im Ordner sind.

Diese neue Excel-Datei mit den Höchstwerten muss dann wieder in unsere Erstellte Excel-Datei:
2

an der Stelle Rechnung! B:3 abwärts (Maximale Messwerte).

(ist das alles überhaupt realisierbar?)

Es wäre wirklich super wenn mir jemand weiter helfen könnte da ich mich da überhaupt nicht auskenne :/


Liebe Grüße
Lisa110
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 305933

Url: https://administrator.de/forum/crv-datei-auslesen-und-in-excel-konvertieren-305933.html

Ausgedruckt am: 20.06.2025 um 22:06 Uhr

129413
129413 02.06.2016 aktualisiert um 13:10:11 Uhr
Goto Top
Die Daten die wir erhalten sind allerdings CRV-Dateien?????
Und wie sieht der Inhalt so einer Datei aus ??
ist das alles überhaupt realisierbar?
ja
Beispiele gibts ja im Forum genug, z.B. hier: Excel Makro um CSV Dateien auszuwerten und gesammelt anzuzeigen.

Gruß skybird
Lisa110
Lisa110 02.06.2016 um 14:16:14 Uhr
Goto Top
Schonmal vielen Dank für die Antwort face-smile

Die Datei müsste Messwerte enthalten (ich kann sie leider nicht öffne). Weg und benötigte Kraft (brauche aber nur die maximale Kraft)

Hier mal eine Datei:
CRV Datei
129413
Lösung 129413 02.06.2016 aktualisiert um 14:23:41 Uhr
Goto Top
Das sind binär kodierte Daten. Sag deinem vorgesetzten das du die Daten in einem allgemein text-lesbaren Format benötigst, z.B. als CSV. Das sollte derjenige mit dem Programm das die Daten erzeugt hat normalweise recht einfach in dieses Format exportieren können. Mit Excel-Bordmitteln kannst du mit diesen Dateien nichts anfangen.
Könnte unter anderem von diesem Programm stammen: VCarve Pro Design
Lisa110
Lisa110 04.06.2016 um 11:25:02 Uhr
Goto Top
Ich habe die Dateien jetzt als Excel Datei vorliegen:
Excel Dateien

Diese werden von der Presse (die die Excel-Dateien erzeugt) Automatisch nach jedem Pressvorgang in einen Ordner abgespeichert. Jetzt soll ich irgendwie die Höchste Presskraft aus jeder Datei herausziehen:
13
Die Zeile wo die höchste Presskraft ist in jeder Datei anders.
Die Höchste Presskraft soll in diese Excel-Datei ( Prozessfähigkeit ), an der stelle Rechnung! B:3 abwärts automatisch eingetragen und Aktualisiert werden, wenn eine neue Excel-Datei in den Ordner hinzugefügt wird.


Es wäre super wenn mir hier nochmal jemand helfen könnte.

LG
Lisa110
colinardo
Lösung colinardo 04.06.2016, aktualisiert am 07.06.2016 um 17:57:33 Uhr
Goto Top
Hallo Lisa110,
hier das passende Makro:
(Pfad zu den CSV-Dateien in Zeile 3 anpassen, und den Ablageordner in den diese nach Verarbeitung verschoben werden in Zeile 5)
Sub ImportiereCSVDateien()
    'Pfad zu den CSV-Dateien  
    Const CSVPFAD = "A:\csv"  
    'Ordner in den die ausgelesenen CSV-Dateien hinterher verschoben werden  
    Const VERARBEITET = "A:\csv\verarbeitet"  
    
    Dim wsTemp As Worksheet, wsTarget As Worksheet
    Set fso = CreateObject("Scripting.Filesystemobject")  
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    'Zielarbeitsblatt für die importierten Daten  
    Set wsTarget = Sheets("Rechnung")  
    'temporäres Arbeitsblatt für den Import der Daten erstellen  
    Set wsTemp = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    
    ' Verarbeitet Ordner erstellen falls nicht vorhanden  
    If Not fso.FolderExists(VERARBEITET) Then MkDir VERARBEITET
    
    For Each f In fso.GetFolder(CSVPFAD).Files
        If LCase(fso.GetExtensionName(f.Name)) = "csv" Then  
            'Temporäres Sheet löschen  
            wsTemp.UsedRange.Clear
            'CSV-Daten in Temporäres Sheet importieren  
            With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & f.Path, Destination:=wsTemp.Range("$A$1"))  
                .Name = "import"  
                .FieldNames = True
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .TextFilePlatform = 1252
                .TextFileStartRow = 8
                .TextFileParseType = xlDelimited
                .TextFileTextQualifier = xlTextQualifierDoubleQuote
                .TextFileCommaDelimiter = True
                .TextFileDecimalSeparator = "."  
                .TextFileThousandsSeparator = ","  
                .Refresh BackgroundQuery:=False
                .Delete
            End With
            
            With wsTemp
                'Maximalwert in Zielsheet in nächste leere Zelle in Spalte B kopieren  
                wsTarget.Cells(Rows.Count,"B").End(xlUp).Offset(1, 0).Value = WorksheetFunction.Max(.Columns(2))  
            End With
            
            'Datei in die Ablage verschieben  
            f.Move VERARBEITET & "\"  
        End If
    Next
    'Temporäres Sheet löschen  
    wsTemp.Delete
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Vorgang beendet!", vbInformation  
    Set fso = Nothing
End Sub
Grüße Uwe
Lisa110
Lisa110 07.06.2016 um 13:53:23 Uhr
Goto Top
Danke für die Antwort Uwe face-smile

Auf dem Rechner wo das Programm später laufen soll ist eine ältere Excel Version vorhanden. Die Werte werden anderst angezeigt wie bisher:
excel
Die Werte die Sortiert werden sollen sind jetzt in Spalte B und nicht mehr alle in Spalte A mit den anderen Werten zusammen. (ich würde das wirklich auch gern selbst verändern, aber ich weiß nicht mal wo ich da anfangen soll face-sad )

Bei dem oberen Makro kommt immer eine Fehlermeldung (Zeile 3 und 5 habe ich so wie beschrieben verändert):
fehlermeldung

LG
Lisa
129413
Lösung 129413 07.06.2016 aktualisiert um 13:57:57 Uhr
Goto Top
Ähmmm nee, face-big-smile du hast den Code falsch kopiert! Nutze den Button Quelltext oberhalb des Codes zum kopieren! Die Zeilen-Zahlen gehören natürlich nicht zum Code, du meine Güte ... face-big-smile
colinardo
colinardo 07.06.2016 aktualisiert um 14:03:16 Uhr
Goto Top
Zitat von @129413:
Ähmmm nee, face-big-smile du hast den Code falsch kopiert! Nutze den Button Quelltext oberhalb des Codes zum kopieren! Die Zeilen-Zahlen gehören natürlich nicht zum Code, du meine Güte ... face-big-smile
Dito... Code wurde definitiv über die falsche Methode hier kopiert face-wink

Der Code läuft mit deinen Beispieldateien hier in deinem Sheet nämlich einwandfrei.
Lisa110
Lisa110 07.06.2016 um 17:40:09 Uhr
Goto Top
Oje sorry face-confused was für ein doofer Fehler.

Ja jetzt hat es funktioniert, super danke face-big-smile

Eine letzte frage noch: wenn ich jetzt die Messwerte die ich manuell eingegeben hab rauslösche funktioniert es nicht (nur wenn 2 Werte Manuel in B3 und B4 eingetragen sind funktioniert es):

fehlermeldung1
fehlermeldung2


wenn das noch funktionieren würd wäre es wirklich super face-smile
colinardo
colinardo 07.06.2016 um 17:57:57 Uhr
Goto Top
Ist oben dementsprechend angepasst.
Lisa110
Lisa110 07.06.2016 um 18:10:27 Uhr
Goto Top
vielen, vielen Dank für die Hilfe face-smile
colinardo
colinardo 07.06.2016 aktualisiert um 18:55:17 Uhr
Goto Top
You're welcome. face-smile

Grüße Uwe
Lisa110
Lisa110 22.06.2016 um 18:05:22 Uhr
Goto Top
Hallo face-smile

ich hoffe selber dass ich zum letzten mal etwas zu diesem Thema hier fragen muss.
Aber ich soll anstelle des Maximums nun die Presskraft bei einem ganz bestimmten Weg verwenden. D.h. wenn ich in meine Zieldatei in C7 z.B. 210mm eingebe, soll aus den Excel Dateien danach in Spalte A gesucht werden, allerdings die dazugehörigen Kräfte aus Spalte B angezeigt werden (also so wie bisher die Maximalen Messwerte). Nur kann es sein, dass der Wert 210 garn nicht Vorhanden ist sondern 210.184, 210,173,.... das heißt der Wert der am nächsten an meinem angegeben Wert liegt soll verwendet werden.

Ich würde mich wirklich nochmal sehr über eure Hilfe freuen.
Liebe Grüße
Lisa G.
colinardo
Lösung colinardo 22.06.2016 aktualisiert um 19:37:53 Uhr
Goto Top
Hallo Lisa,
das ist kein Problem, aber in deinem Demo-Sheet oben steht in Spalte C eine Formel hast du dort eine zusätzliche Spalte eingefügt ??

Naja egal, nach deiner Beschreibung sollte dies hier passen (Gehe davon aus das der Suchwert für alle CSV-Dateien gleich ist und dieser in Zelle C7 im Sheet Rechnung steht):
Sub ImportiereCSVDateien()
    'Pfad zu den CSV-Dateien  
    Const CSVPFAD = "A:\csv"  
    'Ordner in den die ausgelesenen CSV-Dateien hinterher verschoben werden  
    Const VERARBEITET = "A:\csv\verarbeitet"  
    
    Dim wsTemp As Worksheet, wsTarget As Worksheet
    Set fso = CreateObject("Scripting.Filesystemobject")  
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    'Zielarbeitsblatt für die importierten Daten  
    Set wsTarget = Sheets("Rechnung")  
    'temporäres Arbeitsblatt für den Import der Daten erstellen  
    Set wsTemp = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    
    ' Zielwert für Weg(mm) Zelle C7  
    dblTargetValue = wsTarget.range("C7").Value  

    ' Verarbeitet Ordner erstellen falls nicht vorhanden  
    If Not fso.FolderExists(VERARBEITET) Then MkDir VERARBEITET
    
    For Each f In fso.GetFolder(CSVPFAD).Files
        If LCase(fso.GetExtensionName(f.Name)) = "csv" Then  
            'Temporäres Sheet löschen  
            wsTemp.UsedRange.Clear
            'CSV-Daten in Temporäres Sheet importieren  
            With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & f.Path, Destination:=wsTemp.Range("$A$1"))  
                .Name = "import"  
                .FieldNames = True
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .TextFilePlatform = 1252
                .TextFileStartRow = 8
                .TextFileParseType = xlDelimited
                .TextFileTextQualifier = xlTextQualifierDoubleQuote
                .TextFileCommaDelimiter = True
                .TextFileDecimalSeparator = "."  
                .TextFileThousandsSeparator = ","  
                .Refresh BackgroundQuery:=False
                .Delete
            End With
            
            With wsTemp
                'nächste freie Zelle in Spalte B ermitteln  
                Set cellNextFree = wsTarget.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)  
                'Werte filtern  
                .UsedRange.AutoFilter 1, ">=" & Replace(dblTargetValue, ",", ".")  
                ' gefilterten Wert in Zielzelle schreiben  
                cellNextFree.Value = .AutoFilter.Range.Offset(1, 0).SpecialCells(xlCellTypeVisible).Cells(1, 2).Value
                'Autofilter deaktivieren  
                .UsedRange.AutoFilter
            End With
            
            'Datei in die Ablage verschieben  
            f.Move VERARBEITET & "\"  
        End If
    Next
    'Temporäres Sheet löschen  
    wsTemp.Delete
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Vorgang beendet!", vbInformation  
    Set fso = Nothing
End Sub
Grüße Uwe
Lisa110
Lisa110 24.06.2016 um 00:05:47 Uhr
Goto Top
Vielen lieben Dank face-smile funktioniert super face-wink