在 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' 或 阵列处理 必须具有定义的循环数。此外,RAND
和 RANDBETWEEN
是不稳定的公式,将在工作簿经过计算周期的任何时候重新计算。
在 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 行不同的行:-
如何在 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' 或 阵列处理 必须具有定义的循环数。此外,RAND
和 RANDBETWEEN
是不稳定的公式,将在工作簿经过计算周期的任何时候重新计算。
在 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 行不同的行:-