|
Расчет стоимости в зависимости от объемв
|
|||
---|---|---|---|
#18+
Сижу и не могу уже две недели решить вроде бы простую задачку Задача: определить стоимость поездок за день, если известно 1) количество поездок в день 2) цена зависит от количества поездок и изменяется следующем образом: При количестве поездок от 0 до 10 – 30 руб. (ц1) При количестве поездок от 10 до 20 – 20 руб. (ц2) При количестве поездок от 20 до 30 – 10 руб.(ц3) Пытался сделать в виде таблички в Excel т.к. нужны были данные сколько потрачено за каждый день - в первом столбце дата, - во втором количество поездок совершенных в день, - в третьем – стоимость, рассчитываемая с помощью функций excel ЕСЛИ т.к. ничего путного в голову не пришло соорудил какие-то безумные формулы типа [(если кол-во поездок<10,кол-во поездок, иначе 10)*цену из первого диапазона] + [(если кол-во поездок<20,кол-во поездок - 10, иначе 20)* (если кол-во поездок>10)цену из первого диапазона, иначе 0] –т.е. если кол-во больше 10 умножаем фиксированное кол-во поездок на цену и прибавляем стоимость поездок из следующего диапазона Но так стоимость можно получить только за 1 день Вообще интуитивно вроде понятно – смотрим сколько поездок - допустим 11 и умножаем 10*ц1 + 1*ц2 , но это для одного дня, В другой день можно проехать одну поездку, но она уже будет рассчитываться как 1*ц2 , Но как с интуитивного уровня перевести в формульный вид? Еще один вариант размышлений: определяем – в какой интервал попадает кол-во поездок в день, если нам известна сумма кол-ва предыдущих поездок т.е. если сумма кол-ва = 9, а сегодня мы проехали 2, то 1*ц1+ 1*ц2 – т.е. получается что-то типа разложить на слагаемые по определенному условию (хотя опять же как это воплотить в excel не понимаю) Вообще задача довольно распространенная и называется - в общем виде - «накопительная скидка», но ее решение весьма странно Вот например ссылка на какой-то экономический учебник – там табличка: http://i-piar.net.ua/marketing/politika-skidok/ Шкала скидокНомер партииОбъем партии рубОбщая сумма закупок рубВеличина скидки за данную партию %Величина скидки за данную партию рубдо 1000 руб – 0 %170070000от 1001 руб до 3000 руб– 2 %210001700220 При общем объеме в 1700 скидка на объем 1000 руб. составляет 2 %, хотя по идее действие скидки начинается только после «преодоления» рубежа в 1000 руб. и скидка должна быть не на 1000, а на 1000-(1000-700 т.е. то что «не хватает» до «рубежа» - 300 руб. ) = 700*0,02=14 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 21:12 |
|
Расчет стоимости в зависимости от объемв
|
|||
---|---|---|---|
#18+
lowlaw, ABCD111020range1 price12112015range2 price23213010range3 price345DATE_WNUM_WSUM_W601.12.20129=$B6*$C$1-МАКС($B6-$B$1;0)*($C$1-$C$2)-МАКС($B6-$B$2;0)*($C$2-$C$3)702.12.201210200803.12.201211215904.12.2012122301005.12.2012193351106.12.2012203501207.12.2012213601308.12.201222370 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 21:45 |
|
Расчет стоимости в зависимости от объемв
|
|||
---|---|---|---|
#18+
Ну во-первых – спасибо за ответ – ваш вариант действительно гораздо короче, чем использование функций ЕСЛИ, да и видимо мне надо было вначале почитать определение скидки :) Однако хотелось бы узнать путь рассуждений, которым вы прошли и так же, обозначения что такое NUM_W и SUM_W Как я понимаю, вы вычисляете стоимость без скидки, а затем вычитает величину скидки рассчитанную как – разница цен (т.е. скидка) умноженную на - а вот тут чет-то не совсем понятно NUM_W – это нарастающее количество поездок или текущий номер поездки ? Но я могу в первый день съездить, например 11 раз, а во второй только один – но цена то на этот один уже будет другая дата поездок в день нарастающее количество стоимость поездок в день01.12.2012 9 9 =9 поездок*2002.12.2012 2 11 =1поездка*20+1поездка*1503.12.2012 11 22 =9 поездок*15+2 поездки*10 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 11:51 |
|
Расчет стоимости в зависимости от объемв
|
|||
---|---|---|---|
#18+
lowlaw, Названия NUM_W и SUM_W - произвольные NUM_W - нарастающее кол-во поездок, SUM_W - нарастающая стоимость поездок Алгоритм вычисления стоимости Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
тот-же принцип, но выглядит "нагляднее", а формулы, соответственно, длиннееСкорее всего, можно упростить. Но я пока не вижу как...ABCDE111020range1 price12112015range2 price23213010range3 price345датакол-во поездок за деньобщее кол-во поездок (считая и текущий день)стоимость поездок текущего дня601.12.20129=СУММ($B$6:$B6)=$B6*$C$1-МИН(МАКС($C6-$B$1;0);$B6)*($C$1-$C$2)-МИН(МАКС($C6-$B$2;0);$B6)*($C$2-$C$3)702.12.201211020803.12.201211115904.12.2012112151005.12.20127191051106.12.2012322351207.12.2012123101308.12.201212410 ЗЫ: пардон за "многабукаф" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 18:32 |
|
Расчет стоимости в зависимости от объемв
|
|||
---|---|---|---|
#18+
lowlawчто-то типа разложить на слагаемые по определенному условиюМожно, при желании, сделать и так. Например, как в приложенном файле. Конечно, там решение разложено по всем составляющим - можно формулы свести и избавиться от всех дополнительных столбцов. Пример же сделан для того, чтобы напомнить про использование связки ИНДЕКС(), ПОИСКПОЗ() и СМЕЩ() . С другой стороны, если вы не ограничены условием "сделать без макросов" - большинство таких задач проще решать, используя VBA... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 23:57 |
|
Расчет стоимости в зависимости от объемв
|
|||
---|---|---|---|
#18+
скукотищаlowlaw, тот-же принцип, но выглядит "нагляднее", а формулы, соответственно, длиннее ЗЫ: пардон за "многабукаф" Ого - какой приемчик с функцией "минимум" Спасибо - у меня даже мысли такой не было Как же вы находите такие простые решения? Может обучались алгоритмизации по какому-нибудь хитрому учебнику или это математическая подготовка? ps Наоборот чем больше "букаф" тем лучше ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2012, 19:47 |
|
|
start [/forum/topic.php?fid=61&fpage=87&tid=2175149]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 31ms |
total: | 154ms |
0 / 0 |