【问题标题】:Generate 5000 records in 2 columns of random number that being unique在 2 列唯一的随机数中生成 5000 条记录
【发布时间】:2015-01-10 15:32:39
【问题描述】:

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

例如:

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

谢谢

【问题讨论】:

  • 如果它们都是唯一的,它们就不可能是随机的!
  • 你的意思是A列中的数字不应该在B列中吗?或者你的意思是唯一的行?
  • 您希望每列有 5000 行还是 2500 个值?
  • 是的。 2 列 5000 行...每列 2500 行
  • “2 列 5000 行...每列 2500”自相矛盾。也许您的意思是“2 列中的 5000 个 ...每列 2500 个”。

标签: excel random excel-formula excel-2013


【解决方案1】:

在满足条件之前,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

【讨论】:

    【解决方案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 个不同的行:-

    【讨论】:

      【解决方案3】:

      首先运行这个小宏:

      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 对列 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
      

      【讨论】:

      • 可能还有像第三行一样的行。
      • @khajvah 查看我的EDIT#1
      猜你喜欢
      • 2013-04-22
      • 2016-01-11
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2016-12-23
      相关资源
      最近更新 更多