semper
Goto Top

Excel Zufallsbereich ohne ständige neu Berechnung bei einer Änderung

Hallo Leute,

Ich stehe vor einem kleinen\großen Problem.

Was ich machen möchte:

Ich trage in Zelle A1 etwas ein und brauche in Zelle B1 eine Zufallszahl die sich nicht mehr ändern soll. Außer wenn ich in A1 einen neuen Wert reinschreibe, dann darf sich auch die Zufallszahl in B1 neu generiert werden.

Und das natürlich nicht nur bei A1 sondern fortlaufend von A1:A1000 bzw. B1:B1000

Laienhaft ausgedruckt B1: =WENN(A1<>"";Zufallsbereich(25;55);"") <--- und die generierte Zufallszahl in B1 darf sich nicht ändern sollange der Wert in A1 gleich bleibt.

Was derzeit passiert:
In der ersten zeile passt alles aber sobald ich bei A2 etwas Eintrage oder im rest des Arbteisblattes etwas ändere, ändern sich alle Zahlen in den Zellen mit den Zufallsbereichen (B1:B1000)

Was ich schon Probiert habe.

1. Ich mache in Spalte B eine Datenüberprüfung mit "Liste" und als Quelle gebe ich eine Zelle an wo die Formel mit dem Zufallsbereich steht.
Problem: Würde zwar funktionieren aber ich muss immer das Drop-down menü aufmachen um die zufallszahl anklicken damit Sie in der Zelle ist. Und Wenn ich Spalte A lösche um neue Werte nacheinander einzutragen stehen die alten zufallszahlen da und werden nicht neu berechnet.

2. Die Berechnung der Formeln auf Manuell zu stellen geht nicht da sehr viele andere Formeln im kompletten Dokument sind und dann müsste ich jede einzelene Formel mit F9 Manuell starten.

Ich suche schon seit tagen in Foren nach einer lösung aber leider ohne erfolg. Vielleicht kennt Ihr eine möglichkeit wie ich das lösen könnte.

Danke

Content-ID: 572331

Url: https://administrator.de/forum/excel-zufallsbereich-ohne-staendige-neu-berechnung-bei-einer-aenderung-572331.html

Ausgedruckt am: 24.12.2024 um 16:12 Uhr

144260
Lösung 144260 16.05.2020 aktualisiert um 11:44:17 Uhr
Goto Top
ALT-F11 drücken und im Sheet-Code-Abschnitt einfügen, feddisch:
Private Sub Worksheet_Change(ByVal Target As Range)
    Set rngIntersect = Application.Intersect(Range("A1:A1000"), Target)  
    If Not rngIntersect Is Nothing Then
        For Each cell In rngIntersect
            cell.Offset(0, 1).Value = IIf(cell.Value <> "", Int((55 - 25 + 1) * Rnd + 25), "")  
        Next
    End If
End Sub
semper
semper 16.05.2020 um 11:55:16 Uhr
Goto Top
Vielen Dank hat prima gekappt face-smile
semper
semper 16.05.2020 um 13:35:35 Uhr
Goto Top
Der Code funktioniert super. eine Frage hätte ich aber noch.

Der Code funktioniert nur wenn man manuell den Wert in der Zelle ändert. Gibt es auch eine möglichkeit wenn eine Formel drinnen steht. zb: A1 =C1+D1 und wenn sich das ergebnis ändert soll eine neue Zufallszahl in B1 generiert werden?

Denn anscheinend erkennt er Formeln als <>"" an un berechnet keine neue Zahl wenn die Formel ein neues Ergebnis ausgbit.

Danke
144260
144260 16.05.2020 aktualisiert um 14:05:02 Uhr
Goto Top
Zitat von @semper:


Denn anscheinend erkennt er Formeln als <>"" an un berechnet keine neue Zahl wenn die Formel ein neues Ergebnis ausgbit.

Nöp, Formeln ändern das Ergebnis dieser aber nicht den Inhalt der Zelle denn die Formel bleibt ja gleich, deswegen feuert das Event hier nicht...
https://superuser.com/questions/1298289/excels-worksheet-change-event-no ...
semper
semper 16.05.2020 um 14:21:56 Uhr
Goto Top
Ok habe ich mir schon gedacht. Ich habe versucht deinen Code mit den 2 Methoden wie im Link beschrieben umzuschreiben mit denen es angeblich gehen soll aber da bekomme ich nur fehlermeldungen. Kenne mich leider überhauptnicht mit VBA und Makros aus.
144260
144260 16.05.2020 aktualisiert um 14:26:02 Uhr
Goto Top
Du musst dann halt von jeder Zelle in Spalte A den alten Wert in einen Backup Bereich schreiben und dann im Calculate Event alle Zellen mit dem Backupbereich vergleichen.
Kenne mich leider überhauptnicht mit VBA und Makros aus.
Dann lerne es 😉
semper
semper 16.05.2020 um 14:28:16 Uhr
Goto Top
Ok Danke ich wede es versuchen face-smile