Средняя функция
У меня есть огромный набор данных, который обновляется каждый месяц. Я хотел бы проверить, отличаются ли новые данные от предыдущих месяцев в%.
Это выглядит так:
month name data
jan 551 2
jan 552 20
dec 553 12
jan 553 13
dec 554 9
okt 555 2
nov 555 2
dec 555 2,5
Итак, 5 имен, до 4 месяцев и разные данные пр. месяц, пр. название.
Я хотел бы сделать формулу, которая может сказать мне, если одно из имен отличается на i% по сравнению с предыдущими месяцами. Например, я хотел бы сказать, что "имя" 555 в декабре отличается на 25% по сравнению со средним для этого клиента.
Спасибо,
Андерс
Ну, я думаю, что я не слишком хорош, чтобы объясниться. Поэтому я постараюсь быть немного более ясным.
Я делаю это как функцию Excel.
Поэтому формула, которую я ищу, должна вычислять pr. Назовите средние цифры (в среднем). Это, конечно, меняется каждый месяц. И формула должна найти месячную разницу по сравнению со средней.
У меня около 2000 строк с 900 разными именами.
2 ответа
=(SUM(($A$2:$A$9=A2)*($B$2:$B$9=B2)*($C$2:$C$9))-(SUM(($B$2:$B$9=B2)*($C$2:$C$9))/SUM(--($B$2:$B$9=B2))))/SUM(($A$2:$A$9=A2)*($B$2:$B$9=B2)*($C$2:$C$9))
Это формула массива, и ее нужно вводить с помощью клавиш Control+Shift+Enter, а не просто Enter. Если ваша первая строка данных начинается с A2, эта формула переходит на D2 и заполняется до тех пор, пока у вас есть данные.
SUM(($A$2:$A$9=A2)*($B$2:$B$9=B2)*($C$2:$C$9))
Эта часть суммирует все данные с тем же именем и месяцем, что и строка, в которой вы находитесь.
(SUM(($B$2:$B$9=B2)*($C$2:$C$9))/SUM(--($B$2:$B$9=B2)))
Эта часть берет среднее (сумма / количество) всех данных с тем же именем, что и строка, в которой вы находитесь, независимо от месяца.
За декабрь 553, 12 вы получите -4,17%. Среднее значение для 553 составляет 12,5, а декабрь на 4,17% меньше среднего.
Предполагать:
avgN = average amount for customer n
currN = current (monthly) amount for customer n
delta = tolerance expressed as a decimal (.25 in your example)
Тогда формула
=abs((currN - avgN) / avgN)
вернет процентную разницу между суммой за месяц и средним. Если вы хотите проверить, превышает ли это допуск (дельта), используйте приведенное выше выражение в качестве первого аргумента if
функция рабочего листа, например
=if(abs((currN - avgN) / avgN) > delta, "tolerance exceeded", "within tolerance")
Из вашего вопроса не ясно, хотите ли вы сделать это в коде VBA или в функции рабочего листа. Если первое, то вам нужно что-то вроде этого
Sub checkTolerance()
Dim percentageChange As Double
Dim currN As Double
Dim avgN As Double
Dim delta As Double
' Set the values of the variables above from somewhere (worksheet cell, user input, etc.)
percentageChange = Abs((currN - avgN) / avgN)
If percentageChange > delta Then
' Do something when tolerance is exceeded
MsgBox "tolerance exceeded"
Else
' Do something when amount is within tolerance
MsgBox "within tolerance"
End If
End Sub