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

使用Excel VBA生成偏向一种颜色的随机颜色,excel,vba,Excel,Vba,我正在尝试使用下面的代码生成随机颜色(2,6);然而,我的最终目标是生成比其他颜色更多的白色(2)。如果有人能帮忙,我将不胜感激。多谢各位 GenerateColor = Int(Rnd() * 5) + 2 将随机化逻辑和强制更频繁地创建给定颜色的逻辑分开可能是个好主意。例如,这一个很好,每个数字的机会均等: randomColor = CLng(rnd() * 5) + 2 但是,一旦获得randomColor,就可以根据某个百分比对其进行更改,该百分比在函数中命名为priorityPe

我正在尝试使用下面的代码生成随机颜色(2,6);然而,我的最终目标是生成比其他颜色更多的白色(2)。如果有人能帮忙,我将不胜感激。多谢各位

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

将随机化逻辑和强制更频繁地创建给定颜色的逻辑分开可能是个好主意。例如,这一个很好,每个数字的机会均等:

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
公共子TestMe()
昏暗的柜台一样长
淡色如长
附工作表(1)
.细胞,清除
对于计数器=1到1000000
randomColor=CLng(rnd()*5)+2
.单元格(计数器,1)=生成颜色(随机颜色,2,(0.4-0.4*1/6))
下一个
.Cells(1,2)。公式=“=COUNTIF(A:A,2)”
以
端接头
公共功能GenerateColor(任意颜色,只要_
只要是第一颜色_
优先权(包括双倍)与长度相同

如果rnd()使用randowmizer的判定“抛出”来判定白色,例如,
If((Int(rnd())Mod 3)0),则color=white
给出30%的白色概率。@PaulOgilvie-使用此示例,白色的概率正好是
0.46
。这是
0.3+1/6
。这是因为在其他情况下,白色仍有1/6的几率。
Int(Rnd()*5)+2
给出了
[2,3,4,5,6,7]
之间的随机值。这取决于您希望每种颜色出现的频率。您可以创建一个颜色整数数组,并按比例填充该数组。然后从数组大小中选择一个随机数,将其四舍五入为整数,然后从数组中取出该值。@Viyata
Int(Rnd()*5)+2
这不是给出了一个介于2和6之间的随机数吗?因为Rnd()函数返回[0,1]。这反过来又使总共有5次机会。