Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel使用IF语句拾取随机数并创建随机数组_Excel_Excel Formula - Fatal编程技术网

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