MS-Access中的静态随机数
我使用以下公式试图创建一个静态随机数MS-Access中的静态随机数,ms-access,vba,Ms Access,Vba,我使用以下公式试图创建一个静态随机数 Random Number: Format(Int((99999999-11111111+1)*Rnd([Numbers]+11111111))) 然而,它返回一个不同的非静态随机数 Random Number: Format(Int((99999999-11111111+1)*Rnd([Numbers]+11111111))) 有什么建议吗?您可以否定提供给函数的数值参数,使函数返回给定种子值的相同随机数(即,随机数和种子值之间存在一对一的映射): 语
Random Number: Format(Int((99999999-11111111+1)*Rnd([Numbers]+11111111)))
然而,它返回一个不同的非静态随机数
Random Number: Format(Int((99999999-11111111+1)*Rnd([Numbers]+11111111)))
有什么建议吗?您可以否定提供给函数的数值参数,使函数返回给定种子值的相同随机数(即,随机数和种子值之间存在一对一的映射): 语法
Rnd[(编号)]
返回值
如果号码是
- 小于零:每次使用相同的数字作为种子。
- 大于零:序列中的下一个随机数
- 等于零:最近生成的数字
- 未提供:序列中的下一个随机数
10000000 + Int(90000000 * Rnd(-[Names]))
这将产生一个介于
10000000
到9999999
之间的随机数。您可以使用我文章中的函数RandomRowNumber:
包括一个演示供下载
代码也可以在GitHub上找到。:“我按照您的建议尝试了Rnd[(数字)],但它不起作用。”您使用了什么代码,收到了什么错误?按照建议,您应该对提供给
Rnd
函数的数值参数求反,以使给定种子返回相同的随机数。因此,您的代码将变成如下内容:Rnd([Names])
(假设[Names]
是数字数据)。@RebaCat这是因为-[Names]+11111111
可能会产生一个正数(取决于Names
字段的大小),因此,您不再向Rnd
函数传递负数。我已经更新了上面的答案来帮助你。非常欢迎你!如果我的答案充分回答了您的问题,请将答案标记为解决方案(如果您觉得合适,也请进行投票),以便其他浏览该网站的人可以看到该问题已解决。如果不确定如何执行此操作,请参阅。谢谢
' Builds random row numbers in a select, append, or create query
' with the option of a initial automatic reset.
'
' 2018-09-11. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function RandomRowNumber( _
ByVal Key As String, _
Optional Reset As Boolean) _
As Single
' Error codes.
' This key is already associated with an element of this collection.
Const KeyIsInUse As Long = 457
Static Keys As New Collection
On Error GoTo Err_RandomRowNumber
If Reset = True Then
Set Keys = Nothing
Else
Keys.Add Rnd(-Timer * Keys.Count), Key
End If
RandomRowNumber = Keys(Key)
Exit_RandomRowNumber:
Exit Function
Err_RandomRowNumber:
Select Case Err
Case KeyIsInUse
' Key is present.
Resume Next
Case Else
' Some other error.
Resume Exit_RandomRowNumber
End Select
End Function