Messwerte aufbereiten

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Messwerte aufbereiten
von: Roman
Geschrieben am: 28.10.2015 07:10:37

Hallo Forumsfreunde,
Ich habe eine Liste mit XY Messwerten als .cvs Datei die ich gerne ins Excel importieren und damit ein Linien-Diagramm erstellen möchte.
Nach dem Import stehen in Tabellenblatt-1 Spalte A die X und in Spalte B die Y Werte.
Die Spalten beinhalten Daten von mehreren Teilen hintereinander.
Die Aufgabe besteht darin, die Daten der einzelnen Teilen zu erkennen und in entsprechen aufzuteilen. Als Kriterium kann ein Wertewechsel nach jedem Teil sein.
das heisst die Werte in Spalte A steigen an bis ca. 7000 und fallen bei Beginn des nächsten Teil auf unter 20. So könnten die Daten von Spalte A und B der einzelnen Teilen erkannt und in ein neues Tabellenblatt exportiert werden. Daten 1. Teil Spalte A+B, 2. Teil Spalte usw. bis Teil 5
Ich habe es über deine Formel mit Variablen Bereichen versucht zu lösen leider ohne Erfolg.
Für einen Lösungsansatz, ich vermute mal über VBA-Makro, würde ich mich freuen.

Bild

Betrifft: AW: Messwerte aufbereiten
von: SF
Geschrieben am: 28.10.2015 08:03:57
Hola,
zeig doch mal anhand einer Tabelle wie das ganze aussieht und was du gerne als Ergebnis hättest.
Gruß,
steve1da

Bild

Betrifft: AW: Messwerte aufbereiten
von: Roman
Geschrieben am: 28.10.2015 08:37:25
Hallo steve1da
Hier zum besseren Verständnis die Tabelle wie das ganze mal ausschauen sollte.
https://www.herber.de/bbs/user/101086.xlsx
Gruss Roman

Bild

Betrifft: AW: mit nur einer Formel ...
von: ... neopa C
Geschrieben am: 28.10.2015 09:07:47
Hallo Roman,
... folgende Formel einfach ziehen nach unten und rechts kopieren
Tabelle1

 ABCDE
1X Teil 1Y Teil 1X Teil 2Y Teil 2X Teil 3
2110521019
35326831320
4114121440627
5154901948131

Formeln der Tabelle
ZelleFormel
A2=WENN((ZEILE(A1)>175)+(A1=""); "";WENN(REST(SPALTE(A1); 2); INDEX(Import!$A:$A;ZEILE(A1)+(175*KÜRZEN(SPALTE(A1)/2;))); SVERWEIS(INDEX(2:2;SPALTE()-1); Import!$A:$B;2;0)))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...

Bild

Betrifft: AW: und mit AGGREGAT() auch variabel ...
von: ... neopa C
Geschrieben am: 28.10.2015 09:21:46
Hallo nochmal,
... wenn eine unterschiedliche Anzahl von Datensätzen in Import nach dem gleichen Schema eingelesen werden, d.h. es das nächste Mal statt 175 Datensätze je Teil 99 oder 234 Datensätze sein können, dann kann die 175 in der Formel auch mit AGGREGAT einfach berechnet werden.
Dann einfach so:

 A
21

Formeln der Tabelle
ZelleFormel
A2=WENN((ZEILE(A1)>AGGREGAT(15;6;ZEILE($A$1:$A$999)/(Import!$A$2:$A$999<Import!$A$1:$A$998); 1))+(A1=""); "";WENN(REST(SPALTE(A1); 2); INDEX(Import!$A:$A;ZEILE(A1)+(AGGREGAT(15;6;ZEILE($A$1:$A$999)/(Import!$A$2:$A$999<Import!$A$1:$A$998); 1)*KÜRZEN(SPALTE(A1)/2;))); SVERWEIS(INDEX(2:2;SPALTE()-1); Import!$A:$B;2;0)))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...


Bild

Betrifft: AW: Messwerte aufbereiten
von: matthias
Geschrieben am: 28.10.2015 09:06:50
Hallo Roman,
um das ganze leichter zu machen gibt es sogenannte Excel-Vorlagen mit Makros. Dort liegt bereits dein Linien-Diagramm, welches du dann nicht aufwendig per VBA erstellen musst, sondern vorher per Hand so einrichtest wie es dir beliebt. Damit musst du dich nur um den Import und die Aufteilung der Daten kümmern.
Hier zunächst ein einfacher Import:


Sub Dateiimport()
Dim myFileAddress As Variant
Application.ScreenUpdating = False
Application.Calculation = xlManual
' Standard-Verzeichnis festlegen
SetCurrentDirectory "C:\User\Desktop"
' Dateiimport
myFileAddress = Application.GetOpenFilename("CSV-Dateien (*.csv), *.csv")
If myFileAddress = False Then GoTo Endmarke 'Wenn Abbrechen gewählt
With Sheets("Import").QueryTables.Add(Connection:="TEXT;" & myFileAddress, _
        Destination:=Sheets("Import").Range("A1"))
    .Name = "Import"
    'Eigenschaften über "Externe Daten abrufen" und Makrorecorder bestimmen
    .FieldNames = True
    .RowNumbers = False
    '...
    '...
    .Refresh BackgroundQuery:=False
End With
Endmarke: 'Grundeinstellungen wiederherstellen
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub

Der Import ist nicht ganz vollständig, denn er muss von dir auf deine spezielle Datei angepasst werden. Dazu schmeiße den Makro-Recorder an und führe den Import ein Mal manuell durch (Reiter "Daten" - Externe Daten abrufen und dem Assistenten folgen). Danach die Eigenschaften an der entsprechenden Stelle in obiges Makro einfügen.
Die Teile-Erkennung ist recht simpel, da du ja ein sehr schönes Muster hast.
Sub TeileErkennung()
Dim x As Long, lSpalte As Long
Dim rZelle1 As Range, rZelle2 As Range
Application.ScreenUpdating = False
Application.Calculation = xlManual
With Sheets("Import")
    Set rZelle1 = .Range("A2")
    lSpalte = 1
    For x = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
        If .Cells(x, 1) > .Cells(x + 1, 1) Then
            Set rZelle2 = .Cells(x, 2)
            Sheets("Auswertung").Cells(1, lSpalte) = "Teil " & Int(lSpalte / 2) + 1
            Range(rZelle1, rZelle2).Copy Destination:=Sheets("Auswertung").Cells(2, lSpalte)
            lSpalte = lSpalte + 2
            Set rZelle1 = .Cells(x + 1, 1)
        End If
    Next x
End With
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub
Ich habe angenommen, dass deine Daten eine Überschrift haben, darum rZelle1 zu Beginn als "A2" festgelegt. Sollte dies nicht der Fall sein, ändere dies bitte auf "A1" und zwei Zeilen darunter aus "For x = 2 To ..." --> "For x = 1 To ..." machen.
Statt ein neues Tabellenblatt zu erstellen, hast du in der Vorlage bereits ein Tabellenblatt (hier "Auswertung") erstellt, sodass dies ebenfalls nicht im Makro erfolgen muss.
Erstelle dir nun noch einen Active-X-Button im Blatt "Import" und Rechtsklick auf diesen - " _ Code Anzeigen". Dort dieses Event reinschmeißen:

Private Sub CommandButton1_Click()
Call Dateiimport
Call TeileErkennung
End Sub
Wenn alles passt, leere die eingetragenen Daten und speichere die Datei als Typ "Excel-Vorlage mit Makros", damit du diese wiederverwenden kannst.
lg Matthias

Bild

Betrifft: AW: Messwerte aufbereiten
von: Roman
Geschrieben am: 28.10.2015 11:53:48
Hallo Matthias
Erstmals herzlichen Dank für Deine Hilfe.
Soweit funktioniert alles perfekt wie ich mir das vorgestellt habe.
Einzig mit dem Code für den Import habe ich etwas Probleme.
Wir von Dir beschriben habe ich deinen Code entsprechend angepasst und denoch will er das File nicht Importieren, irgendwie stehe ich auf dem Schlauch.

'' Standard-Verzeichnis festlegen
SetCurrentDirectory "C:\Users\axi01236\Desktop\Smac"
' Dateiimport
myFileAddress = Application.GetOpenFilename("CSV-Dateien (*.csv), *.csv")
If myFileAddress = False Then GoTo Endmarke 'Wenn Abbrechen gewählt
With Sheets("Import").QueryTables.Add(Connection:="TEXT;C:\Users\axi01236\Desktop\Smac\Import. _
csv" _
        Destination:=Sheets("Import").Range("A1"))
        .Name = "Import"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = True
        .TextFileColumnDataTypes = Array(2, 1)
        .TextFileTrailingMinusNumbers = True
    'Eigenschaften über "Externe Daten abrufen" und Makrorecorder bestimmen
    .FieldNames = True
    .RowNumbers = False/pre>

Bild

Betrifft: AW: Messwerte aufbereiten
von: matthias
Geschrieben am: 28.10.2015 12:14:46
Zwei kleine Sachen:
1. Es sollte so lauten:

With Sheets("Import").QueryTables.Add(Connection:="TEXT;" & myFileAddress, _
        Destination:=Sheets("Import").Range("A1"))
Die Variable myFileAddress enthält ja die Bezeichnung der ausgewählten Datei. Dies ist aber nicht der Grund warum der Import nicht funktioniert.
2. Die drei/vier Zeilen unter dem Kommentar "'Eigenschaften über "Externe Daten abrufen" und Makrorecorder bestimmen" bis zum "End With" kannst du rauslöschen (.FieldNames, .RowNumbers, ...). Das "End With" aber bitte stehen lassen.
Stelle bitte sicher dass du auch alle Eigenschaften aus dem aufgezeichneten Abschnitt kopiert hast, meines Erachtens fehlt da eine. Hoffe es liegt daran.
lg Matthias

Bild

Betrifft: AW: Messwerte aufbereiten
von: Roman
Geschrieben am: 29.10.2015 09:32:35
Hallo Matthias
Es will einfach nicht, das einzige was als Eigenschaft gefehlt hat ist die Zeile; CommandType = 0. aber bracht auch nichts.
Gruss Roman


' Standard-Verzeichnis festlegen
SetCurrentDirectory "C:\Users\axi01236\Desktop\Smac\"
' Dateiimport
myFileAddress = Application.GetOpenFilename("CSV-Dateien (*.csv), *.csv")
If myFileAddress = False Then GoTo Endmarke 'Wenn Abbrechen gewählt
With Sheets("Import").QueryTables.Add(Connection:="TEXT;" & myFileAddress, _
         Destination:=Sheets("Import").Range("A1"))
        .CommandType = 0
        .Name = "Import-H-B"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = True
        .TextFileColumnDataTypes = Array(2, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
  End With


 Bild

Beiträge aus den Excel-Beispielen zum Thema "ListBox durch abhängige Kombinationsboxen füllen"