我正在尝试使用以下公式来创建静态随机数。
Random Number: Format(Int((99999999-11111111+1)*Rnd([Numbers]+11111111)))
然而,它返回一个不同的非静态随机数。
有什么建议?
你可以否定提供给Rnd
函数的数值参数,使Rnd
函数返回给定种子值的相同随机数(也就是说,随机数和种子值之间会有一对一的映射) :
句法
Rnd[(number)]
返回值
如果数字是
- 小于零:每次使用相同的数字,使用数字作为种子。
- 大于零:序列中的下一个随机数。
- 等于零:最近生成的数字。
- 未提供:序列中的下一个随机数。
?rnd(-2)
0.7133257
?rnd(-2)
0.7133257
?rnd(-3)
0.9633257
?rnd(-3)
0.9633257
但是,更好的方法可能是使用静态随机数填充源表中的其他字段,或者构造包含名称和随机数之间映射的单独表。
对于您的特定情况,由于您要生成8位数的随机数,您将使用:
10000000 + Int(90000000 * Rnd(-[Names]))
这将产生10000000
到99999999
范围内的随机数。
您可以使用我文章中的RandomRowNumber函数:
Random Rows in Microsoft Access
' 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
包含一个演示供下载。
代码也可以在GitHub上找到:VBA.RowNumbers