Niedrigsten Wert merken bei Preisüberwachung
#1
Hallo liebes Forum,

ich habe die letzten Tage angefangen etwas intensiver mit Excel zu arbeiten und möchte folgendes erreichen:

Ich bekomme Live-Preise in Excel, die sich automatisch aktualisieren. Der Preis steht in A1. Nun möchte ich, dass wenn sich der Preis verringert, dieser geringere Preis in B1 eingetragen wird. Wenn A1 sich erhöht, dann bleibt der Preis in B1 gleich.

In B1 soll also immer der niedrigste Preis sein, der jemals in A1 stand. Ein Ansatz, den ich habe lautet:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target = Range("A1") Then
       If Range("A1") < Range("B1") Then
           Range("B1") = Range("A1")
       End If
   End If
   
End Sub

Diesen Code habe ich in den VBA-Editor vom Worksheet in dem die Zellen sind (Tabelle 1) eingetragen. Hier kommt "Laufzeitfehler 13, Typen unverträglich" als Fehlermeldung.


Die Erweiterung, die ich außerdem gerne hätte, wäre eine Liste in der Preise live aktualisiert werden (z.B. A1:A10) und jeweils daneben (z.B. B1:B10) der niedrigste jemals gesehene Preis dokumentiert wird.

Dafür weiß ich nicht, ob es mit folgendem Ansatz geht:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target = Range("A1:A10") Then
       If Range("A1:A10") < Range("B1:B10") Then
           Range("B1:B10") = Range("A1:A10")
       End If
   End If
   
End Sub

Das ist das erste Mal, dass ich mit VBA arbeite. Daher kann es sein, dass diese Probleme möglicherweise trivial erscheinen.

Ich würde mich freuen falls jemand eine Idee hat, warum im ersten Code eine Fehlermeldung kommt und, ob die Anwendung des Codes auf einen größeren Bereich nach dem Schema wie im 2. Code funktionieren könnte.

Falls jemand einen anderen Ansatz für dieses Problem hat, würde mich das auch freuen zu hören (oder gar eine Lösung ohne VBA).

Gruß,

Alex
Top
#2
Hi Alex,

Bei mir (Excel 365 und Excel 2003) funktioniert dein erster Code.

Für den Zweiten Code schlage ich vor:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

   If Target.Column = 1 Then                           ' Änderung in Spalte 1?
       If Target.Row < 11 Then                         ' Änderung in Zeile 1-10?
           If Target.Value < Target.Offset(0, 1) Then  ' Nachbarzelle der geänderten Zelle!
               Target.Offset(0, 1) = Target.Value
           End If
       End If
   End If

End Sub
Die ersten "If-Abfragen" kann man noch kürzen, soll dir hier beim Einstieg aber ersteinmal reichen.

Viel Erfolg.

HG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
[-] Folgende(r) 1 Nutzer sagt Danke an LuckyJoe für diesen Beitrag:
  • Insenboy
Top
#3
Hallo,

Falls Du noch mehr Infos festhalten magst:
http://www.sulprobil.com/Get_it_done/IT/...marks.html

Viele Grüße,
Bernd P
[-] Folgende(r) 1 Nutzer sagt Danke an Sulprobil für diesen Beitrag:
  • Insenboy
Top
#4
Vielen Dank erstmal für Eure schnellen Rückmeldungen! Ich habe übrigens Excel 2010.

Ich habe jetzt bei dem Code keine Fehlermeldungen mehr, jedoch wird die Veränderung beim Preis anscheinend nicht als Change-Event erkannt. Wenn ich manuell den Preis in A1 verringere, dann nimmt auch B1 den niedrigeren Wert an.
Bei automatischer Veränderung durch die Einspeisung der Live-Preise verändert sich der Wert in B1 aber nicht, wenn sich A1 verringert. Kann es sein, dass ein anderes Event benötigt wird? Ich habe beim Recherchieren mal was von "Calculate" gelesen...?

Danke LuckyJoe, deine Lösung für eine Liste funktioniert ebenso wie ein Einzelpreis, wenn ich manuell einen niedrigere Zahl eingebe. Bei automatischer Aktualisierung durch die Preiseinspeisung funktioniert das ganze auch nicht.

Ich würde mich freuen, falls jemand noch Ideen oder Anregungen hat, was mögliche Fehlerquellen bei mir sein können, oder ob ich grundsätzlich irgendwas anders machen müsste.

Viele Grüße

Alex
Top
#5
Hallo Alex,

probiere es aus, allerdings hast du bei Worksheet_Calculate() kein "Target", so dass du den Code z.B. in einer Schleife überprüfen lassen musst. Oder du schreibst das ganz um zu einer Funktion, oder du baust einen Timer ein, der den Code regelmäßig neu berechnen läßt. Dazu fehlt mir der Mechanismus zu "automatischer Aktualisierung": wie wird der denn ausgelöst?
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
[-] Folgende(r) 1 Nutzer sagt Danke an LuckyJoe für diesen Beitrag:
  • Insenboy
Top
#6
Hallo Lucky Joe,

danke für deine Rückmeldung. Ich habe ein Add-In installiert, das die Preise in Excel ständig aktualisiert, wenn Veränderungen am Markt auftreten. In der Zelle, in der der Preis steht, ist auch nur die Zahl und kein Code hinterlegt.

Genauere Mechanismen weiß ich leider nicht.

Viele Grüße

Alex
Top
#7
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.address= "$A$1" Then
       application.enableevents=false
       If target.value < target.offset(,1).Value Then target.offset(,1) = Target.value
       application.enableevents=true
   End If
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Insenboy
Top
#8
Mein Fehler: Ich hatte mir den Original-Preis aus Tabelle2 per SVERWEIS gezogen, um in Tabelle1 meine Bearbeitung zu machen. Die Change-Formel habe ich dann auf den Wert in Tabelle1 angewendet. Das hat anscheinend nicht funktioniert (ich schätze, weil der Wert in Tabelle1 dann per Kalkulation verändert wurde?).

Jetzt habe ich die Formel von Lucky Joe direkt auf die Original-Preise in Tabelle2 angewendet und hier funktioniert es auch, dass das Event erkannt wird. Ich gehe davon aus, dass das Change-Event grundsätzlich nicht funktioniert, wenn man die Rohdaten in Tabelle2 hat und sich die Daten in Tabelle1 rüberzieht? Ich kann aber mein Blatt so anpassen, dass ich mit den direkten Preisen arbeite, es wäre komfortabler, wenn ich sie rüberziehen könnt.

Den Vorschlag von snb schaue ich mir auch gleich nochmal an.

Vielen Dank für deine Hilfe Lucky Joe!

Viele Grüße

Alex
Top
#9
Mhh, jetzt habe ich immer noch das Problem, dass manchmal "Laufzeitfehler 13, Typen unverträglich" kommt. Eine Zeit lang hat alles so funktioniert wie ich mir das vorgestellt habe, aber dann ging es plötzlich nicht mehr.

Ich wüsste nicht, dass ich irgendwas verändert hätte.

Mein Code (an Lucky Joe angelehnt):
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Column = 6 Then
       If Target.Row < 54 Then
           If Target.Value < Target.Offset(0, 1) Then
               Target.Offset(0, 1) = Target.Value
           End If
       End If
   End If   
End Sub

Die 4. Zeile wird gelb markiert und die Fehlermeldung kommt...

Über Ideen zu einer Problemlösung würde ich mich freuen :)

Viele Grüße

Alex
Top
#10
Ich würde  mich freuen wenn du die gegebene Vorschläge betrachtest.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste