Discussion:
Vgl aufeinanderfolgender Werte und berechne Differenz zw. Max und Min
(zu alt für eine Antwort)
rene
2006-04-19 12:32:46 UTC
Permalink
Hallo,

ich habe eine Tabelle mit 2 Spalten. In der ersten (A) steht die Zeit
und in der zweiten (B) die Füllhöhe. Die Füllhöhe schwankt nun
periodisch zw. einem Max und einem Min-Wert. Da die Werte von einer
technischen Anlage kommen, und die Steuerung etwas ungenau ist,
schwanken nun die max. und min. Werte.
Zur Auswertung brauche ich aber die genaue Differenz zw. dem Max (max1)
und seinem folgendem Min (min1) Wert. Kurze Zeit später wird die
Anlage wieder befüllt und ich bekomme einen neuen max-Wert (max2), wo
ebenfalls die Differenz zu seinem Folgewert (min2) berechnet werden
soll. Naja usw. bis das Ende der erreicht ist.
Die Ergebnisse möchte ich dann gerne in zwei neuen Spalte C und D mit
den dazugehörigen Zeiten des Startmax-Wertes (max1, max2, usw.) aus
Spalte A haben.

So in etwa sieht die Tabelle aus
Zeit Füllhöhe
12:02 44,00 --> min0
12:04 45,20
12:06 46,00
12:08 47,01
12:10 47,02 --> max1
12:12 46,60
12:14 46,30
12:16 45,90
12:18 45,20
12:20 45,00
12:22 44,80
12:24 44,50
12:26 44,10 --> min1
12:28 44,90
12:30 45,80
12:32 46,50
12:34 47,10
12:36 47,12 --> max2
12:38 46,80
usw.

Danke für eure Hilfe
Gruß Rene Gildemeister
Jean Ruch
2006-04-19 15:54:03 UTC
Permalink
Post by rene
Hallo,
ich habe eine Tabelle mit 2 Spalten. In der ersten (A) steht die Zeit
und in der zweiten (B) die Füllhöhe. Die Füllhöhe schwankt nun
periodisch zw. einem Max und einem Min-Wert. Da die Werte von einer
technischen Anlage kommen, und die Steuerung etwas ungenau ist,
schwanken nun die max. und min. Werte.
Zur Auswertung brauche ich aber die genaue Differenz zw. dem Max (max1)
und seinem folgendem Min (min1) Wert. Kurze Zeit später wird die
Anlage wieder befüllt und ich bekomme einen neuen max-Wert (max2), wo
ebenfalls die Differenz zu seinem Folgewert (min2) berechnet werden
soll. Naja usw. bis das Ende der erreicht ist.
Die Ergebnisse möchte ich dann gerne in zwei neuen Spalte C und D mit
den dazugehörigen Zeiten des Startmax-Wertes (max1, max2, usw.) aus
Spalte A haben.
So in etwa sieht die Tabelle aus
Zeit Füllhöhe
12:02 44,00 --> min0
12:04 45,20
12:06 46,00
12:08 47,01
12:10 47,02 --> max1
12:12 46,60
12:14 46,30
12:16 45,90
12:18 45,20
12:20 45,00
12:22 44,80
12:24 44,50
12:26 44,10 --> min1
12:28 44,90
12:30 45,80
12:32 46,50
12:34 47,10
12:36 47,12 --> max2
12:38 46,80
usw.
Danke für eure Hilfe
Gruß Rene Gildemeister
Hallo Rene,

Probier mal folgendes Makro aus.
Für den ersten Wert, der bei Dir ja ein Minimum ist habe ich auch vom
folgenden wert abhängig gemacht und heißt dann Max0. Die Listen lasse ich im
gleichen Blatt in Spalten E bis J schreiben.
Sieh also zu dass z. B außer Deiner eigentlichen Daten, die bei mir in
Spalten A un B stehen, die Spalten C bis J frei sind.

Bei Problemen melde Dich zurück

mit freundlicem Gruß

Jean

Und hier das Werk....

Sub Min_Max()

Min = 1
Max = 1
Set mycell = Application.InputBox _
(prompt:="Bitte den oberen Wert" & Chr(13) _
& "der Pegelstände anklicken", Type:=8)

rngadr = mycell.Address
mycell.Select
If mycell.Value < mycell.Offset(1, 0) Then
mycell.Offset(0, 1).Formula = "Min0"
Else
mycell.Offset(0, 1).Formula = "Max0"
End If

Do Until IsEmpty(ActiveCell.Offset(1, 0))

ActiveCell.Offset(1, 0).Select

If ActiveCell.Offset(1, 0).Value > ActiveCell.Value _
And ActiveCell.Offset(-1, 0).Value > ActiveCell.Value _
Then
ActiveCell.Offset(0, 1).Formula = "Min" & Min
Min = Min + 1
End If

If ActiveCell.Offset(1, 0).Value < ActiveCell.Value _
And ActiveCell.Offset(-1, 0).Value < ActiveCell.Value _
Then
ActiveCell.Offset(0, 1).Formula = "Max" & Max
Max = Max + 1
End If

Loop

Range(rngadr).Offset(0, 1).Select
Do Until IsEmpty(ActiveCell.Offset(1, -1))

If Left(ActiveCell, 3) = "Min" Then _
Range(ActiveCell, ActiveCell.Offset(0, -2)). _
Copy Range("E65530").End(xlUp).Offset(1, 0)

If Left(ActiveCell, 3) = "Max" Then _
Range(ActiveCell, ActiveCell.Offset(0, -2)). _
Copy Range("H65530").End(xlUp).Offset(1, 0)

ActiveCell.Offset(1, 0).Select
Loop

Range("A1").Select

End Sub
Jean Ruch
2006-04-19 16:24:01 UTC
Permalink
Post by Jean Ruch
Hallo Rene,
Probier mal folgendes Makro aus.
Für den ersten Wert, der bei Dir ja ein Minimum ist habe ich auch vom
folgenden wert abhängig gemacht und heißt dann Max0. Die Listen lasse ich im
gleichen Blatt in Spalten E bis J schreiben.
Sieh also zu dass z. B außer Deiner eigentlichen Daten, die bei mir in
Spalten A un B stehen, die Spalten C bis J frei sind.
Bei Problemen melde Dich zurück
mit freundlicem Gruß
Jean
Und hier das Werk....
Sub Min_Max()
Min = 1
Max = 1
Set mycell = Application.InputBox _
(prompt:="Bitte den oberen Wert" & Chr(13) _
& "der Pegelstände anklicken", Type:=8)
rngadr = mycell.Address
mycell.Select
If mycell.Value < mycell.Offset(1, 0) Then
mycell.Offset(0, 1).Formula = "Min0"
Else
mycell.Offset(0, 1).Formula = "Max0"
End If
Do Until IsEmpty(ActiveCell.Offset(1, 0))
ActiveCell.Offset(1, 0).Select
If ActiveCell.Offset(1, 0).Value > ActiveCell.Value _
And ActiveCell.Offset(-1, 0).Value > ActiveCell.Value _
Then
ActiveCell.Offset(0, 1).Formula = "Min" & Min
Min = Min + 1
End If
If ActiveCell.Offset(1, 0).Value < ActiveCell.Value _
And ActiveCell.Offset(-1, 0).Value < ActiveCell.Value _
Then
ActiveCell.Offset(0, 1).Formula = "Max" & Max
Max = Max + 1
End If
Loop
Range(rngadr).Offset(0, 1).Select
Do Until IsEmpty(ActiveCell.Offset(1, -1))
If Left(ActiveCell, 3) = "Min" Then _
Range(ActiveCell, ActiveCell.Offset(0, -2)). _
Copy Range("E65530").End(xlUp).Offset(1, 0)
If Left(ActiveCell, 3) = "Max" Then _
Range(ActiveCell, ActiveCell.Offset(0, -2)). _
Copy Range("H65530").End(xlUp).Offset(1, 0)
ActiveCell.Offset(1, 0).Select
Loop
Range("A1").Select
End Sub
Hallo René,

was einem nicht alles so einfällt nachdem man das Mail weggeschickt hat....

Das Makro ist auf keinerlei Fehler abgesichert.
Einer davon würde passieren, wenn für das Max bzw. Min zufällig identische
Werte hintereinander vorliegen würden.
Dann ignoriert diese Ausführung weil es ir so gesagt wird, und geht einfach
weiter.
Hab im Augenblick allerdings noch was wichtiges zu tun. Mal sehen ob ich
heute abend dazu komme, um mindestens diese Eventualität abzufangen.

Übrigens in meiner Einführung hätte ich Dir sagen können, dass ich in meinem
Blatt in Spalte A die Zeiten, in Spalte B die Pegelstände hatte, sonst nichts.
Über Min und Max hat dann das Makro seine eigene Meinung.... :-)
und schreibt sie dann in Spalte C.
Bei den Werten, die ich zugrunde gelegt hatte (50 an der Zahl) hatte es
ordentlich funktioniert. Ich hoffe bei Dir läuft es auch so.
Mache vielleicht ein Diagramm aus Deinen Rohdaten, um Dich abzusichern dass
der oben erwähnten Fall nicht auftritt. Sollte es trotzdem der Fall sein,
genügt eine vorläufige leichte Veränderung eines der Werten z.B. durch eine
zusätliche Dezimalstelle (verschieden von Null) anzuhängen, die Du ja nachher
wieder richtig stellen kannst
Tut mir leid wenn es dazu nötig wäre

mit freundlichem Gruß

Jean
Jean Ruch
2006-04-19 20:14:30 UTC
Permalink
Post by Jean Ruch
Hab im Augenblick allerdings noch was wichtiges zu tun. Mal sehen ob ich
heute abend dazu komme, um mindestens diese Eventualität abzufangen.
Hallo René,

Hier eine Version die sich von zwei identischen, direkt
aufeinanderfolgende Werte nicht mehr beeindrucken läßt
In Spalte C werden dann für diese Fälle auch zwei mal der gleiche
Eintrag (z.B. "Min2") ausgegeben.
Diese Werte entsprechen ja auch zwei unterschiedlichen Zeiten, wie es
auch in einem Diagramm aus der Auflistung gut zu erkennen ist.

Vielleicht kannst Du damit was anfangen.
Der letztere Teil ist auch von der Adressierungsseite etwas eindeutiger
gestaltet, für den Fall, dass Du das Makro in einem Blatt stehen hast
(und nicht in einem Modul), arbeitest aber in einem anderen Blatt , was
mein Fall war bei der Überarbeitung :-)

Hier die ergänzte Version

Mit freundlichem Gruß

Jean


Sub Min_Max()

Min = 1
Max = 1
Set mycell = Application.InputBox _
(prompt:="Bitte den oberen Wert" & Chr(13) _
& "der Pegelstände anklicken", Type:=8)

rngadr = mycell.Address
mycell.Select
If mycell.Value < mycell.Offset(1, 0) Then
mycell.Offset(0, 1).Formula = "Min0"
Else
mycell.Offset(0, 1).Formula = "Max0"
End If
Do Until IsEmpty(ActiveCell.Offset(1, 0))

ActiveCell.Offset(1, 0).Select

If ActiveCell.Offset(2, 0).Value >= ActiveCell.Value _
And ActiveCell.Offset(1, 0).Value >= ActiveCell.Value _
And ActiveCell.Offset(-2, 0).Value >= ActiveCell.Value _
And ActiveCell.Offset(-1, 0).Value >= ActiveCell.Value _
Then
ActiveCell.Offset(0, 1).Formula = "Min" & Min
If ActiveCell.Value = ActiveCell.Offset(-1, 0) Then
ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(-1, 1).Value
Min = Min - 1
End If

Min = Min + 1
End If

If ActiveCell.Offset(2, 0).Value <= ActiveCell.Value _
And ActiveCell.Offset(1, 0).Value <= ActiveCell.Value _
And ActiveCell.Offset(-1, 0).Value <= ActiveCell.Value _
And ActiveCell.Offset(-2, 0).Value <= ActiveCell.Value _
Then
ActiveCell.Offset(0, 1).Formula = "Max" & Max
If ActiveCell.Value = ActiveCell.Offset(-1, 0) Then
ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(-1, 1).Value
Max = Max - 1
End If
Max = Max + 1
End If

Loop

ActiveSheet.Range(rngadr).Offset(0, 1).Select

Do Until IsEmpty(ActiveCell.Offset(1, -1))

If Left(ActiveCell, 3) = "Min" Then _
ActiveSheet.Range(ActiveCell, ActiveCell.Offset(0, -2)). _
Copy ActiveSheet.Range("E65530").End(xlUp).Offset(1, 0)
If Left(ActiveCell, 3) = "Max" Then _
ActiveSheet.Range(ActiveCell, ActiveCell.Offset(0, -2)). _
Copy ActiveSheet.Range("H65530").End(xlUp).Offset(1, 0)

ActiveCell.Offset(1, 0).Select
Loop
ActiveSheet.Range("A1").Select

End Sub

Eike Bimczok
2006-04-19 19:55:29 UTC
Permalink
Post by rene
Hallo,
ich habe eine Tabelle mit 2 Spalten. In der ersten (A) steht die Zeit
und in der zweiten (B) die Füllhöhe. Die Füllhöhe schwankt nun
periodisch zw. einem Max und einem Min-Wert. Da die Werte von einer
technischen Anlage kommen, und die Steuerung etwas ungenau ist,
schwanken nun die max. und min. Werte.
Zur Auswertung brauche ich aber die genaue Differenz zw. dem Max (max1)
und seinem folgendem Min (min1) Wert. Kurze Zeit später wird die
Anlage wieder befüllt und ich bekomme einen neuen max-Wert (max2), wo
ebenfalls die Differenz zu seinem Folgewert (min2) berechnet werden
soll. Naja usw. bis das Ende der erreicht ist.
Die Ergebnisse möchte ich dann gerne in zwei neuen Spalte C und D mit
den dazugehörigen Zeiten des Startmax-Wertes (max1, max2, usw.) aus
Spalte A haben.
So in etwa sieht die Tabelle aus
Zeit Füllhöhe
12:02 44,00 --> min0
12:04 45,20
12:06 46,00
12:08 47,01
12:10 47,02 --> max1
12:12 46,60
12:14 46,30
12:16 45,90
12:18 45,20
12:20 45,00
12:22 44,80
12:24 44,50
12:26 44,10 --> min1
12:28 44,90
12:30 45,80
12:32 46,50
12:34 47,10
12:36 47,12 --> max2
12:38 46,80
usw.
Danke für eure Hilfe
Gruß Rene Gildemeister
Hallo Rene,

ich gehe mal davon aus, dass die Tabelle in A1 (Zeiten) bzw B1 (Werte)
anfängt. Dann kommst du mit folgender Formellösung zum Ziel:

erst mal "Differenzieren", die Formel entsprechend nach unten ziehen
in C2: "=B2-B1"
in C3: "=B3-B2"
...

Jetzt die Nullstellen in zwei Schritten bestimmen:
*Schritt 1*
in D2: =VORZEICHEN(C2)
in D3: =VORZEICHEN(C3)
...
*Schritt 2*
in E2: =WENN(D2<>D3;1;0)
in E3: =WENN(D3<>D4;1;0)


In Spalte E steht jeweils eine 1 bei den Extremstellen (min, max).
Jetzt kannst du mit dem Autofilter nach "1" filtern und siehst die
Zeitpunkte der Extrema. Ebenso kannst du die gefilterten Daten in ein
anderes Blatt kopieren und dir die Differenzen zwischen den Extrema
ausrechnen.

12:10 47,02
12:26 44,1 -2,92
12:36 47,12 3,02


Gruß
Eike
Lesen Sie weiter auf narkive:
Loading...