Генерация случайных цветов со смещением к одному цвету с помощью Excel VBA - PullRequest
2 голосов
/ 20 марта 2019

Я пытаюсь сгенерировать случайные цвета (2,6), используя следующий код ниже; однако моя конечная цель - создать белый цвет (2) больше, чем остальные цвета. Был бы признателен, если кто-то может помочь. Спасибо.

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

1 Ответ

1 голос
/ 20 марта 2019

Вероятно, хорошей идеей будет разделить логику рандомизации и логику, которая заставляет данный цвет чаще создаваться.Например, это работает вполне нормально, предоставляя равные шансы каждому числу:

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

Этот пример выполняется 1 миллион раз и записывает в B2 счетчик 2.Причина для передачи 0.4 - 0.4 * 1.6 в параметре состоит в том, чтобы убедиться, что вероятность для 2 составляет ровно 40%.У нас есть 1/6 для каждого из возможных 6 чисел - [2,3,4,5,6,7].Таким образом, времена, когда мы не входим в If rnd() <= priorityPercentage, также принимаются во внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...