- •21 Платежный календарь стр. 23 Глава 21. Модель прогнозирования денежных потоков. Создание платежного календаря
- •Пример классического платежного календаря
- •Задачи автоматизации формирования платежного календаря
- •Создание платежного календаря
- •Формирование наименований статей платежного календаря
- •Заполнение платежного календаря суммами ежедневных оборотов денежных средств
- •Ввод дат и сальдо на начало дня
- •Полный цикл расчета денежных потоков
- •Создание диалогового окна с помощью функции MsgBox
- •Итоговые расчеты платежного календаря
- •Полный цикл заполнения платежного календаря
- •Сворачиванием окна Excel на все время выполнения вычислений
Заполнение платежного календаря суммами ежедневных оборотов денежных средств
Подпрограмма ЗаполнениеПлатежногоКалендаряПоДатам (рис. 21.5.) состоит из трех составляющих:
подпрограммы ФормулыЗаполненияПлатежногоКалендаря непосредственно для ввода формул, производящих расчет;
цикла For-Next для последовательного ввода рассчитанных ежедневных оборотов ДС по каждой статье в платежный календарь;
очистки содержимого области с введенными формулами промежуточных расчетов.
Критериями при выборе данных служат:
номер месяца, введенный в ячейку D2 перед началом вычислений;
номер дня выбранного месяца, вводимого циклом For-Next с помощью переменной X в ячейку ВА1, и при выполнении подпрограммы изменяющего значение от 1 до31;
наименование статьи управленческого учета, сформированных ранее в платежном календаре в диапазоне ячеек С12:С79.
Рис.21.5. Подпрограмма ЗаполнениеПлатежногоКалендаряПоДатам
Формулы расчета ежедневных оборотов денежных средств
Для ввода формул определения ежедневных оборотов денежных средств запишите макрос ФормулыЗаполненияПлатежногоКалендаря, предварительно введя следующие формулы. В ячейке ВА10 формула:
=ЕСЛИ(МЕСЯЦ(ИсхДанные!D10)=$D$2;ЕСЛИ(ДЕНЬ(ИсхДанные!D10)=$BA$1;ИсхДанные!C10;0);0) (21.5)
которая сначала определяет, соответствует ли номер месяца в дате, находящейся в ячейке D10 рабочего листа ИсхДанные номеру месяца, введенному в ячейку D2 рабочего листа ПК. При выполнении этого условия проверяется следующее условие — соответствует ли номер дня месяца этой даты номеру дня месяца, вводимого в ячейку ВА1 рабочего листа ПК. При выполнении этих условий формула возвращает наименование проводимой операции, введенной в ячейку D10 рабочего листа ИсхДанные. В противном случае формула возвращает значение 0.
Формула в ячейке ВВ10:
=ЕСЛИ(BA10=0;0;СУММ(ИсхДанные!I10:J10)) (21.6)
проверяет результат вычисления формулы в ячейке ВА10. Если результат не равен нулю, то формула суммирует значение поступления и списания денежных средств по этой операции, содержащихся в ячейках I10:J10 рабочего листа ИсхДанные. Суммирование значений доходных и расходных статей объясняется тем, что в ячейках I10:J10 значения одновременно содержаться не могут. Это должно обязательно учитываться при формировании таблицы на листе ИсхДанные, ведь иначе такая запись не будет иметь никакого смысла.
Формула в ячейке ВС12:
=СУММЕСЛИ($BA$10:$BA$5000;$C12;$BB$10:$BB$5000) (21.7)
суммирует обороты движения денежных средств в области ячеек ВВ10:ВВ5000 за номер дня месяца, введенного в ячейку ВА1 и при условии, что текст наименования статьи в ячейке С12 идентичен тексту наименования статьи в области ячеек ВА10:ВА5000.
Запись макроса заключается в последовательном вводе этих формул в диапазоны ячеек BC12:BC79, ВА10:ВА5000 и ВВ10:ВВ5000.
Рис. 21.6. Подпрограмма ввода формул определения оборотов за день по каждой статье управленческого учета
Цикл заполнения платежного календаря ежедневными оборотами движения денежных средств
Основным элементом автоматического заполнения платежного календаря ежедневными оборотами ДДС является цикл For-Next. Последовательность выполняемых циклом операций в подпрограмме ЗаполнениеПлатежногоКалендаряПоДатам (рис. 21.5.) следующая:
предварительно переменной Row (номер строки) присваивается значение 12, что соответствует номеру строки, с которой начинает формироваться текст наименований статей управленческого учета;
задается выполнение циклов от 1 до 31, что соответствует максимальному количеству дней в месяце;
переменной Х присваивается значение равное его предыдущему значению, увеличенному на единицу. Значение Х не было задано и в начале выполнения цикла оно будет равно нулю;
текущее значение переменной Х присваивается ячейке ВА1 (номер дня месяца), по которой будет производиться выборка данных ранее введенными формулами в диапазоне ячеек ВА10:ВА5000;
задается перерасчет введенных формул;
копируется содержимое диапазона ячеек BC12:BC79, формулы которых возвращают различные значения при изменении значения ячейки ВА1;
определяется ячейка в рабочей области платежного календаря с адресом на пересечении номера строки (Row) и номера столбца, равного значению 3 (столбцы А:С), увеличенному на значение переменной Х. Строка кода VBA Cells(Row, 3 + X). В эту ячейку производится вставка значений скопированного диапазона BC12:BC79. Переменная Х с каждым циклом увеличивается на единицу и происходит с каждым циклом переход на одну ячейку правее — D12. E12, F12, G12 и т.д. Переменную Row в этой подпрограмме можно не использовать, а просто указать значение 12, но так нагляднее.
