VBA = RANDBETWEEN

时间:2016-01-21 14:58:00

标签: excel-vba random vba excel

我希望你能帮助我弄清楚自己无法做到的事情。我是一名拥有大型数据集的审计员,希望为我和我工作的每个人提供更容易的样本。

我正在尝试使用= RANDBETWEEN

设置随机数生成器

我想要做的是指定一个字段,在其中我键入范围,即(1,20),然后输入= RANDBETWEEN以选择该值并生成数字,但不重复任何。

我打赌有一种方式,我只是没有考虑过这种可能性并且有一个金发的时刻。

任何帮助都会非常感激。

由于

1 个答案:

答案 0 :(得分:1)

以找到的内容为基础HERE

对于公式答案,您需要两列公式和一个单独的单元格作为起始编号,另一个单元格作为结束编号。

我使用E1作为起始编号,使用F1作为结束编号。

然后在A1中我提出以下内容:

=IF(ROW()<=$F$1-$E$1+1,RAND(),"")

在C1中我放了:

=IFERROR(MATCH(AGGREGATE(14,6,$A:$A,ROW(1:1)),$A:$A,0)+$E$1-1,"")

然后我将A1和C1复制到足够的行以覆盖我想要的最大可能范围。

enter image description here

如你所见,我想要5到20之间的随机数。在C栏中,我以随机顺序从5到20得到16个数字。

如果我将范围从6更改为15,则会更改:

enter image description here

一个注意事项:聚合函数是在Excel 2010中引入的。因此,这对早期版本不起作用。

如果您使用的是早期版本,请在C1中使用它:

=IF(A1<>"",RANK(A1,A:A)+$E$1-1,"")

然后复制。

至于vba版本:

Sub RndmUnquArr()
Dim ws As Worksheet
Dim mnm&, mxm&
Dim oArr() As Variant
Dim i&, j&, x&, temp&

Set ws = Sheets("Sheet1")
With ws
    mnm = .Range("E1") 'change as desired
    mxm = .Range("F1") 'change as desired

    ReDim tArr(0 To (mxm - mnm)) As Variant
    ReDim oArr(mnm To mxm) As Variant

    'Load array with integers from mnm to mxm
    For i = mnm To mxm
        oArr(i) = i
    Next i

    'Randomly suffle arr
    x = UBound(oArr)
    For j = LBound(oArr) To UBound(oArr)

        i = Int((x - mnm + 1) * Rnd + mnm)
        temp = oArr(i)
        oArr(i) = oArr(x)
        oArr(x) = temp

        x = x - 1
    Next j

    .Range("A1").Resize(mxm - mnm + 1).Value = Application.Transpose(oArr)
    ws.Calculate
End With

End Sub

现存下层现在是E1,上层是F1