You can use a self referencing UDF, something like this would work:
Function RandInArray(MyString As String, ByRef Target As Range)
Dim MyArr As Variant
If Target.Text = 0 Then
MyArr = Split(MyString, ",")
RandInArray = MyArr(Application.WorksheetFunction.RandBetween(LBound(MyArr), UBound(MyArr)))
Else
RandInArray = Target.Value
End If
End Function
In B1 I have the formula: =RandInArray("Day,Night,Mixed",B1) Note its self reference to B1
Basically the formula says if you already have a value then don't refresh it but if you don't have a value then pick one randomly from the list passed in.
If you hit F2 (edit cell) and press enter you will force it to recalculate and get a new (or the same as is the rule of the randbetween) value, if you press F9 (recalculate) it will not change.