我希望你能帮助我弄清楚自己无法做到的事情。我是一名拥有大型数据集的审计员,希望为我和我工作的每个人提供更容易的样本。
我正在尝试使用= RANDBETWEEN
设置随机数生成器我想要做的是指定一个字段,在其中我键入范围,即(1,20),然后输入= RANDBETWEEN以选择该值并生成数字,但不重复任何。
我打赌有一种方式,我只是没有考虑过这种可能性并且有一个金发的时刻。
任何帮助都会非常感激。
由于
答案 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复制到足够的行以覆盖我想要的最大可能范围。
如你所见,我想要5到20之间的随机数。在C栏中,我以随机顺序从5到20得到16个数字。
如果我将范围从6更改为15,则会更改:
一个注意事项:聚合函数是在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