我想写一个函数生成一些代表
的数字2 =白色, 3 =红色, 4 =绿色, 5 =蓝色, 6 =黄色
我知道如果概率相等,那么我可以写
GenerateColor = Int(Rnd()* 5)+ 2
但是,我希望产生白色的一半时间并与剩下的4种颜色共享另一半,我该怎么办? (这意味着50%的概率是白色,50%的概率是4种颜色。)
答案 0 :(得分:7)
尝试一下:
Sub RanGen()
With Application.WorksheetFunction
x = .RandBetween(1, 2)
If x = 2 Then
MsgBox x
Else
x = .RandBetween(3, 6)
MsgBox x
End If
End With
End Sub
答案 1 :(得分:5)
在工作表公式中,这类似于
=choose(randbetween(1, 2), "white", choose(randbetween(1, 4), "red", "green", "blue", "yellow"))
您可以使用本机VBA函数在VBA中对其进行编码,或者只是在多个位置添加worksheetfunction
。
答案 2 :(得分:4)
您也可以在没有VBA的情况下执行此操作:
=IF(RAND()<0.5,2,FLOOR(RAND()*4,1)+3)
这使得50%的机会返回2,而另外50%的机会均匀分布在3和6之间。
答案 3 :(得分:2)
您还可以使用具有累积值的辅助列,如下所示:
您用于结果的公式是:
=INDEX($B$2:$B$6,COUNTIF($D$2:$D$6,"<="&RAND())+1)
column D
中的公式只是一个简单的SUM
函数:
=SUM($C$2:C2)
这也应该为您提供您正在寻找的结果,并且将来更容易更改。