Arrays 动态阵列的概率随机选择
我是这里的VBA新手。我有两个列表,一个价格列表,和一个分配给价格的概率列表。我需要根据概率组生成一个包含300个数字的列表。然而,我似乎无法让它发挥作用。我从另一个帖子上撕下了一个密码:Arrays 动态阵列的概率随机选择,arrays,excel,vba,random,probability,Arrays,Excel,Vba,Random,Probability,我是这里的VBA新手。我有两个列表,一个价格列表,和一个分配给价格的概率列表。我需要根据概率组生成一个包含300个数字的列表。然而,我似乎无法让它发挥作用。我从另一个帖子上撕下了一个密码: Function RandItem(items As Variant, probs As Variant) As Variant Dim i As Long, sum As Double Dim spin As Double spin = Rnd() For i = LBou
Function RandItem(items As Variant, probs As Variant) As Variant
Dim i As Long, sum As Double
Dim spin As Double
spin = Rnd()
For i = LBound(probs) To UBound(probs)
sum = sum + probs(i)
If spin <= sum Then
RandItem = items(i)
Exit Function
End If
Next i
'if you get here:
RandItem = items(UBound(probs))
End Function
以适应我的代码。然而,问题是价格区间在增长,概率随时间而变化(由于历史权重)。因此,我尝试切换:
RandItem(Array(1, 2, 3, 4, 5), Array(0.26, 0.18, 0.26, 0.2, 0.1))
到
它返回:
运行时错误“9”:
下标超出范围。有没有人建议如何解决这个问题,这样我就可以使用数组变量,而不是列出所有的价格范围
学分:
您的动态解决方案不起作用,因为
arrayPrice
和arrayPrice
不是RandItem
所期望的一维数组,而是二维数组。这是因为Excel范围通常可以有多行多列,因此.Value2
和.Value
方法返回一个矩阵
例如,如果在Excel工作表中有A2=1、A3=2和A4=3,则arrayPrice
将是Array(Array(1)、Array(2)、Array(3))
在调用RandItem
之前,首先必须将该矩阵展平为一维数组。这同样适用于arrayProPrice
您可以使用Excel函数来实现这一点:
arrayPrice = Application.Transpose(Range("A2:A" & LastRow))
arrayProPrice = Application.Transpose(Range("B2:B" & LastRow))
动态解决方案不起作用,因为
arrayPrice
和arrayProPrice
不是RandItem
所期望的一维数组,而是二维数组。这是因为Excel范围通常可以有多行多列,因此.Value2
和.Value
方法返回一个矩阵
例如,如果在Excel工作表中有A2=1、A3=2和A4=3,则arrayPrice
将是Array(Array(1)、Array(2)、Array(3))
在调用RandItem
之前,首先必须将该矩阵展平为一维数组。这同样适用于arrayProPrice
您可以使用Excel函数来实现这一点:
arrayPrice = Application.Transpose(Range("A2:A" & LastRow))
arrayProPrice = Application.Transpose(Range("B2:B" & LastRow))
我明白了,这的确是一个伟大的洞察力!如果我可以进一步问的话,我该怎么做呢?我明白了,这的确是一个伟大的见解!如果我可以进一步问的话,我该怎么做?
arrayPrice = Application.Transpose(Range("A2:A" & LastRow))
arrayProPrice = Application.Transpose(Range("B2:B" & LastRow))