Clever-Excel-Forum

Normale Version: Kalkulieren mit Höchstwert aus Zelle
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Grüß Gott zusammen,

Seit einiger Zeit versuche ich mal wieder eine neue Problemstellung zu lösen.
Allerdings ist das eine (für mich) ziemlich Harte Nuss und ich hoffe auf Unterstützung eurerseits.

Ich hoffe auch, ich bekomme es einigermaßen verständlich erläutert.
 
In einigen Zellen (8Stück) werden durch eine Abfrage Werte (Zahlen) hinterlegt. Diese Werte in den Zellen ändern sich ständig (alle 3min mal groß mal klein) überwiegend aber ansteigend.
Das Problem ist nun das jedes mal wenn der neue Wert kleiner ist als der vorherige die Summe wieder von vorne anfängt. 

Hier ein Beispiel:
In Zelle A1 ändert sich der Wert, -aktueller Höchstwert 50-  -nächster Wert 0- -neuer Höchstwert 60- > nun müsste die Gesamtsumme 110 sein allerdings bleibt der Höchstwert 60 bestehen.

Aktuell halte ich per VBA-Code in Zelle B1 den bisher höchsten Wert aus Zelle A1 fest. Das funktioniert aber nur solange der vorherige Höchstwert nicht überschritten wird. 
Code:
Option Explicit

Private Sub Worksheet_Calculate()
    If Range("A1").Value > Range("B1").Value Then
        Range("B1").Value = Range("A1").Value
    End If
   
End Sub
(in A2 steht =A1)

Über diese Lösung bekomme ich in Verbindung der Formel  =WENN(IDENTISCH(A2;B1);B1;B1+A2) den Höchstwert abgefangen aber nur solange bis ein neuer Höchstwert in B1 vorkommt.

Aber ich bekomme es nicht hin die nächsten folgenden Höchstwerte zu Summieren.

Ich weiß nicht ob ich es soweit verständlich erklären könnte, vielleicht hat jemand einen Lösungsansatz für mich.

Danke schön
Grüß Gott
Tyler
Du könntest es mit einer Variante von
https://berndplumhoff.gitbook.io/sulprob...watermarks
versuchen.
Aber ich rate von jedem Ansatz ab, der nicht wieder-anlauffähig ist.
Warum sammelst Du nicht alle Daten inkl. Zeitstempel in einer Hilfstabelle?
Diese kannst Du dann immer wieder einfach durchrechnen.
Code:
Private Sub Worksheet_Calculate()
Dim Wert As Long

    If Range("A1").Value > Range("B1").Value Then

        Wert = Range("B1").Value
        Range("B1").Value = Range("A1").Value + Wert
    End If
 
End Sub

den Wert aus Zelle B1 an eine Variable übergeben!
Hallo Sulprobil,

Danke für deinen Hinweis, der Code hinter dem Link ist sehr komplex.
Der Teil "der nicht wieder-anlauffähig ist" ist für mich nicht identifizierbar.

Gruß
Tyler
Hallo Fuzzy62,

danke für deinen Code.
Leider ergibt der Code nicht das Gewünschte Ergebnis.

Es ist leider etwas verzwickt... 22
Hier ein weiteres Beispiel...
Die Zahlen in Zelle A1 ändern sich ständig wie folgt... 
                                                                 z.B.     5 danach >15 danach >0 danach >10 danach >20 danach >35 danach >12 danach >20    usw....
- Meine Formel Ergibt zum Schluss > 35 (einfach nur der höchste Wert alleine in der Zahlen Reihenfolge) (zusammen mit der WENN(IDENTISCH Formel komme ich auf 55)
- Deine Formel Ergibt zum Schluss > 55 (hier werden folgende Zahlen berechnet 5+15+35)
- Das Ergebnis muss aber > 70 sein  (15+35+20 = immer der nächst höchste Wert bevor ein niedriger Wert eintrifft   +dann dem letzten wert)  

Aber trotzdem danke für dein Input.

Gruß
Tyler
Grüß Gott nochmal,

ich habe nochmal ein Bild zur Veranschaulichung eingestellt.
Zeile 3 sollen die Zahlenreihenfolge sein die sich in Zelle A1 ständig ändert.
Und in Zeile 2 ist dargestellt wie die Reihenfolge gezählt werden soll.

Vielleicht hilft das.
Danke

Grützi
Tyler
(03.06.2021, 13:00)Tyler schrieb: [ -> ]Hallo Sulprobil,

Danke für deinen Hinweis, der Code hinter dem Link ist sehr komplex.
Der Teil "der nicht wieder-anlauffähig ist" ist für mich nicht identifizierbar.

Gruß
Tyler

Es gibt mehrere Stufen von Programmqualität.

Soll es (k)einen Unterschied machen, ob Du Dein Programm morgens um 7 Uhr oder mittags um 13 Uhr startest? Was ist, wenn es um 14 Uhr abbricht, und Du es neu starten musst?

Wenn Du einem Revisor beweisen musst, dass es richtig rechnet? Kannst Du es dann mit allen Eingabedaten nachweisen?
(03.06.2021, 19:31)Sulprobil schrieb: [ -> ]Es gibt mehrere Stufen von Programmqualität.

Soll es (k)einen Unterschied machen, ob Du Dein Programm morgens um 7 Uhr oder mittags um 13 Uhr startest? Was ist, wenn es um 14 Uhr abbricht, und Du es neu starten musst?

Wenn Du einem Revisor beweisen musst, dass es richtig rechnet? Kannst Du es dann mit allen Eingabedaten nachweisen?

Eine hohe Programmqualität ist nicht meine Erwartung.
Es wird einmal am Tag gestartet, ein Nachweis passiert an anderer Stelle.

Leider kann ich den Code aus deinem Link nicht richtig nachvollziehen.
Wie ich das entnehmen kann wird der höchste und der niedrigste Wert festgehalten, aber wie ich daraus die Rechnung fortsetze um wie in der Beispiel Zahlenfolge zum Schluss auf 70 zukommen erschließt sich mir leider nicht.

Trotzdem Danke
Hallöchen,

was sonst in Deiner Datei passiert kann ich nicht nachvollziehen. Wenn es aber darum geht, in B1 immer den "letzten" Höchstwert solange parat zu haben, bis ein niedrigerer Wert kommt, dann setze den Wert in B1 wieder zurück und den letzten Höchstwert nimmst Du dabei in eine weitere Zelle. Das kannst Du z.B. so

Code:
Private Sub Worksheet_Calculate()
    If Range("A1").Value > Range("B1").Value Then
        Range("B1").Value = Range("A1").Value
    elseif Range("A1").Value < Range("B1").Value Then
        Range("C1").Value = Range("B1").Value
        Range("B1").Value = 0
    End If
End Sub

Eventuell nimmst Du im If - Teil die Übernahme vom Wert nach C1 auch noch mit rein oder Du setzt es statt im ElseIf an den Anfang.
(05.06.2021, 05:19)schauan schrieb: [ -> ]Hallöchen,

was sonst in Deiner Datei passiert kann ich nicht nachvollziehen. Wenn es aber darum geht, in B1 immer den "letzten" Höchstwert solange parat zu haben, bis ein niedrigerer Wert kommt, dann setze den Wert in B1 wieder zurück und den letzten Höchstwert nimmst Du dabei in eine weitere Zelle. Das kannst Du z.B. so

Code:
Private Sub Worksheet_Calculate()
    If Range("A1").Value > Range("B1").Value Then
        Range("B1").Value = Range("A1").Value
    elseif Range("A1").Value < Range("B1").Value Then
        Range("C1").Value = Range("B1").Value
        Range("B1").Value = 0
    End If
End Sub

Eventuell nimmst Du im If - Teil die Übernahme vom Wert nach C1 auch noch mit rein oder Du setzt es statt im ElseIf an den Anfang.

Danke,

Das könnte mir helfen. 
Ich werde weiter daran Arbeiten und schauen ob ich eine Lösung finde.

Grützi
Tyler