如何在1..n范围内使用不同的随机数在1到n范围内使用vba代码
问题描述:
我想要一个vba代码,其中所有行都包含值1..n(n从属于txt文件)只有一次。一些单元格已经从txt文件中获得了值。 这是我做的,但它不给我,我想:如何在1..n范围内使用不同的随机数在1到n范围内使用vba代码
Function randomnum(n As Integer, ProbMatrix() As Integer) As Integer
Dim k As Integer, newvalue As Integer
newvalue = Int(n * Rnd + 1)
For i = 1 To n
For k = 1 To n
If ProbMatrix(i, k) = newvalue Then
newvalue = RandInt(n)
k = 0
End If
Next k
randomnum = newvalue
Next i
End function
答
这里是A1并运行一个单细胞,细胞A1
放置一个值的示例子程序()产生随机号码的列表中的相邻小区:
Sub Routine()
Dim i As Long, MMX As Long
MMX = Range("A1").Value
ReDim ary(1 To MMX) As Variant
For i = 1 To MMX
ary(i) = i
Next i
Call Shuffle(ary)
For i = 1 To MMX
Cells(1, 1 + i).Value = ary(i)
Next i
End Sub
Sub Shuffle(InOut() As Variant)
Dim HowMany As Long, i As Long, J As Long
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
Temp = Helper(i)
Helper(i) = Helper(i + J)
Helper(i + J) = Temp
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
Temp = Helper(i)
Helper(i) = Helper(i + J)
Helper(i + J) = Temp
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
J = J \ 2
Loop
End Sub
例如:
你的意思是你想要1和n之间的整数的整数?如果是这样,然后执行此操作:http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle – Bathsheba
它给你什么?它在我看来,如果你的'ProbMatrix(i,k)= newvalue'在某种程度上有点击球,你会得到一个接近无限循环,因为你重置'k = 0''side_'For K = 1。 ..'循环。 – FreeMan
在程序中,用户可以选择三个示例问题文件之一。每个示例问题文件都包含n x n个数组中的一些值。第一列是示例文件中的数字n。首先,我们必须将给定的值显示在正确的位置,然后用范围(1-n)中的随机数填充行,以便所有行都精确地包含值1,...,n。 –