如何在2列1到100之间的随机数中生成5000条记录,这些记录是唯一的。
例如:
A B
----------------
1 98
1 23
37 98
6 56
93 18
. .
. .
. .
感谢
答案 0 :(得分:4)
Excel公式在满足条件之前不执行循环。任何'循环'或数组处理必须具有已定义的周期数。此外,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
答案 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行。
修改#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)
根据需要拉下公式。
每按一次“立即计算”,您将获得一组新的随机数字。
但是如果你真的需要唯一的行(每一行都不同)你需要一个不同的方法 - 可以生成一组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个不同的行: -