使用Excel VBA生成偏向一种颜色的随机颜色

时间:2019-03-20 17:31:58

标签: excel vba

我正在尝试使用以下代码生成随机颜色(2,6);但是,我的最终目标是要比其他颜色多产生白色(2)。如果有人可以帮助,将不胜感激。谢谢。

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

1 个答案:

答案 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的时间。