I know I can solve it by using a separate cell and make it invisible but I'd like a clean solution for this and use only 1 cell and 1 formula.
For this example I need to get a random number between X.00 and Y.00 (with decimals), not lower than 0.00 and not superior than 9.00. But for this example I am using only 1 condition for avoiding values less than 0.00 to simplify.
I will use RANDBETWEEN(). The X and Y are supplied by 2 other cells on the dummy file bellow: B3 and D3.
The reason why sometimes the random number can be less than 0.00 or above 9.00 is that I need the random result to be between random /- 1 than (X Y)/2.
Also X and Y values will vary. Sometimes X will be 3.54, sometimes 8.99 and same for Y. For situations when it happens that X and Y are a low number like 0.5 the RANDBETWEEN() function might output a negative number. When so I need the output to be 0.00. Same for high values. If both X and Y will be close to 9.00 the result might be something like 9.35. In this cases I´d need the output to be 9.000. But in the below formula I am only using cases below zero to make it simple.
So the problem I am unable to resolve is that I need to get the value of the fist argument of the ÌF() condition without recalculating it. If I refer to the 3rd argument for FALSE then I will recalculate. my formula is this:
=IF(
(RANDBETWEEN(
((((B3*100) (D3*100))/2)-100),
((((B3*100) (D3*100))/2) 100))
/100)<0,0,
(RANDBETWEEN(
((((B3*100) (D3*100))/2)-100),
((((B3*100) (D3*100))/2) 100))
/100))
So this will check if the first argument is less than 0.00, if it is it displays 0.00 if not it recalculates again and this is a problem because it might sometimes recalculate a value less than 0.00.
My question is: Is there a way to return the value of the first argument of the condition without recalculation of RANDBETWEEN() and without using a separate cell?
If not possible I would also welcome any solution using custom GAS functions.
My dummy file:
https://docs.google.com/spreadsheets/d/15YtgUVqDTuC-raMNJiN-YG4j3URaorXdPiwTy_Kb_K0/edit
(click checkbox to reset and again to recalculate the random number).
CodePudding user response:
Wrap your RANDBETWEEN within a MIN - MAX
=MAX(
MIN(
RANDBETWEEN(((((D3*100) (B3*100))/2)-100),((((D3*100) (B3*100))/2) 100))/100,
9
),
0
)*A1

