2015-06-14 116 views
0

我想寫一個函數在VBA中,將計算三個數字的標準偏差和範圍。如果所有數字都被確定爲---那麼函數應該輸出---作爲答案。如果所有三個都不是---那麼標準偏差或範圍應該用剩下的數字計算,同時忽略---數字。這些號碼由用戶輸入。以下是我爲範圍和標準偏差計算編寫的代碼。通過使用內置的excel WS函數,如果它們不是數字,它已經忽略了輸入,我可以繞過那個棘手的位。然而,正如所看到的,我一直無法讓代碼識別出所有這三種情況---註冊爲---。VBA寫入代碼的標準偏差和範圍

函數來計算RANGE -------------------------------

功能範圍(的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 = 「---」 WEND SD = Application.WorksheetFunction.StDev(Number_Input)

端功能

回答

0

說你的3個值來計算SD的是A1: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 
+0

謝謝愛德華的幫助。然而,這並不能完全解決我的問題,用戶輸入的數字並不總是按照A1:A3的順序排列,而是通常會像G4,Y2和J17那樣位於表格的隨機位置。這個計算需要對不同的單元進行多次。這就是爲什麼我寫了我的代碼,以便變量將由單元格選擇決定。 – Andrea