整数集合的集合

时间:2018-02-13 12:17:32

标签: excel vba collections

我正在生成一些随机的gcard人群,编号从1到pmax

问题是收集“persone”总是一样的...... gruppi(i)为每个“i”引用相同的“persone”

我希望每个“gruppi(i)”里面都有一个新的收藏品 我怎么能这样做?

Dim gruppi As New Collection
Dim persone As New Collection


gmax = -Int(-(pmax / gcard))

conta = 1

For g = 1 To gmax

    gruppi.Add persone

    'ciclo sulle persone del gruppo
    For p = 1 To gcard

        cas = Round(Rnd() * (pmax - 1) + 1, 0)

riprova:

        'check if cas was generated before
        For i = 1 To gruppi.Count

            For j = 1 To gruppi(i).Count
                If gruppi(i)(j) = cas Then
                    cas = Round(Rnd() * (pmax - 1) + 1, 0)
                    GoTo riprova
                End If
            Next

        Next

continua:

        'person "cas" not present, ok let's add it!
        gruppi(g).Add cas

        'MsgBox "gruppi -> " & gruppi.Count
        'MsgBox "persone nel gruppo " & g & " -> " & gruppi(g).Count

        conta = conta + 1
        If conta > pmax Then GoTo esci

    Next p

Next g

esci:

1 个答案:

答案 0 :(得分:0)

因为

Dim gruppi As New Collection
Dim persone As New Collection 

For g = 1 To gmax
    gruppi.Add persone
    ....

您可以为您添加的每个persone项目引用相同的gruppi对象...

然后你要使用:

Dim gruppi As New Collection

For g = 1 To gmax
    gruppi.Add New Collection ' add a new collection as the new item of 'gruppi' collection
    ....
顺便说一下,

允许更少的对象变量声明和使用

并且因为它是声明和实例化

的最佳实践