Excel使用IF语句拾取随机数并创建随机数组
我试图创建一个不重复的随机数列表,然后我想获取这些数字并生成多个随机列表Excel使用IF语句拾取随机数并创建随机数组,excel,excel-formula,Excel,Excel Formula,我试图创建一个不重复的随机数列表,然后我想获取这些数字并生成多个随机列表 for example for cells A1-A10 i want random numbers from 1-100 and then for A11-20 I want random numbers from 1-100 and then for A21 - A30 I want random number from 1-100 通过MOD和OFFSET函数向下拖动并重复这一点似乎是可能的,我还在学习 我试过生成
for example
for cells A1-A10 i want random numbers from 1-100
and then for A11-20 I want random numbers from 1-100
and then for A21 - A30 I want random number from 1-100
通过MOD和OFFSET函数向下拖动并重复这一点似乎是可能的,我还在学习
我试过生成数字
=RANDBETWEEN(1,100)
但它会产生重复的结果
我也试过了
放置
在G1中生成随机数
然后使用
=RANK.EQ(G1,$G$1:$G$100)
以及:
=INDEX($H$1:$H$100, RANK(G1,$G$1:$G$100), 1)
这更好,而且不会产生重复,但是因为我需要多个列表,所以每个列表都有完全相同的数据,因为代码只是复制相同的引用
e、 g:我得到的是A1-10
A1 = 65
A2 = 54
A3 = 23
A4 = 31
A10= 23
然后我试着重复A11-A20的代码
但它产生相同的值
即使我使用
=INDEX($H$1:$H$50, RANK.EQ(G2, $G$1:$G$100) + COUNTIF($G$1:G2, G2) - 1, 1)
然后我有
=INDEX($H$1:$H$100, RANK(G1,$G$1:$G$100), 1)
在两个不同的行中,它们产生完全相同的随机数
所以我想我需要一些每次都随机的东西
非常感谢您的帮助请尝试以下VBA宏:
Sub vRandom()
Dim mn As Long, mx As Long, samples As Long
Dim times As Long, arr1(), t As Long, s As Long
Dim k As Long
mn = 1
mx = 100
samples = 10
times = 3
k = 1
ReDim arr1(mn To mx)
For s = mn To mx
arr1(s) = s
Next s
For t = 1 To times
Call Shuffle(arr1)
For s = 1 To samples
Cells(k, 1) = arr1(mn + s - 1)
k = k + 1
Next s
Next t
End Sub
Public Sub Shuffle(InOut() As Variant)
Dim i As Long, J As Long
Dim tempF As Double, Temp As Variant
Hi = UBound(InOut)
Low = LBound(InOut)
ReDim Helper(Low To Hi) As Double
Randomize
For i = Low To Hi
Helper(i) = Rnd
Next i
J = (Hi - Low + 1) \ 2
Do While J > 0
For i = Low To Hi - J
If Helper(i) > Helper(i + J) Then
tempF = Helper(i)
Helper(i) = Helper(i + J)
Helper(i + J) = tempF
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
For i = Hi - J To Low Step -1
If Helper(i) > Helper(i + J) Then
tempF = Helper(i)
Helper(i) = Helper(i + J)
Helper(i + J) = tempF
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
J = J \ 2
Loop
End Sub
代码生成3个项目块(每个块中有10个项目)
在块内没有重复项,但在块之间可能有重复项。这里有很多关于随机数的问题-你看过了吗?也可以考虑寻找重复的……VBA解决方案是否可以接受?当然,加里,任何事情都有帮助。我要试试看!我已经读了几个小时了,找不到真正合适的。很多人给出了rank()选项作为解决方案,但它不适用于此Gary的,它的效果令人难以置信!谢谢你的时间和努力,我真的很感激。我整天坐在那里试着各种公式,结果一切都崩溃了。谢谢
Sub vRandom()
Dim mn As Long, mx As Long, samples As Long
Dim times As Long, arr1(), t As Long, s As Long
Dim k As Long
mn = 1
mx = 100
samples = 10
times = 3
k = 1
ReDim arr1(mn To mx)
For s = mn To mx
arr1(s) = s
Next s
For t = 1 To times
Call Shuffle(arr1)
For s = 1 To samples
Cells(k, 1) = arr1(mn + s - 1)
k = k + 1
Next s
Next t
End Sub
Public Sub Shuffle(InOut() As Variant)
Dim i As Long, J As Long
Dim tempF As Double, Temp As Variant
Hi = UBound(InOut)
Low = LBound(InOut)
ReDim Helper(Low To Hi) As Double
Randomize
For i = Low To Hi
Helper(i) = Rnd
Next i
J = (Hi - Low + 1) \ 2
Do While J > 0
For i = Low To Hi - J
If Helper(i) > Helper(i + J) Then
tempF = Helper(i)
Helper(i) = Helper(i + J)
Helper(i + J) = tempF
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
For i = Hi - J To Low Step -1
If Helper(i) > Helper(i + J) Then
tempF = Helper(i)
Helper(i) = Helper(i + J)
Helper(i + J) = tempF
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
J = J \ 2
Loop
End Sub