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

Generate 5000 records in 2 columns of random number that being unique

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

例如:

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

谢谢

首先运行这个小宏:

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 行。


编辑#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

Excel 公式在满足条件之前不会执行循环。任何 'loop' 或 阵列处理 必须具有定义的循环数。此外,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

这是一个使用公式的 simple-minded 方法。是否合适取决于上下文。

首先在“公式”选项卡中将计算选项设置为 'Manual'。

在a2中输入以下公式:-

=RANDBETWEEN(1,100)

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

=RANDBETWEEN(1,99)

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

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

根据需要下拉公式。

每按一次'Calculate Now',您将获得一组新的随机数。

但是,如果您真的需要唯一的行(每一行都不同),您需要一种不同的方法 - 可以生成一组 4 位数字,将它们分成第一对和最后一对数字并过滤掉那些其中 first 和 second 相等。

生成A2中的4位数字:-

=RANDBETWEEN(1,9998)

取B2第two-digit个数加1:-

=INT(A2/100)+1

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

=MOD(A2,100)+1

检查 D2 中的无效数字:-

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

在E2中设置运行个有效号码总数:-

=COUNTIF(D2:D,FALSE)

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