【问题标题】:Random numbers but they should only appear x times in a row随机数,但它们只能连续出现 x 次
【发布时间】:2022-09-27 18:56:21
【问题描述】:

我想在很多单元格(在不同的行和列中)添加 0 或 1 作为数字(随机)。例如:

0  1  1  1 0  0 0 0
1  1  0  0 0  1 1 0

但我希望这些数字连续五次相加。例如:如果该行有 10 个单元格,随机数会去,我不希望第六次添加 1 或 0,所以我正在寻找这样的东西:0 1 1 1 0 1 1 0 0 0

  • 我不确定你想要什么。 =SORTBY(ROUND(SEQUENCE(1,10,0,0.1),0),RANDARRAY(1,10))呢?
  • @JvdV 我认为他们想要的基本上是从数组{0,0,0,0,0,1,1,1,1,1} 开始,然后随机化该数组内容的顺序,并将其填充到行中。所以,总是有 5 个1s 和 5 个0s
  • @Chronocidal,根据我的第一个 cmets 建议的公式。等待OP确认。根据目前的信息,这仍然可能有几个方向。
  • 我希望有 0 和 1 之间的随机数,但也希望能够控制 0 或 1 可以连续出现多少次。例如,如果我有一排有 7 个单元格,我不希望数字 1 能够显示 6 次(即使可能性很低)。我希望能够选择例如最多 3 次 1 和最多 4 次 0。感谢您的回答,我会尝试您的建议。
  • 那么像=SORTBY(MID(REPT(1,3)&REPT(0,4),SEQUENCE(1,7),1),RANDARRAY(1,7)) 这样的东西呢?

标签: excel excel-formula


【解决方案1】:

根据您的最新评论,以下代码将起作用:

Sub test()
    create_binary Range("A1:J1"), 5
End Sub

Sub create_binary(rng As Range, one_count As Long)
    With rng
        .ClearContents
        Do Until Application.WorksheetFunction.Sum(.Cells) = one_count
            .Cells(Int(.Count * Rnd + 1)) = 1
        Loop
        .SpecialCells(xlCellTypeBlanks).Value = 0
    End With
End Sub

它包含一个名为create_binary 的子程序,它需要两个参数:

  • 要写入的单元格 (rng)
  • 您希望这些单元格达到的总价值 (one_count)

因此,如果您想要从 A1 到 J1 的一行 10 个单元格,其中 8 个读取 1,其余 2 个读取 0,您可以使用:

create_binary Range("A1:J1"), 8

但是,如果您想要一列从 A1 到 A8 的 8 个单元格,其中 5 个读取 1,其余 3 个读取 0,您可以使用:

create_binary Range("A1:A8"), 5

要写入范围内的多行,您将使用:

Dim rw As Range
For Each rw In Range("A1:J116").Rows
    create_binary rw, 5
Next

【讨论】:

  • 我想这正是我想要的。谢谢您的回答。让我在一个真实的环境中测试它,这样我就可以确定了。
  • 实际上它并没有像我想的那样工作。例如,如果我有一个范围(A1:J116),您的代码会将“1”五次添加到所有这些单元格,而不是每行。结果是代码在 1160 个单元格(每行 10 个)中运行,但它只有五个“1”而不是每行五个,所以我们有大约 1155 个零。
  • 请参阅我刚刚对我的答案所做的补充,它将逐行写入范围的每一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多