如何在Excel VBA中生成一个随机数字

我想写一个函数生成一些代表的数字

2 =白色,3 =红色,4 =绿色,5 =蓝色,6 =黄色

我知道,如果它是相等的概率,那么我可以写

GenerateColor = Int(Rnd()* 5)+ 2

但是,我想生成白色的一半时间,并与剩下的四种颜色共享另一半,我该怎么办? (这意味着50%的概率是白色的,50%的概率是剩余的4种颜色)。

你也可以不用VBA来做到这一点:

 =IF(RAND()<0.5,2,FLOOR(RAND()*4,1)+3) 

这给了50%的机会返回2,另外50%是平均分配在3和6之间。

试试这个:

 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 

在工作表公式中,

 =choose(randbetween(1, 2), "white", choose(randbetween(1, 4), "red", "green", "blue", "yellow")) 

您可以使用本机VBA函数在VBA中编写代码,或者在几个地方添加worksheetfunction函数。

您也可以使用像这样的累积值的助手列:

您用于结果的公式是:

 =INDEX($B$2:$B$6,COUNTIF($D$2:$D$6,"<="&RAND())+1) 

column D的公式只是一个简单的SUM函数:

=SUM($C$2:C2)

这也应该给你你正在寻找的结果,并将在未来更容易改变。