在2列随机数中生成5000条记录,这些记录是唯一的

时间:2015-01-10 15:32:40

标签: excel random excel-formula excel-2013

如何在2列1到100之间的随机数中生成5000条记录,这些记录是唯一的。

例如:

 A            B
----------------
 1            98
 1            23
 37           98
 6            56
 93           18
 .            .
 .            .
 .            .

感谢

3 个答案:

答案 0 :(得分:4)

Excel公式在满足条件之前不执行循环。任何'循环'或数组处理必须具有已定义的周期数。此外,RANDRANDBETWEEN是易失性公式,可在工作簿经历计算周期时重新计算。

在VBA中,这将如下所示。

Sub Random_2500_x_2()
    Dim rw As Long
    For rw = 1 To 2500
        Cells(rw, 1) = Int((100 - 1 + 1) * Rnd + 1)
        Cells(rw, 2) = Int((100 - 1 + 1) * Rnd + 1)
        Do Until Cells(rw, 2).Value <> Cells(rw, 1).Value
            Cells(rw, 2) = Int((100 - 1 + 1) * Rnd + 1)
        Loop
    Next rw
End Sub

答案 1 :(得分:2)

首先运行这个微小的宏:

Sub dural()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    k = 1
    For i = 1 To 100
        For j = 1 To 100
            Cells(k, 1) = i
            Cells(k, 2) = j
            Cells(k, 3).Formula = "=rand()"
            k = k + 1
        Next j
    Next i
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = True
End Sub

然后按 C 列对cols A,B,C 进行排序。
然后选择前5000行。

enter image description here


修改#1:

要删除 A 列中的值与 B 列中的值相同的情况,请改为使用此宏:

Sub dural()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    k = 1
    For i = 1 To 100
        For j = 1 To 100
            If i <> j Then
                Cells(k, 1) = i
                Cells(k, 2) = j
                Cells(k, 3).Formula = "=rand()"
                k = k + 1
            End If
        Next j
    Next i
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = True
End Sub

答案 2 :(得分:2)

这是一种使用公式的简单方法。它是否合适取决于具体情况。

首先在公式选项卡中将计算选项设置为'手动'。

将以下公式放入a2: -

=RANDBETWEEN(1,100)

B将成为帮助列。将以下内容放入B2: -

=RANDBETWEEN(1,99)

C列是您想要的第二个结果。将以下内容放入C2: -

=IF(B2<A2,B2,B2+1)

根据需要拉下公式。

每按一次“立即计算”,您将获得一组新的随机数字。

enter image description here

但是如果你真的需要唯一的行(每一行都不同)你需要一个不同的方法 - 可以生成一组4位数字,将它们分成第一对和最后一对数字并过滤掉第一行第二个是平等的。

在A2中生成4位数: -

=RANDBETWEEN(1,9998)

取B2中的前两位数加一: -

=INT(A2/100)+1

在C2中取第二个2位数加一: -

=MOD(A2,100)+1

检查D2中的无效数字: -

=OR(ISNUMBER(MATCH(A2,A$1:A1,0)),B2=C2)

在E2中设置有效数字的运行总数: -

=COUNTIF(D2:D$2,FALSE)

以下是检查重复行以及行内重复数字的第二种方法。请注意,您必须生成大约3,000行才能获得2,500个不同的行: -

enter image description here