我在Excel 2013中的工作簿中具有VBA功能,可根据泊松分布计算p值。当下面的代码中的 events 变量超过1029时,我得到运行时错误'1004':无法获取WorksheetFunction类的Combin属性。只要events1和events2的总和保持在1029或更低,就没有问题,宏也能正常执行。
是否有人知道如何通过更高的数字使其正常运行?非常感谢任何指导!
Sub poisson_meansB()
Dim events1 As Long
Dim events2 As Long
Dim days1 As Long
Dim days2 As Long
events1 = Sheet1.Range("B6").Value
events2 = Sheet1.Range("C6").Value
days1 = Sheet1.Range("B7").Value
days2 = Sheet1.Range("C7").Value
If events2 > 0 Then
events = events1 + events2
p_c = days1 / (days1 + days2)
p_lo = 0
p_hi = 0
For i = 0 To events1
poisson_p_value_term = Application.WorksheetFunction.Combin(events, i) * Application.WorksheetFunction.Power(p_c, i) * Application.WorksheetFunction.Power(1 - p_c, events - i)
p_lo = p_lo + poisson_p_value_term
Next i
For i = events1 To events
poisson_p_value_term = Application.WorksheetFunction.Combin(events, i) * Application.WorksheetFunction.Power(p_c, i) * Application.WorksheetFunction.Power(1 - p_c, events - i)
p_hi = p_hi + poisson_p_value_term
Next i
p = Application.WorksheetFunction.Min(2 * p_lo, 2 * p_hi)
Sheet1.Range("C13") = p
Else
Sheet1.Range("C13") = "-"
End If
End Sub
答案 0 :(得分:2)
在Excel 2013中,公式可以返回的最大正数是1.7976931348623158e + 308在您描述的情况下,您的数字可能会大于某个值。您可以通过尝试使用变量的因子在工作表上执行COMBIN函数并查看它是否返回#NUM错误来确认这一点。
一种可能的解决方案是安装XNumbers add-in并使用其xComb_big函数。 XNumbers是一个免费的工具,允许使用大量和更高的精度。它据说适用于97-2010的Excel版本。我不知道它是否适用于2013.但如果确实如此,它可以配置为使用高达2147000000的指数和高达32760个有效数字(你可能不需要那么多,但它是可配置的,并且默认安装的位数较少。)
答案 1 :(得分:-1)
如果您明确声明所有变量,我打赌这个问题就会消失:
events
,
p_c
,
p_lo
,
p_hi
,
i
,
poisson_p_value_term