我正在尝试使用以下代码生成随机颜色(2,6);但是,我的最终目标是要比其他颜色多产生白色(2)。如果有人可以帮助,将不胜感激。谢谢。
GenerateColor = Int(Rnd() * 5) + 2
答案 0 :(得分:1)
将随机化逻辑与逻辑分开是个好主意,该逻辑会强制更频繁地创建给定的颜色。例如,此功能可以正常运行,为每个数字赋予均等的机会:
randomColor = CLng(rnd() * 5) + 2
但是,一旦获得randomColor,就可以根据某个百分比对其进行更改,该百分比在函数中名为priorityPercentage
:
Public Sub TestMe()
Dim counter As Long
Dim randomColor As Long
With Worksheets(1)
.Cells.Clear
For counter = 1 To 1000000
randomColor = CLng(rnd() * 5) + 2
.Cells(counter, 1) = GenerateColor(randomColor, 2, (0.4 - 0.4 * 1 / 6))
Next
.Cells(1, 2).Formula = "=COUNTIF(A:A,2)"
End With
End Sub
Public Function GenerateColor(randomColor As Long, _
priorityColor As Long, _
priorityPercentage As Double) As Long
If rnd() <= priorityPercentage Then
GenerateColor = priorityColor
Exit Function
End If
GenerateColor = CLng(rnd() * 5) + 2
End Function
此示例运行100万次,并在B2
中写入2
的计数。在参数中传递0.4 - 0.4 * 1.6
的原因是为了确保2
的机会恰好是40%。对于可能的6个数字,我们每个都有1/6-[2,3,4,5,6,7]
。因此,也考虑了我们不输入If rnd() <= priorityPercentage
的时间。