lisa110
Goto Top

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

Content-Key: 305933

Url: https://administrator.de/contentid/305933

Printed on: April 16, 2024 at 11:04 o'clock

Mitglied: 129413
129413 Jun 02, 2016 updated at 11:10:11 (UTC)
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
Member: Lisa110
Lisa110 Jun 02, 2016 at 12:16:14 (UTC)
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
Mitglied: 129413
Solution 129413 Jun 02, 2016 updated at 12:23:41 (UTC)
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
Member: Lisa110
Lisa110 Jun 04, 2016 at 09:25:02 (UTC)
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
Member: colinardo
Solution colinardo Jun 04, 2016, updated at Jun 07, 2016 at 15:57:33 (UTC)
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
Member: Lisa110
Lisa110 Jun 07, 2016 at 11:53:23 (UTC)
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
Mitglied: 129413
Solution 129413 Jun 07, 2016 updated at 11:57:57 (UTC)
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
Member: colinardo
colinardo Jun 07, 2016 updated at 12:03:16 (UTC)
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.
Member: Lisa110
Lisa110 Jun 07, 2016 at 15:40:09 (UTC)
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
Member: colinardo
colinardo Jun 07, 2016 at 15:57:57 (UTC)
Goto Top
Ist oben dementsprechend angepasst.
Member: Lisa110
Lisa110 Jun 07, 2016 at 16:10:27 (UTC)
Goto Top
vielen, vielen Dank für die Hilfe face-smile
Member: colinardo
colinardo Jun 07, 2016 updated at 16:55:17 (UTC)
Goto Top
You're welcome. face-smile

Grüße Uwe
Member: Lisa110
Lisa110 Jun 22, 2016 at 16:05:22 (UTC)
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.
Member: colinardo
Solution colinardo Jun 22, 2016 updated at 17:37:53 (UTC)
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
Member: Lisa110
Lisa110 Jun 23, 2016 at 22:05:47 (UTC)
Goto Top
Vielen lieben Dank face-smile funktioniert super face-wink