Excel Макрос VBA Подбор параметров в заданных границах

preview_player
Показать описание
Постановка
Есть данные по продажам за текущий год. Данные представлены в виде категорий и подкатегорий. Суммарные объемы по категориям указаны в строках (см. xsl файл с примером)
Также есть прогноз продаж по каждой категории для 2018 года, задан числом для каждой категории. Например, рост составил 54,97% (см. пример).
Задача
Необходимо для каждой подкатегории заполнить (подобрать) прогноз продаж в зависимости от входных параметров, то есть заполнить ячейки C3-C8. Необходимо сымитировать реальный разброс продаж в подкатегориях с учетом возможных диапазонов процентов и минимального их шага. Именно поэтому важно использовать рандомайзер, а не какой-либо шаблон.
Входные параметры
Входные данные должны задаваться через UserForm с полями:
- общие продажи в категории за текущий год. Выбирается одна ячейка (B2 например)
- общие продажи в категории следующий год. Выбирается одна ячейка (C2 например)
- диапазон для заполнения. Выбирается набор ячеек, по которым должно быть произведено заполнение (в нашем случае это могут быть ячейки C3-C8 или С3-С5 и С7-С8)
- проценты нижнее ограничение. Задается пользователем с клавиатуры, для нашего примера может быть 50%.
- проценты верхнее ограничение. Задается пользователем с клавиатуры, для нашего примера может быть 60%.
- минимальный шаг процентов. Задается пользователем вручную с клавиатуры. В нашем примере пусть будет 1%.
Процесс работы с программой
- Пользователь открывает файл,
- Автооткрытие UserForm,
- Пользователь заполняет поля формы и нажимает кнопку «Выполнить»,
- Программа успешно заполняет ячейки или выдает ошибку. Программа может выполняться множество раз с различными параметрами.
Алгоритм выполнения
Заполняются ячейки следующим образом: в цикле (или нескольких) необходимо подобрать такие значения в прогнозе продаж на 2018, чтобы они соответствовали входным заданным параметрам. При этом подойдет любая удовлетворяющая комбинация.
Комбинация может быть для нашего примера следующая: С3 рандомно заполняется значением прогнозных продаж за 2018, например 10,2. Важно, чтобы рост был от 50 до 60 %. Далее С4 рандомно заполняется значением, чтобы процент роста по сравнению с 2017 был от 50 до 60 процентов, но такой процент должен быть не менее чем на 1% отличаться от процента для С3.
===
Осталось сделать:
И так далее, чтобы суммарный объем по всей категории был равен значению в ячейке С2.
Рекомендации по теме