在 vba 中打乱数组

Jib*_*ova 2 arrays excel vba shuffle

我需要在没有重复的情况下对数组中的值进行洗牌,我需要在我的代码中添加什么以避免重复

Function Resample(data_vector)


   n = UBound(data_vector)
   ReDim shuffled_vector(n)
   For i = 1 To n
      shuffled_vector(i) = data_vector(WorksheetFunction.RandBetween(1, n))
   Next i
End Function
Run Code Online (Sandbox Code Playgroud)

Sco*_*ner 7

这将随机化数组:

Function Resample(data_vector() As Variant) As Variant()
    Dim shuffled_vector() As Variant
    shuffled_vector = data_vector
    Dim i As Long
    For i = UBound(shuffled_vector) To LBound(shuffled_vector) Step -1
        Dim t As Variant
        t = shuffled_vector(i)
        Dim j As Long
        j = Application.RandBetween(LBound(shuffled_vector), UBound(shuffled_vector))
        shuffled_vector(i) = shuffled_vector(j)
        shuffled_vector(j) = t
    Next i
    Resample = shuffled_vector
End Function
Run Code Online (Sandbox Code Playgroud)

你可以这样调用:

Sub try()
    Dim x() As Variant
    x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)

    x = Resample(x)

    MsgBox Join(x, ",")
End Sub
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明