excel - suchmaschinen - snippet generator



Wie erreicht man dies in Excel ohne Zirkelschluss? (2)

Ich möchte eine Excel-Seite erstellen, wo ich zuerst vier Zufallszahlen zwischen den Werten 0-9 habe, die ich nach Belieben aktualisieren kann. Dies ist einfach, indem =RANDBETWEEN(0,9) über vier Zellen (beispielsweise A1-D1) verwendet wird. Jetzt ist der schwierige Teil, den ich will, dass jede dieser Zufallszahlen stoppt, wenn sie einen bestimmten Wert zwischen 0-9 erreicht. Wenn ich also die Formeln ständig aktualisiere, wenn eine der vier Zufallszahlen einen bestimmten Wert erreicht, wird sie damit aufhören Wert und dann keine Zufallszahlen mehr erzeugen.

Wenn ich zum Beispiel A1 auf =RANDBETWEEN(0,9) kann ich diese Zelle weiter =RANDBETWEEN(0,9) , bis sie eine 5 (oder eine andere Zahl von 0-9) wird, und dann stehen bleiben.

Um dies zu erreichen, möchte ich Folgendes sagen:

=IF(A1=5,5,RANDBETWEEN(0,9))

natürlich funktioniert das nicht, da es zirkulär ist. Wie kann ich dies in Excel erreichen?


Answer #1

Eine einfache Möglichkeit ist die Verwendung von VBA-Ereignissen. Das calculate Event wird es für Sie tun. Versuchen Sie Folgendes auf einem Blatt, wo Sie bereits die RANDBETWEEN Formeln haben:

ZB hier:

Option Explicit

Private Sub Worksheet_Calculate()

    Dim myCell  As Range

    For Each myCell In UsedRange
        If myCell.HasFormula And myCell.Value = 5 Then
            myCell.Value = myCell.Value
        End If
    Next myCell

End Sub

Wenn es jedoch eine Formel wie =A1+A2 die auch 5 zurückgibt, wird die Formel ebenfalls in den Wert übersetzt. Um dies zu vermeiden, können RANDBETWEEN in der Formel nach Wörtern wie RANDBETWEEN suchen. Versuchen Sie dazu, dies im Code zu implementieren:

If InStr(1, UCase(myCell.Formula), "RANDBETWEEN") > 0 Then

Answer #2

Im Menü FILE -> OPTIONS -> FORMULA, iterative Berechnungen aktivieren. mit maximalen Iterationen von 1

Verwenden Sie dann die von Ihnen vorgeschlagene Formel:

=IF(A1=5,5,RANDBETWEEN(0,9))

Es wird aufhören, wenn es gleich 5 ist und dort bleiben.

Oder Sie können diese Funktion verwenden, die @ Gary'sStudent ähnlich ist

Function MyRandBetween(Strt As Long, Ed As Long, Sty As Long) As Long
Application.Volatile
If Application.Caller.Value = Sty Then
    MyRandBetween = Sty
    Exit Function
Else
    MyRandBetween = Application.WorksheetFunction.RandBetween(Strt, Ed)
End If

End Function

Dann wäre deine Formel

=MyRandBetween(0,9,5)

Es wird um 5 Uhr aufhören und dort bleiben. Andernfalls wählt es zufällig eine Nummer.





excel-formula