如何从 VBA 中的标准偏差计算中排除“0”值?
How do I exclude "0" values from a standard deviation calculation in VBA?
我试图从我的标准偏差计算中排除所有零值。例如,如果我的数据范围有三个数字:0、1、2,那么我只想计算 1 和 2 的标准差。
这是我当前的代码(供参考 - 我的代码的顶部用于引用某些单元格名称,这样可以正确提取后续数据):
Sub DownsideSTDVCalc()
Dim fund As String
Dim checkFund
Dim item As String
fund = Worksheets(12).Range("A2").Value
For i = 2 To 48
checkFund = Worksheets(11).Columns(i)
item = Worksheets(11).Columns(i).Cells(1, 1)
If item = fund Then
Dim values
Dim qtd
values = Worksheets(11).Range(Worksheets(11).Cells(2, i), Worksheets(11).Cells(4, i))
For j = 1 To UBound(values) - LBound(values)
values(j, 1) = values(j, 1)
Next
qtd = Application.WorksheetFunction.StDev_S(values)
Worksheets(12).Range("b2").Value = qtd
End If
Next
End Sub
例如:
Sub Tester()
Debug.Print StdDevNoZero(Selection)
End Sub
Function StdDevNoZero(rng As Range)
Dim f, addr
addr = rng.Address(False, False)
f = "STDEV.S(IF(" & addr & ">0," & addr & "))"
StdDevNoZero = rng.Parent.Evaluate(f)
End Function
我试图从我的标准偏差计算中排除所有零值。例如,如果我的数据范围有三个数字:0、1、2,那么我只想计算 1 和 2 的标准差。
这是我当前的代码(供参考 - 我的代码的顶部用于引用某些单元格名称,这样可以正确提取后续数据):
Sub DownsideSTDVCalc()
Dim fund As String
Dim checkFund
Dim item As String
fund = Worksheets(12).Range("A2").Value
For i = 2 To 48
checkFund = Worksheets(11).Columns(i)
item = Worksheets(11).Columns(i).Cells(1, 1)
If item = fund Then
Dim values
Dim qtd
values = Worksheets(11).Range(Worksheets(11).Cells(2, i), Worksheets(11).Cells(4, i))
For j = 1 To UBound(values) - LBound(values)
values(j, 1) = values(j, 1)
Next
qtd = Application.WorksheetFunction.StDev_S(values)
Worksheets(12).Range("b2").Value = qtd
End If
Next
End Sub
例如:
Sub Tester()
Debug.Print StdDevNoZero(Selection)
End Sub
Function StdDevNoZero(rng As Range)
Dim f, addr
addr = rng.Address(False, False)
f = "STDEV.S(IF(" & addr & ">0," & addr & "))"
StdDevNoZero = rng.Parent.Evaluate(f)
End Function