«Стандартное отклонение If» в VBA - PullRequest
0 голосов
/ 17 мая 2019

У меня есть столбец, который содержит числа, и я хочу вычислить их стандартное отклонение только для положительных чисел.

Например, если числа 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 ]

2 голосов
/ 17 мая 2019

Вот, пожалуйста.

Это позволяет вам установить диапазон за пределами формулы, если вы хотите использовать его в другом месте

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
1 голос
/ 17 мая 2019

Пример более длинной функции 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
  • Array arr имеет все допустимые значения, поэтому вы можете использовать свое (значение - среднее) ^ 2 [ваше суммирование]

Выполнить общий расчетс вашей двойной переменной.


Если вы можете сойти с рук, как и мой комментарий, используйте существующую формулу с .FormulaArray, затем value=value, например:

Cells(1, 1).FormulaArray = "=STDEV(IF(B2:B100>0,B2:B100))"
Cells(1, 1).Value = Cells(1, 1).Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...