在另一列中随机select一个列子集中的值

什么是最简单的公式我可以用来随机select列A中的值与给定的B值相关联。 所以在下面的表格中,我要随机select一个B = 3的A,所以我在第1行(5.4)和第3行(4.2)之间随机select。 请注意,这个表格可以是任意大的。

AB 1 5.4 3 2 2.3 1 3 4.2 3 4 9.2 2 ... ... 

从概念上讲,你可以通过多种方式来做到这一点,但是这里有一个(VBA)你可以使用一系列可能的select,然后从这个列表中获得一个随机元素:

  1. 创build一个使用范围和search值的udf
  2. 循环遍历行,如果它等于您的search值,请获取单元格中的值offset -1并将其存储在数组中
  3. 一旦你完成了,你将有一个所有可能的答案arrays。 使用randbetween函数,并给它的数组的Ibound和Ubound。
  4. 返回i元素,我是它所挑选的随机数。

更新 :下面是一个代码示例,循环遍历指定数字的范围,如果find它,则将A列值添加到可能的结果数组中。 然后生成一个随机数并用于从该列表中返回一个随机值。

 Function GetRand(ByVal cell_range As Range, ByVal criteria As Double) As Double Dim cell As Range Dim rNum As Long Dim i As Long Dim possibleChoices() As Double ReDim possibleChoices(1 To cell_range.Count) i = 1 For Each cell In cell_range If cell.Value = criteria Then possibleChoices(i) = cell.Offset(0, -1).Value i = i + 1 End If Next rNum = Application.WorksheetFunction.RandBetween(1, i - 1) GetRand = possibleChoices(rNum) End Function 

优化:这是相同function的更灵活的版本。 它需要3个参数 – 你想要查看的范围,你想要find的,以及你想要随机结果的单元格的偏移值。 它也使用变体,所以你可以search文本或数字。 所以在你的情况下,你会写:

 =GetRand(B1:B5, 3, -1) 

这里是代码:

 Function GetRand(ByVal cell_range As Range, _ ByVal criteria As Variant, _ ByVal col_offset As Long) As Variant Application.ScreenUpdating = False Dim cell As Range Dim rNum As Long Dim i As Long Dim possibleChoices() As Variant ReDim possibleChoices(1 To cell_range.Count) i = 1 For Each cell In cell_range If cell.Value = criteria Then possibleChoices(i) = cell.offset(0, col_offset).Value i = i + 1 End If Next rNum = Application.WorksheetFunction.RandBetween(1, i - 1) GetRand = possibleChoices(rNum) Application.ScreenUpdating = True End Function 

老问题,我知道……但如果你仍然感兴趣这里是一个公式的解决scheme,假设数据在A2:B10

=INDEX(A2:A10,SMALL(IF(B2:B10=3,ROW(A2:A10)-ROW(A2)+1),RANDBETWEEN(1,COUNTIF(B2:B10,3))))

返回#NUM! B2:B10中没有3的错误,或者在IFERROR中input以返回您select的文本….