Excel – 根据其他两列生成随机数

我不知道如何完成以下任务:在columnA上有数字,在columnB上我有与这些数字关联的名称。

我希望能够从列A中产生一个随机数,但只能从列B上没有任何关联的数字中生成一个随机数。例如:如果我在A1中有一个数字,但是我没有名字B1,A1中的数字应该是可以随机生成的数字之一。

如果A2有一个数字,B2不是空的(它有一个名字),我不想在随机范围内有A2。

另外,能够重新产生随机数也是很好的(也就是说,如果我分配一个数字,比方说,我想能够以某种方式再次产生随机数,但不应该考虑到321已经分配)。

我很欣赏任何想法。

样品

在这里输入图像说明

您可以尝试以下方法:

根据您的示例数据/电子表格,执行以下操作:

1)在单元格C1中:将值“0”

2)在Cell C2中:把公式:

=IF(ISBLANK(B2), 1, 0)+OFFSET(C2,-1,0,1,1)

3)将C2中的公式与所有数据一起复制。

4)把这个公式放在你想要显示来自列A的随机化#

=OFFSET(A1,MATCH(RANDBETWEEN(1,COUNTA(A:A)-COUNTA(B:B)),C:C,0)-1,0,1,1)

我想你会很难用工作表function来做这件事。 这是一种至less在一些时候起作用的快速而又肮脏的方法—

  1. 在两个(或更多)单元格中,添加公式=RANDBETWEEN(COLUMN(A1),COLUMN(D1)) ,将A1D1replace为数字行中的第一个和最后一个单元格。 这将select随机列号。
  2. 给每个单元格一个唯一的名字,例如therandtherand2 ,…。
  3. 在另一个单元格,这将是您的答案,添加=IF(ISBLANK(INDIRECT(ADDRESS(2,therand))),INDIRECT(ADDRESS(1,therand)),INDIRECT(ADDRESS(1,therand2))) 。 这将检查第一个随机列号是否对应于空白标签( ISBLANK(...) ),如果是,则使用相应的第一行值。 否则,将使用第二个随机列号中的第一行值。
  4. 打F9来重新计算。

这并不总是给你一个空白标签的单元格。 添加更多的随机列号和对应的IF(...)从句,以减less错误select的概率。

编辑 :你在原来的问题中说“行A”,但我看到你的意思是“列A”(而不是“行1”)。 您需要对上述公式中的行和列进行转置以使其工作。

这是一个VBA的答案。 它可以直接用作工作表函数:

 Function RandUnassigned(R As Range) As Variant Application.Volatile Dim A As Variant, i As Long, n As Long Dim num As Long n = R.Rows.Count ReDim A(1 To n) For i = 1 To n If Len(R.Cells(i, 2)) = 0 Then num = num + 1 A(num) = R.Cells(i, 1) End If Next i RandUnassigned = A(Application.WorksheetFunction.RandBetween(1, num)) End Function 

像这样使用:

在这里输入图像说明

每次电子表格都会重新计算。 如果你想要它只画一次随机数,从函数定义中移除Application.Volatile行。