Как создать случайное число в Excel VBA

Я хотел написать функцию, генерирующую некоторые числа, которые представляют

2 = Белый, 3 = Красный, 4 = Зеленый, 5 = синий, 6 = желтый

Я знаю, что если это равная вероятность, то я могу написать

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

однако я хочу генерировать белую половину времени и делиться другой половиной с оставшимися 4 цветами, как я могу это сделать? (Это означает 50% вероятность белый, 50% вероятности остается 4 цвета.)

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:$B,COUNTIF($D:$D,"<="&RAND())+1)

формула column D просто SUM функция:

=SUM($C:C2)

это должно дать вам результат, который вы ищете, и будет проще в будущем.