Excel VBA Seed на основе даты

Я работаю над программой, в которой использую семя. Это начальное число должно быть основано на дате, поэтому каждый день я получаю новое значение. Использование семян несколько раз в день не должно изменить возвращаемую ценность.

Вот как выглядит мое семя:

Рандомизировать

todayValue = Int (50 * Rnd)

Теперь, как мне основать семя на дате? Может быть, есть другой способ получить посевной материал на основе даты?

Большое тебе спасибо!


person J.schmidt    schedule 09.11.2018    source источник
comment
Можете ли вы пока написать свой код? чтобы мы могли помочь вам лучше ...   -  person Ferdinando    schedule 09.11.2018


Ответы (3)


См. этот пост о получении засеянных случайных значений в VBA.

Все, что вам нужно сделать, это вызвать функцию Rnd с отрицательным значением перед запуском вашего кода. Для этого вы можете использовать функцию Date. В VBA значения даты - это просто длинные числа, представляющие количество дней, прошедших с некоторой установленной даты в прошлом.

Вот пример того, как вы могли бы делать то, что хотите.

Sub rndSeedTest()
    MsgBox Date & " --> " & CLng(Date)
    Rnd -Date
    MsgBox Rnd & _
        vbNewLine & Rnd & _
        vbNewLine & Rnd & _
        vbNewLine & Rnd & _
        vbNewLine & Rnd
End Sub
person Josh Eller    schedule 09.11.2018

Если вы хотите получать одно и то же число при каждом запуске функции, тогда это не случайное число, вам нужно создать что-то, что выглядит случайным, например

Sub test()
    Dim todayValue As Long
    todayValue = Date
    todayValue = todayValue + 1538 ' To make it a little random
    MsgBox todayValue
End Sub
person usmanhaq    schedule 09.11.2018

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

If MainSheet.Cells(1, 1) = Date Then   
    todayValue = MainSheet.Cells(1, 2)
Else    
    Randomize
    todayValue =  Int(50 * Rnd)
    MainSheet.Cells(1,1) = Date    'saves the date in Sheet
    MainSheet.Cells(1,2) = todayValue    'saves todayValue in Sheet
End If
person J.schmidt    schedule 27.11.2018