Excel VBA 基于日期的种子

Excel VBA Seed based on the date

我正在开发一个使用种子的程序。这个种子应该基于日期,所以每一天我都会得到一个新值。一天多次使用种子应该不会改变返回值。

这是我的种子的样子:

随机化

todayValue = Int(50 * Rnd)

现在,我如何根据日期制作种子? 是否有另一种方法可以根据日期获得种子?

非常感谢!

参见this post on getting seeded random values in VBA

您需要做的就是在 运行 您的代码之前使用负值调用 Rnd 函数。为此,您可以使用 Date 函数。在 VBA 中,日期值只是 Longs,表示自过去某个设定日期以来的天数。

这里有一个示例,说明您可以如何做您想做的事。

Sub rndSeedTest()
    MsgBox Date & " --> " & CLng(Date)
    Rnd -Date
    MsgBox Rnd & _
        vbNewLine & Rnd & _
        vbNewLine & Rnd & _
        vbNewLine & Rnd & _
        vbNewLine & Rnd
End Sub

如果你想在每次函数运行时得到相同的数字,那么这不是随机数,你必须创建一些看起来随机的东西,例如

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

我找到了一种方法,我只是将日期和日期保存在 sheet 的某个单元格中。这是我的代码的样子:

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