始终从“随机”dictonary获得相同的结果

时间:2017-09-04 18:29:00

标签: excel vba excel-vba

我编写了一个代码,将随机数放入Excel VBA中的字典中。 目的是将不同的数字分成3个数字组。如果我的数字是1-8,它应该将其分为2组,其中3个数字和1组具有2个数字。第一部分找出它创建了多少个完整的组,第二部分填补了其余部分。所有这些数字应该是随机顺序

每当我执行宏时,它会以不同的顺序创建数字,但是当我关闭文件并启动它并运行宏时,它会创建与关闭之前相同的模式。 我运行宏时的示例 第一:1,2,3,1,2,3,1,2 下一页:2,1,3,2,1,3,2,1 下一页:3,2,1,3,2,1,1,2 重新启动它创建完全相同模式的文件: 第一:1,2,3,1,2,3,1,2 下一个:等等

除了相同的模式外,它的工作原理很完美, 有人可以帮助我,所以当我重新启动文件时它总会创建一个新模式吗?

Dim objDic As Object
Dim lngCnt, lngCnt2, lngCnt3 As Long
Dim llngCnt, llngCnt2, llngcnt3 As Long
Dim lngTot, lngOut, lngNum As Long
Dim Numvalue As Double
Dim Maxnumber As Double
Dim minnumber As Long
Dim Dela As Integer
Dim alastrow As Long
Dim blastrow As Long
Dim list As ListObject
Dim ws, Omg2 As Worksheet
Dim Lorng As Range
Dim lcol As Long

lngTot = Cells(Rows.Count, 1).End(xlUp).Row

Set objDic = CreateObject("scripting.dictionary")
minnumber = 1
Maxnumber = (lngTot - 1) / 3


Numvalue = Maxnumber
    If (Numvalue - Int(Numvalue)) = 0 Then
     Else
        Numvalue = Int(Numvalue) + 1
        [Maxnumber] = Numvalue
     End If

For lngCnt = 1 To 2
    For lngCnt2 = 1 To Maxnumber
        lngCnt3 = lngCnt3 + 1
        objDic.Add lngCnt2 & "|" & lngCnt, lngCnt3

    Next
Next


For lngOut = 2 To (lngCnt3 + 1)
    lngNum = Int(Rnd() * objDic.Count)
    Cells(lngOut, 3) = Application.Index(Split(objDic.Keys()(lngNum), "|"), 1)
    objDic.Remove objDic.Keys()(lngNum)

    Next

objDic.RemoveAll

'Second part
alastrow = Range("C" & Rows.Count).End(xlUp).Row + 1
blastrow = lngTot - (Range("C" & Rows.Count).End(xlUp).Row)


For lngCnt = 1 To 1
    For lngCnt2 = 1 To blastrow
        lngCnt3 = lngCnt3 + 1
        objDic.Add lngCnt2 & "|" & lngCnt, lngCnt3
        Debug.Print lngCnt3 & "." & lngCnt2 & " " & lngCnt
    Next
Next

For lngOut = alastrow To (lngCnt3 + 1)
    lngNum = Int(Rnd() * objDic.Count)
    Cells(lngOut, 3) = Application.Index(Split(objDic.Keys()(lngNum), "|"), 1)
    objDic.Remove objDic.Keys()(lngNum)
Next

objDic.RemoveAll

0 个答案:

没有答案