В таблице 2 колонки: A - время в часах B - прибыль в $
Требуется с помощью формул вычислить и заполнить колонку C - $/час за последние n часов (например n=10)
По колонке C легко построить скользящую среднюю показателя $/час со сглаживающим интервалом n.
Пример вычисления
Чтобы вычислить значение в ячейке С10 при n=10, нужно отобрать те строки, сумма времени в которых будет не менее 10 часов. Это три строки: 8, 9 и 10. Время = 5 + 3 + 7 = 15, что больше 10. Поэтому из строки 8 нужно взять только 2 часа из 7.
Для С9 $/час = (20 + 150)/10 = 17 Для С8 $/час = (150 + 3/25*25)/10 = 15.3 И т.д.
Не получается решить задачу в общем виде. Помогите, пожалуйста.
Задача
В таблице 2 колонки: A - время в часах B - прибыль в $
Требуется с помощью формул вычислить и заполнить колонку C - $/час за последние n часов (например n=10)
По колонке C легко построить скользящую среднюю показателя $/час со сглаживающим интервалом n.
Пример вычисления
Чтобы вычислить значение в ячейке С10 при n=10, нужно отобрать те строки, сумма времени в которых будет не менее 10 часов. Это три строки: 8, 9 и 10. Время = 5 + 3 + 7 = 15, что больше 10. Поэтому из строки 8 нужно взять только 2 часа из 7.
вообще не вижу смысла в данном случае ломать голову со встроенными функциями udf очень простая [vba]
Код
Function f(v, hRng As Range, pRng As Range) For i = hRng.Rows.Count To 1 Step -1 If (s + hRng.Cells(i, 1)) >= v Then f = (t + pRng.Cells(i, 1) / hRng.Cells(i, 1) * (v - s)) / v Exit Function Else s = s + hRng.Cells(i, 1) t = t + pRng.Cells(i, 1) End If Next End Function
[/vba]
пример использования в вашем файле - в яч.C3 формула
Код
=f($E$1;$A$1:$A3;$B$1:$B3)
и тянем вниз.
вообще не вижу смысла в данном случае ломать голову со встроенными функциями udf очень простая [vba]
Код
Function f(v, hRng As Range, pRng As Range) For i = hRng.Rows.Count To 1 Step -1 If (s + hRng.Cells(i, 1)) >= v Then f = (t + pRng.Cells(i, 1) / hRng.Cells(i, 1) * (v - s)) / v Exit Function Else s = s + hRng.Cells(i, 1) t = t + pRng.Cells(i, 1) End If Next End Function
[/vba]
пример использования в вашем файле - в яч.C3 формула
Конечно, не хочется использовать громоздкое решение со множеством "ЕСЛИ()". Но если кто-то смог бы предложить более изящный вариант, то почему бы и нет?
Цитата (ikki)
вообще не вижу смысла в данном случае ломать голову со встроенными функциями
Спасибо за предложенный вариант. Но я все еще надеюсь, что кто-нибудь из формулистов, которых мы ждем, заглянет в эту тему и предложит свой вариант :). Все-таки не хочется связываться с макросами, какими бы простыми они ни были.
Цитата (Serge_007)
Не думаю что это хорошая мысль...
Конечно, не хочется использовать громоздкое решение со множеством "ЕСЛИ()". Но если кто-то смог бы предложить более изящный вариант, то почему бы и нет?
Цитата (ikki)
вообще не вижу смысла в данном случае ломать голову со встроенными функциями
Спасибо за предложенный вариант. Но я все еще надеюсь, что кто-нибудь из формулистов, которых мы ждем, заглянет в эту тему и предложит свой вариант :). Все-таки не хочется связываться с макросами, какими бы простыми они ни были.Cage
формульное решение получится громозким, придется использовать доп столбцы
Вариант с дополнительными столбцами (желательно не более одного) меня вполне устраивает. Пока удалось составить формулы для вычисления $/час (столбец D), используя дополнительный столбец с количеством используемых для вычисления строк (столбец C). Но вычислить формулами количество используемых строк пока не удалось.
Цитата (MCH)
формульное решение получится громозким, придется использовать доп столбцы
Вариант с дополнительными столбцами (желательно не более одного) меня вполне устраивает. Пока удалось составить формулы для вычисления $/час (столбец D), используя дополнительный столбец с количеством используемых для вычисления строк (столбец C). Но вычислить формулами количество используемых строк пока не удалось.Cage