运行时错误'1004': 无法获取WorksheetFunction类的Combin属性。

3
我在Excel 2013工作簿中有一个VBA函数,该函数根据泊松分布计算p值。当下面代码中的 事件 变量超过1029时,我会收到运行时错误 '1004':无法获取WorksheetFunction类的Combin属性。只要事件1和事件2的总和保持在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

Excel 中允许的最大数字是:1.79769313486231E+308。你知道你计算出来的结果是否会比这个更大吗?如果是,那就是导致错误的原因。 - tigeravatar
谢谢,但即使我将events1设置为1,events2设置为1029,COMBIN函数的结果仍然是1030,我仍然会收到错误提示。将其更改为events1 = 1和events2 = 1028,COMBIN函数的结果为1029,错误就不会发生了。因此,这似乎不是问题所在。 - michoco
没关系,是第二个COMBIN函数引起了问题,你说得对,它达到了上限。从COMBIN(1030,500)到COMBIN(1030,530),结果超过了1.797E+308。COMBIN(1030,499)=1.7E+308 COMBIN(1030,531)=1.7E+308 - michoco
2个回答

2
在Excel 2013中,公式返回的最大正数是1.7976931348623158e+308。根据您描述的情况,您的数字可能会计算出一个更大的值。您可以尝试使用变量因子执行工作表上的COMBIN函数,看看它是否返回#NUM错误来确认这一点。
一种可能的解决方案是安装XNumbers插件并使用其xComb_big函数。XNumbers是一个免费的工具,允许使用大数和增加精度。据说它适用于Excel 97-2010版本,但我不知道它是否适用于2013版本。但如果它适用,它可以配置为使用高达2147000000的指数和高达32760个有效数字(您可能不需要那么多,但它是可配置的,默认安装有较少的有效数字)。

-1
我敢打赌,如果您明确声明所有变量,这个问题就会消失: eventsp_cp_lop_hiipoisson_p_value_term

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接