Ребята, помогите пожалуйста, написать формулу! Считаю план продаж. Есть общее количество заказов в месяц (180 шт). Нужно формулой распределить это количество по всем дням. Распределение должно быть нарастающим.
Ребята, помогите пожалуйста, написать формулу! Считаю план продаж. Есть общее количество заказов в месяц (180 шт). Нужно формулой распределить это количество по всем дням. Распределение должно быть нарастающим.reznikovavaleria99
Уточнимся: * Каждый день нужно продавать кол-во, не меньшее, чем в предыдущий день ? * Кол-во в день - всегда целое число ? * В первый день месяца кол-во = 1 или есть какое-то заданное минимальное кол-во больше 1 ?
Уточнимся: * Каждый день нужно продавать кол-во, не меньшее, чем в предыдущий день ? * Кол-во в день - всегда целое число ? * В первый день месяца кол-во = 1 или есть какое-то заданное минимальное кол-во больше 1 ?Gustav
Пожалуй, продолжу потихоньку. Мне было удобно "развернуться" не в Excel, но в таблицах Гугл, чтобы наглядно пощупать задачу, в том виде, как я ее понял. Вот какая формула у меня ПОКА получилась ("ПОКА" - потому что изыскания, скорее всего, продолжу): [vba]
[/vba] Формулу нужно ввести в ячейку A1 таблицы Гугл, после чего она сгенерирует в трёх столбцах все интересующие данные. Думаю, исходные данные (3 параметра) просматриваются в начале формулы более, чем наглядно. В Excel последних версий формулу придется слегка подправить (в основном перевести названия функций на русский). В Excel древних версий (2013 и старее) формулу придётся разобрать на части и разместить получившиеся простые формулы в нескольких соседних столбцах.
Почему выше упомянуто "ПОКА"? Потому что в общем случае сумма по второму столбцу "Кол-во в день (точное дробное)" в точности будет равна распределяемому "колвоВсего" (180 штук), а сумма по третьему столбцу "Кол-во в день (приблиз.округл.)" может отличаться от 180 на 1-2 единицы (и иногда даже больше). И вот эту разницу (положительную или отрицательную) нужно как-то АВТОМАТИЧЕСКИ распределить внутри месяца (придумать стратегию), не нарушая принципа возрастания (или, наверное, точнее - "НЕ убывания") продаж день ото дня.
Сейчас в формуле приведены такие исходные параметры (180, 30, 1), при которых сумма третьего столбца будет в точности равна общей сумме 180 (что есть хорошо и в этом случае ничего делать не надо). Такой же точной она будет и при максимальной длине месяца (180, 31, 1). А вот для месяца февраля сумма третьего столбца будет равна 179 - хоть при (180, 28, 1), хоть при високосном варианте (180, 29, 1).
Вот эту разность "180-179" и хочется научиться как-то пристраивать в третий столбец автоматически, скорректировав на 1 кол-во для одного или нескольких дней. Как я уже говорил, разность общей суммы за месяц может быть и больше единицы, например, для набора параметров (180, 31, 2).
Пожалуй, продолжу потихоньку. Мне было удобно "развернуться" не в Excel, но в таблицах Гугл, чтобы наглядно пощупать задачу, в том виде, как я ее понял. Вот какая формула у меня ПОКА получилась ("ПОКА" - потому что изыскания, скорее всего, продолжу): [vba]
[/vba] Формулу нужно ввести в ячейку A1 таблицы Гугл, после чего она сгенерирует в трёх столбцах все интересующие данные. Думаю, исходные данные (3 параметра) просматриваются в начале формулы более, чем наглядно. В Excel последних версий формулу придется слегка подправить (в основном перевести названия функций на русский). В Excel древних версий (2013 и старее) формулу придётся разобрать на части и разместить получившиеся простые формулы в нескольких соседних столбцах.
Почему выше упомянуто "ПОКА"? Потому что в общем случае сумма по второму столбцу "Кол-во в день (точное дробное)" в точности будет равна распределяемому "колвоВсего" (180 штук), а сумма по третьему столбцу "Кол-во в день (приблиз.округл.)" может отличаться от 180 на 1-2 единицы (и иногда даже больше). И вот эту разницу (положительную или отрицательную) нужно как-то АВТОМАТИЧЕСКИ распределить внутри месяца (придумать стратегию), не нарушая принципа возрастания (или, наверное, точнее - "НЕ убывания") продаж день ото дня.
Сейчас в формуле приведены такие исходные параметры (180, 30, 1), при которых сумма третьего столбца будет в точности равна общей сумме 180 (что есть хорошо и в этом случае ничего делать не надо). Такой же точной она будет и при максимальной длине месяца (180, 31, 1). А вот для месяца февраля сумма третьего столбца будет равна 179 - хоть при (180, 28, 1), хоть при високосном варианте (180, 29, 1).
Вот эту разность "180-179" и хочется научиться как-то пристраивать в третий столбец автоматически, скорректировав на 1 кол-во для одного или нескольких дней. Как я уже говорил, разность общей суммы за месяц может быть и больше единицы, например, для набора параметров (180, 31, 2).Gustav
Что ж, вроде, выстроилась формула, распределяющая по дням месяца заданное количество заказов без остатка, связанного с погрешностью округления, которая устраивает, по крайней мере, меня, т.е. находится в согласии с моими первоначальными замыслами и ожиданиями: [vba]
[/vba] Вкратце происходит следующее. Вычисляются суммы столбцов - точного и округленного. Разность между ними - кол-во несоответствия, которое нужно "как-то" распределить по дням. Для реализации этого "как-то" рассчитывается разность столбцов [точное] - [округл] по отдельным дням и по значению этой разности выполняется сортировка дней месяца. Если общее несоответствие - отрицательное, то разности сортируются по возрастанию, с учетом знака, и наоборот - если положительное, то по убыванию. После сортировки берутся номера дней месяца из нескольких первых строк отсортированного виртуального массива. Кол-во этих первых строк, заслуживающих внимания, равно кол-ву несоответствия. Для всех дней месяца, которые попали в эти несколько первых строк, выполняется коррекция округленного дневного кол-ва на единицу: если несоответствие - положительное, то "единички" добавляются, если отрицательное, то вычитаются.
ВАЖНО! Формула распределяет заказы без остатка в пределах некоторых разумных ограничений. Так при кол-ве дней в месяце от 28 до 31 и минимальном числе заказов в первый день от 1 до 5 формула успешно справляется. Если задать минимальное кол-во = 7, то последовательность хоть и посчитается, но будет она не возрастающей, а убывающей. Т.е. общий смысл этого замечания - не пытаться перепилить стальной лом японской бензопилой для лесорубов (как в известном анекдоте).
Что ж, вроде, выстроилась формула, распределяющая по дням месяца заданное количество заказов без остатка, связанного с погрешностью округления, которая устраивает, по крайней мере, меня, т.е. находится в согласии с моими первоначальными замыслами и ожиданиями: [vba]
[/vba] Вкратце происходит следующее. Вычисляются суммы столбцов - точного и округленного. Разность между ними - кол-во несоответствия, которое нужно "как-то" распределить по дням. Для реализации этого "как-то" рассчитывается разность столбцов [точное] - [округл] по отдельным дням и по значению этой разности выполняется сортировка дней месяца. Если общее несоответствие - отрицательное, то разности сортируются по возрастанию, с учетом знака, и наоборот - если положительное, то по убыванию. После сортировки берутся номера дней месяца из нескольких первых строк отсортированного виртуального массива. Кол-во этих первых строк, заслуживающих внимания, равно кол-ву несоответствия. Для всех дней месяца, которые попали в эти несколько первых строк, выполняется коррекция округленного дневного кол-ва на единицу: если несоответствие - положительное, то "единички" добавляются, если отрицательное, то вычитаются.
ВАЖНО! Формула распределяет заказы без остатка в пределах некоторых разумных ограничений. Так при кол-ве дней в месяце от 28 до 31 и минимальном числе заказов в первый день от 1 до 5 формула успешно справляется. Если задать минимальное кол-во = 7, то последовательность хоть и посчитается, но будет она не возрастающей, а убывающей. Т.е. общий смысл этого замечания - не пытаться перепилить стальной лом японской бензопилой для лесорубов (как в известном анекдоте).Gustav