自定义Excel函数数据types问题

Function LogNormProb(Data As Range, Probability As Double) As Double Dim Cell As Range For Each Cell In Data Cell.Value = WorksheetFunction.Ln(Cell.Value) Next Cell LogNormProb = WorksheetFunction.Sum(Data) End Function 

我正在尝试创build一个函数来计算dynamic范围的对数正态分布。 我得到一个#VALUE错误,这是现在,不知道为什么。 感谢您的帮助。

编辑****

我道歉,这是我真正想去的地方。 我试图更新你的build议,但我仍然失去了一些东西。

 Function LogNormProb(Data As Range, Probability As Double) As Double Dim Cell As Range Dim lnRange As Variant, lnAvg As Double Dim lnStdDev As Double For Each Cell In Data lnRange = WorksheetFunction.Ln(Cell.Value) Next Cell lnAvg = WorksheetFunction.Average(lnRange) lnStdDev = WorksheetFunction.StdDev.S(lnRange) LogNormProb = WorksheetFunction.LogNorm.INV(Probability, lnAvg, lnStdDev) End Function 

一个UDF函数只能改变它所在的单元格的值 – 你的udf试图改变Data中所有单元格的值。

尝试像这样(未testing)

 Function LogNormProb(Data As Range, Probability As Double) As Double Dim vData as variant dim j as long dim k as long vData=Data.Value2 For j=lbound(vdata) to ubound(vdata) for k= lbound(vdata,2) to ubound(vdata,2) vdata(j,k) = WorksheetFunction.Ln(vdata(j,k)) Next k next j LogNormProb = WorksheetFunction.Sum(vData) End Function 

您不能更改函数中的其他单元格值。 您应该将对数正态结果存储在您汇总的variables中,输出最终值。 代码看起来像:

 Function LogNormProb(Data As Range, Probability As Double) As Double Dim Cell As Range Dim dbTotal As Double For Each Cell In Data dbTotal = dbTotal + WorksheetFunction.Ln(Cell.Value) Next Cell LogNormProb = dbTotal End Function