Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1452to1456
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Messwerte aufbereiten

Messwerte aufbereiten
28.10.2015 07:10:37
Roman
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.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

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

AW: mit nur einer Formel ...
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
.. , - ...

Anzeige
AW: und mit AGGREGAT() auch variabel ...
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
.. , - ...

Anzeige
AW: Messwerte aufbereiten
28.10.2015 09:06:50
matthias
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 ..." --&gt "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

Anzeige
AW: Messwerte aufbereiten
28.10.2015 11:53:48
Roman
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>

Anzeige
AW: Messwerte aufbereiten
28.10.2015 12:14:46
matthias
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

Anzeige
AW: Messwerte aufbereiten
29.10.2015 09:32:35
Roman
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

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige