Excel 如何为相同的值获取相同的随机数

Excel 如何为相同的值获取相同的随机数,excel,vba,Excel,Vba,我有一列ID是机密的,可以重复。在分发数据时,我希望系统生成100000-200000之间的随机数,而不是那些数字,但要将相同的随机数分配给重复ID。您可以使用字典: Option Explicit Sub depersonalize() 'Add "Microsoft Scripting Runtime" in Tools->References (VBE menu) Dim dict As New Dictionary, rng As Range,

我有一列ID是机密的,可以重复。在分发数据时,我希望系统生成100000-200000之间的随机数,而不是那些数字,但要将相同的随机数分配给重复ID。

您可以使用字典:

Option Explicit

Sub depersonalize()
    'Add "Microsoft Scripting Runtime" in Tools->References (VBE menu)
    Dim dict As New Dictionary, rng As Range, cl As Range, id As Long
    Set rng = Sheets(1).Range("A1:A10")
    Randomize
    id = Fix(Rnd * 100)
    For Each cl In rng
        If dict.Exists(cl.Text) Then
            cl.Offset(0, 1) = dict(cl.Text)
        Else
            dict.Add cl.Text, id
            cl.Offset(0, 1) = id
            id = id + Fix(Rnd * 100)
        End If
    Next
End Sub
输出

“给重复ID分配相同的随机数”不再是“随机”的意思。。。请,如果您无法向我们展示您自己尝试过的内容,请至少编辑您的问题,并向我们展示一个示例,说明您想要的含义……如果您每次都想要相同值的相同“随机”数字,系统必须记住它曾经给出的数字,可能需要使用字典。如果您希望在以后每次使用时再次返回相同的数字(即在工作簿关闭并重新打开后),则分配的“随机”数字必须与工作簿一起保存,可能保存在
VeryHidden
工作表中。创建一个具有唯一ID的表。根据该列表生成随机数。您需要采取措施确保映射唯一。然后使用查找检索“rabdom”备选IDСonvenient,以便为此使用哈希函数,如sha、md5等purpose@lambz那么没有什么是随机的。从100开始,增加1。然后在数据中循环使用第一个ID,将整个数据中的第一个ID替换为100。然后取下一个ID,在整个数据中用101替换它(使用像
i
这样的计数器变量来增加每次迭代)。在一个循环中这样做,你就完成了请注意,您需要检查当前ID是否已随机化。