VBA编写标准偏差和范围代码

时间:2015-06-14 19:37:29

标签: excel-vba for-loop while-loop range standard-deviation

我正在尝试在VBA中编写一个函数来计算三个数字的标准偏差和范围。如果确定所有数字都是---那么功能就应该输出---作为答案。如果它们中的所有三个都不是---那么标准偏差或范围应该用剩余的数字计算,同时忽略---数字。数字由用户输入。这是我为范围和标准差计算编写的代码。通过使用内置的excel WS函数,如果它们不是数字,它已经忽略了输入,我能够绕过那个棘手的位。然而,可见,我无法让代码识别所有三个是---注册为---。

计算范围的功能-------------------------------

函数范围(ParamArray ObservedValues())

ObservedValues(i)=“---”     范围=“---” WEND

    Max = Application.WorksheetFunction.Max(ObservedValues)
    Min = Application.WorksheetFunction.Min(ObservedValues)

    Range = Max - Min

结束功能

计算标准偏差的功能(多次尝试)

第一次尝试

功能SD(ObservedValueA,ObservedValueB,ObservedValueC,ObservedMean)

如果ObservedValueA =“---”并且ObservedValueB =“---”并且ObservedValueC =“---”那么     SD =“---” 结束如果

If ObservedValueA <> "---" Then
    a = 1
    x = ObservedValueA - ObservedMean
        Else
        a = 0
        x = 1
End If

If ObservedValueB <> "---" Then
    b = 1
    y = ObservedValueB - ObservedMean
        Else
        b = 0
        y = 1
End If

If ObservedValueC <> "---" Then
    c = 1
    Z = ObservedValueC - ObservedMean
        Else
        c = 0
        Z = 1
End If

SD = Sqr((1 /(a + b + c))* x ^ 2 * y ^ 2 * Z ^ 2)

结束功能

第二次尝试

功能SD(ParamArray Number_Input())

Number_Input =“---”     SD =“---” 蜿蜒             SD = Application.WorksheetFunction.StDev(Number_Input)

结束功能

1 个答案:

答案 0 :(得分:0)

说出你的3个值来计算A1中的sd:A3

Function sd()
    Dim Val As Variant
    Val = [STDEV.S(IF(NOT(ISNA(A1:A3)),A1:A3))]
    If IsError(Val) Then
        sd = "---"
    Else
        sd = Val
    End If
End Function