Frage von krake82, 62

Excel - Zufallswert wiederholt subtrahieren?

Hi zusammen,

bin etwas am verzweifeln. Hab das halbe Netz abgesucht und keine Lösung gefunden. Glaube ich stell einfach die falsche Frage, deswegen versuch ich es hier mal genauer zu erklären:

Ich habe eine Zelle A mit dem Wert 100 und eine Zelle B mit einem Zufallswert, der sich bei Druck auf die F9-Taste aktualisiert. Ich möchte jetzt gerne den Zufallswert B von Zelle A automatisch abziehen lassen, wenn ich auf F9 klicke. Also 1. Zufallswert = 60, Ergebnis in Zelle A = 40. Wenn ich jetzt abermals F9 drücke, soll der neue Zufallswert wieder von A abgezogen werden: 2. Zufallswert = 30, Ergebnis in Zelle A = 10.

Es wäre auch kein Problem wenn in Zelle A der Wert 100 stehen bleibt und das Ergebnis in einer anderen Zelle C ausgegeben wird.

Hoffe ich hab das halbwegs verständlich erklärt und es hat jemand eine Idee.

Beste Grüße krake

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Ninombre, Community-Experte für Excel, 37

Das funktioniert nur mit einem Makro - über Formeln wird das Ergebnis immer neu berechnet, man kann so keine Zwischenergebnisse fixieren. Gleiches gilt für das Schreiben in andere Zelle: Eine Formel greift immer nur für die Zelle, in der sie steht. Aus der Zelle heraus, kann man nicht in andere Zellen hineinschreiben.

Wenn Du nicht die Ergebnisse des Zufallswertes manuell als feste Werte eintragen willst (also F9, dann das Ergebnis in eine Zelle eintragen. A1=100-Summe dieser Liste), geht wie gesagt nur ein Makro:

Sub zufall()
Range("A1").Value = Range("A1").Value - Int(Rnd() * 10) + 1
End Sub

das rnd()*10)+1 heißt ganze Zahl zwischen 1 und 10, kannst Du ggf. anpassen.

Das Makro kannst Du auch hinter eine Tastenkombination legen und statt F9 immer wieder erneut ausführen. Wenn die Anzahl der Wiederholungen feststeht, kannst Du das natürlich auch direkt in das Makro einbauen: So wären es 10 Wiederholungen

sub zufall2()
for i=1 to 10

Range("A1").Value = Range("A1").Value - Int(Rnd() * 10) + 1

next

End Sub

Kommentar von Iamiam ,

wobei ich das mit relativen Versetzungen samt Anpassung der Zufsallszahl an den verbleibenden Wert ausgestalten würde:

Sub ZufallsVerminderung()

Activecell.offset(0, 1).value = Int(Rnd() * Activecell.value)

Activecell.offset(1, 0).value = Activecell.value -  Activecell.offset(0, 1).value

Activecell.offset(1, 0).activate

end sub

Dieses Makro einem Bild oder einer Autoform zuweisen (zB Textfeld), dann den Cursor auf die Startzahl setzen: Die Stufen werden separat untereinander generiert, ebenso die Zufallszahlen rechts daneben dokumentiert.

Schon vorhandene Einträge aber würden gnadenlos überschrieben.

Kommentar von krake82 ,

Hi Iamiam,

das ist auch eine schicke Lösung. Vielen Dank!

Hier hätte ich auch noch 2 kleine Fragen bis ich am Ziel bin:

Ist es möglich anstatt Activecell eine bestimme Zelle anzugeben (also A1) und trotzdem die Versetzung beizubehalten? Damit ich nicht erst den Cursor setzen muss, sondern es auf Button-Druck direkt an der gewünschten Stelle losgeht?

Und auch hier (wie schon in meiner Antwort an Niombre beschrieben) hätte ich im Endeffekt gerne noch einen zweiten Zufallswert der vom ersten Zufallswert abgezogen und das Ergebnis daraus dann von meiner Zelle A1 abgezogen wird. Hoffe auch hier das ist nicht zuviel verlangt! :)

Besten Dank & Grüße
krake

Kommentar von Iamiam ,

Hi Krake, möglich ist mit etwas Phantasie und ±Aufwand (fast) alles möglich. Nur zieht jede Forderung nach eigener Bequemlichkeit sofort einen Rattenschwanz nach: in diesem Fall zB das automatische Löschen des Feldes vor Beginn einer neuen Aktion.

Deine andere Forderung, einen Zufallswert von einem anderen abzuziehen: dürfen da auch negative Zahlen rauskommen? -ist ja schon beantwortet- Oder ein zweiter Zufallswert nach Maßgabe der Größenordnung des ersten?

im Übrigen: ist Deine Anordnung von aussen vorgegeben? ich halte sie nämlich -grad unter >Berücksichtigung Deiner letzten Anforderung- für etwas unglücklich!

Nur soviel als Hinweise. Da sich Ninombre weiter um diese Angelegenheit kümmert, werde ich das aber nicht selbst weiterverfolgen.

Und vergiss nicht, eine Hilfreichste zu vergeben!

Kommentar von krake82 ,

Hi Ninombre,

vielen Dank für die schnelle und toll erklärte Antwort! Das hilft mir schonmal sehr und löst im Grunde mein eigentliches Problem.

Ist es jetzt noch möglich den Zufallswert in Zelle B anzeigen zu lassen? Das wäre super!

Im 2. Schritt wird es jetzt noch etwas komplizierter, ich hoffe ich darf dich damit nochmal nerven?
Ich habe in Zelle A1 meinen Wert 100. In A2 einen Zufallswert 1 (zwischen 1 und 24). In Zelle A3 soll nun ein Zufallswert 2 (auch zwischen 1 und 24) berechnet werden, der dann von Zufallswert 1 abgezogen wird. Das Ergebnis daraus soll dann schließlich von A1 (also 100) abgezogen werden. Den Subtraktionswert würde ich auch gerne anzeigen lassen. Dann wäre es perfekt!

Wie gesagt, hoffe damit falle ich jetzt nicht zu sehr mit der Tür ins Haus.

Besten Dank & Grüße
krake

Kommentar von Ninombre ,

kein Problem - Du kannst überlegen, ob im Makro nur die Zufallswerte geschrieben werden sollen und das Subtrahieren per Formel läuft oder direkt auch im Makro subtrahiert werden soll.

Sub zufall()

Range("A2").Value = Int(Rnd() * 24) + 1

Range("A3").Value = Int(Rnd() * 24) + 1

Range("B1").Value = Range("A2").Value - Range("A3").Value

Range("A1").Value = Range("A1").Value - Range("B1").Value

End Sub

Kommentar von krake82 ,

Okay super. Fast da! :) Jetzt müsste nur noch unterbunden werden, dass die beiden Zufallswerte eine negative Zahl ergeben. Sonst ergibt sich durch das doppelte Minus ein Plus und Wert A1 kann auch ansteigen. Das sollte nicht sein. :)

Kommentar von Ninombre ,

Da gäbe es zwei Möglichkeiten - entweder ein mögliches negatives Ergebnis in ein positives drehen (quasi Betrag davon bilden) oder die zweite Zufallszahl von 1 bis max. Wert der ersten Zufallszahl eingrenzen.

Sub zufall() 'mit abs = Betrag
Range("A2").Value = Int(Rnd() * 24) + 1
Range("A3").Value = Int(Rnd() * 24) + 1
Range("B1").Value = Abs(Range("A2").Value - Range("A3").Value)
Range("A1").Value = Range("A1").Value - Range("B1").Value
End Sub

Sub zufall() 'maximalwert begrenzen
Range("A2").Value = Int(Rnd() * 24) + 1
Range("A3").Value = Int(Rnd() * Range("A2").Value) + 1
Range("B1").Value = Range("A2").Value - Range("A3").Value
Range("A1").Value = Range("A1").Value - Range("B1").Value
End Sub

Kommentar von krake82 ,

Jetzt ist es perfekt! :) Vielen vielen Dank für deine schnelle und super kompetente Hilfe, Ninombre. Bin ganz begeistert.

Allerbeste Grüße!
krake

Expertenantwort
von Iamiam, Community-Experte für Excel, 33

Es gibt aber auch noch eine (komplizierte) Formelanordnung, weiß nicht, ob ich die heut noch hinkriege.oder sogar noch  finde.

Kommentar von Iamiam ,

hab jetzt zwar den Link gefunden,

www.gutefrage.net/frage/excel-wert-durch-bedingung-unveraenderbar-machen

bin aber heute nicht mehr in der Lage, meine eigenen Ausführungen von damals nachzuvollziehen.

Mal sehen, obs morgen klappt.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten