2016-06-21 43 views
2

以下代码用于计算标准偏差(标准偏差/样本数)。但是,在非连续单元格上使用时,它会返回#VALUE!而不是标准错误。我试图将公式输入为数组。它以前的工作,但停止(2007至2012)移动到一个新的计算机使用Excel的新版本从Excel 2007转移到2012之后,VBA公式不起作用

Option Explicit 

Function StdErr(numbers As Range) As Double 
Dim StdDev As Double 
Dim Size As Integer 

StdDev = WorksheetFunction.StDev_S(numbers) 
Size = WorksheetFunction.Count(numbers) 

StdErr = StdDev/Sqr(Size) 
End Function 

使用公式的电子表格后,工作会像{= STDERR(A1,A3,A5 )}

+0

你是否在函数中放置了一个断点,看看哪一行出错了,可能是通过检查函数的每一行结果?如果没有,那就这样做。这会告诉你它不处理的情况,然后你可以调查任何机会到新的Excel版本并进行相应的调整。 –

回答

1

它适用于如果您使用一个连续范围,如= StdErr(A1:A5)。当你添加逗号时,它希望你传递另一个不在那里的变量。为了允许未知数量的变量,它有点棘手,你必须使用Variant。见下:

Function StdErr(ParamArray Numbers() As Variant) As Double 
    Dim StdDev As Double 
    Dim Size As Integer 


     StdDev = WorksheetFunction.StDev_S(Numbers) 
     Size = WorksheetFunction.Count(Numbers) 

    StdErr = StdDev/Sqr(Size) 
End Function 
+0

奇怪的是,这阻止了连续的工作范围。现在适用于任何不包括范围的选择,例如(A1:A3,B2,B3)或(A1:A3)都不起作用,但(A1,A2,A3)起作用 –