VBA中的“标准偏差”

时间:2019-05-17 15:31:03

标签: excel vba

我有一个包含数字的列,只想计算正数。

例如,如果数字是3、2,-1,-6、7,-4、0、10,-15,则结果应为3.20,因为计算应仅考虑3、2、7和10。

在普通Excel中,我可以这样:

STDEV.P(IF(RANGE > 0, RANGE)),然后按Control + Shift + Enter

我将如何在VBA中做到这一点?

2 个答案:

答案 0 :(得分:1)

具有正数标准(未经测试的一般演练)的较长stdev函数的示例

for i = startrow to endrow
    if cells(i,1).value > 0 then
        redim preserve arr(ubound(arr)+1)
        arr(ubound(arr)) = cells(i,1).value
        x = x + cells(i,1).value
        n = n + 1
    end if
next i

现在您已经收集了所需的所有值...

  • 平均值= x / n
  • 数组 arr 具有所有可行的值,因此您可以使用(值-平均值)^ 2 [求和]

使用您的double变量执行常规计算。


如果您可以摆脱它,就像我的评论一样,请在.FormulaArray,然后在value=value中使用现有公式,例如:

Cells(1, 1).FormulaArray = "=STDEV(IF(B2:B100>0,B2:B100))"
Cells(1, 1).Value = Cells(1, 1).Value

答案 1 :(得分:1)

你在这里。

如果您想在其他地方使用它,则可以在公式之外设置范围

Sub StandDev()

Dim ws As Worksheet, rng As Range

    Set ws = Worksheets("StandDev") 'Worksheet name
    Set rng = ws.Range("B2", "B100") 'Your range

    With Cells(1, 1) 'Cell "A1"
    .FormulaArray = "=STDEV.P(IF(" & rng.Address & "> 0," & rng.Address & "))"
    .Value = .Value 'Your formula
    End With

End Sub
相关问题