我可以使用什么最简单的公式来随机选择A列中与给定B值相关联的值。所以在下表中,我想随机选择一个A,其中B = 3.所以我在第1行(5.4)和第3行(4.2)之间随机选择。请注意,此表可以任意大。
A B
1 5.4 3
2 2.3 1
3 4.2 3
4 9.2 2
... ...
答案 0 :(得分:1)
从概念上讲,你可以通过多种方式实现这一目标,但是这里有一个(VBA)你可以使用一系列可能的选择,然后从该列表中获取一个随机元素:
<强>更新强>: 下面是一个代码示例,它遍历您指定的数字的范围,如果找到它,它会将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
优化: 这是同一功能的更灵活的版本。它需要3个参数 - 您想要查看的范围,您想要查找的内容,以及您想要随机结果的单元格的偏移值。它还使用变体,因此您可以搜索文本或数字。所以在你的情况下,你会写:
=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
答案 1 :(得分:1)
老问题我知道......但如果您仍然感兴趣,那么假设A2:B10
=INDEX(A2:A10,SMALL(IF(B2:B10=3,ROW(A2:A10)-ROW(A2)+1),RANDBETWEEN(1,COUNTIF(B2:B10,3))))
返回#NUM!错误,如果B2中没有3:B10 .....或在IFERROR中附上以返回您选择的文本....