如何确保数组只包含vba中的唯一数字

时间:2014-09-11 06:06:10

标签: excel vba

正如标题所说,我有一个20个整数的数组。每次我生成一个新的随机数,我想检查它是否已经包含在数组中。如果数组中存在该数字,我想重新生成一个随机数并重新检查该数组。最后,我的20个整数数组应该包含7到30之间的所有唯一值。我已经创建了一个完美的代码混乱。感谢这里的专家提供的一些帮助。非常感谢。

 Dim Low, High, tmpNo As Double
 Dim myarray(20) As Integer
 Dim i, x As Integer

 Low = 7
 High = 30
 i = 0
 x = 0

 For i = 0 To 19
  tmpno = Int((High - Low + 1) * Rnd() + Low)
  If i = 0 Then
    myarray(i) = tmpno
    tmpno = Int((High - Low + 1) * Rnd() + Low)
  End If

  For x = 0 To Len(i)
    If tmpno = myarray(x) Then
        tmpno = Int((High - Low + 1) * Rnd() + Low)
        x = 0
    Else
        If myarray(x + 1) = 0 Then
            myarray(x + 1) = tmpno
            tmpno = Int((High - Low + 1) * Rnd() + Low)
            x = 0
        End If
    End If
  Next
 Next

1 个答案:

答案 0 :(得分:0)

您使用字典而不是数组。您只需设置密钥。您无法添加重复的密钥,因此请使用On Error Resume NextIf err.number <> 0 then ...

测试错误

Dictionary对象相当于PERL关联数组。项目可以是任何形式的数据,并存储在数组中。每个项目都与一个唯一键相关联。该键用于检索单个项目,通常是整数或字符串,但可以是除数组之外的任何内容。

以下代码说明了如何创建Dictionary对象:

Visual Basic Script  Copy Code 
Dim d   ' Create a variable.

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"   ' Add some keys and items.

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

...