Модель занятия в excel

Библиографическое описание:


Аминов, И. Б. Эффективности использования метода моделирования в среде Excel на практических занятиях по информатике / И. Б. Аминов, Д. Ф. Ходжаева. — Текст : непосредственный // Молодой ученый. — 2015. — № 11 (91). — С. 164-167. — URL: https://moluch.ru/archive/91/19576/ (дата обращения: 16.04.2023).

В статье рассматриваются основные вопросы, возможности и эффективности использования метода моделирования в практических занятиях по информатике в вузе. Особое внимание уделяется организации и планирование практические занятия с использованием моделирования.

Ключевые слов: моделирование, компьютерное моделирование, организация, планирование и эффективность использования метода моделирования в среде Excel.

Современное развитие информационных технологий и уровень распространения информационных технологий в высшем образовании позволяют преподавателю сегодня использовать компьютер как повседневное средство обучения. Возможности использования компьютера с его периферийными устройствами на практических занятиях огромные.

Одним из эффективных направлений использования компьютера на практических занятиях по информатике является компьютерное моделирование. Математическое моделирование и компьютерное моделирование может служить мощным средством решения различных учебных задач в практических занятиях, причём, не только познавательных, но и эвристических.

Одним из наиболее перспективных направлений использования информационных технологий в высшем образовании является компьютерное моделирование физических процессов и явлений. Рост компьютеризации вуза дает возможность каждому преподавателю использовать на своих занятиях информационные технологии, что с одной стороны, активизирует внимание студентов и усиливает их интерес к занятию, а с другой — облегчает работу студентов и преподавателя.

Компьютерные модели легко вписываются в традиционных практических занятиях, позволяя преподавателю продемонстрировать на экране компьютера многие эффекты, а также позволяют организовать новые нетрадиционные виды учебной деятельности.

Под моделью мы понимаем систему, неотличимую от моделируемого объекта в отношении некоторых свойств, которые полагают существенными, и отличимую по всем остальным свойствам, которые полагаются несущественными; при этом отсутствие в модели несущественных элементов не менее важно, чем присутствие в ней существенных.

Исходный объект и его модель понимаются как системы. Понятие системы в свою очередь предполагает: наличие элементов, ее составляющих, наличие связей между ними; целостность системы, наличие свойств и у модели и у ее объекта, которые проявляются как через отношения между элементами модели, так и через отношения с внешними объектами.

В практических занятиях по информатике модели нужны для того, чтобы:

a)                  понять сущность изучаемого объекта: какова его структура, основные свойства, законы развития и взаимодействия с окружающим миром;

b)                 научиться управлять объектом или процессом и определить наилучшие способы управления при заданных целях и категориях;

c)                  прогнозировать прямые и косвенные последствия реализации заданных способов и форм воздействия на объект;

d)                 решать прикладные задачи.

Моделирование-процесс создания и исследования модели.

Моделирование может быть связано с моделированием для других дисциплин. При этом реализуются между предметные связи, происходит обогащение информатики содержательными задачами, а конкретных наук — мощными средствами решения задач, интеграции образования в целом. Студенты видят пользу от информатики, громадную область приложения полученных при ее изучении знаний. Следовательно, повышается интерес к обучению в целом.

Моделирование играет подчиненную роль: оживить изучаемый материал. Несмотря на недостаточное владение студентам математическим аппаратом, активная опора на информационные технологии позволяет успешно применять математические знания, например, при решении математических задач. Здесь можно применять известные программные средства, такие как электронная таблица MS Excel, математические пакеты MathCAD, MathLab, Maple и др.

Информатика — предмет, в котором много внимания уделяется практическим навыкам работы в различных программных средах. Одной из таких программ является электронная таблица Excel. Она предназначена для работы с числовой информацией: представлению ее в различных форматах, вычислениями по формулам и функциям, построению разнообразных графиков и диаграмм. Именно поэтому электронные таблицы являются идеальной средой для моделирования.

В них можно построить как простые наглядно-образные модели, основанные на возможности форматирования ячеек, так и сложные вычислительные модели, основанные на умении использовать формулы и функции.

Применение электронных таблиц на занятиях по информатике может сократить время при проведении однотипных расчетов, например при выполнении практических и лабораторных работ, где требуется рассчитывать одни и те же математические величины для нескольких опытов.

Использование электронных таблиц Excel на практических занятиях по информатике обусловлено следующими причинами:

а)     функциональные возможности программы Excel заведомо перекрывают все потребности по автоматизации обработки данных эксперимента, построению и исследование моделей;

б)     универсальная программа Excel обладает стандартным интерфейсом;

в)     изучение Excel предусматривается программами общего образования по информатике, следовательно, возможно эффективное использование Excel в условиях осуществления межпредметных связей с информатикой и другими учебными дисциплинами, например, с математикой;

г)     данная программа отличается доступностью в изучении и простотой в управлении, что принципиально важно как для ученика, так и для учителя;

д)     результаты деятельности на рабочем листе Excel (тексты, таблицы, графики, формулы) «открыты» пользователю.

Программные средства Excel обладает едва ли не самым богатым инструментарием для работы с графиками. Excel позволяет с использованием приемов автозаполнения представлять данные в табличной форме, оперативно их преобразовывать с использованием огромной библиотеки функций, строить графики редактировать их практически по всем элементам, увеличивать изображение какого-либо фрагмента графика, выбирать функциональные масштабы по осям, экстраполировать графики и т. д.

Цель практического занятия с использованием метода моделирования в информатике является, показать применение программного средства для решения задач, совершенствовать навыки составления математических моделей, проверить умение студентов выделять свойства объекта, существенные для решения задачи.

Моделирование начинается со знакомства с новым материалом, с новыми понятиями. Затем описывается процедура проведения занятия. План практического занятия с использованием метода моделирования по информатике состоит из следующих этапов:

1.                  Повторение основных этапов решения задачи на компьютере.

2.                  Решение задачи на моделирование в среде Excel с подробным разбором.

3.                  Решение задачи.

4.                  Обучающая практическая работа на закрепление навыков составления модели.

5.                  Подведение итогов занятие.

В начале практического занятия вводится понятие моделирование, место моделирования в деятельности человека, основные этапы моделирования, понятие компьютер-

ного эксперимента.

При организации учебной деятельности студентам сочетаются различные методы. При выборе и сочетании методов обучения преподавателю информатики необходимо руководствоваться соответствием методов целям и задачам обучения и каждого конкретного занятия.

Процесс разработки моделей и их исследования на компьютере можно разделить на несколько основных этапов:

—                   постановка задачи;

—                   оценка имеющейся информации и выбор плана создания модели;

—                   создание модели;

—                   проверка адекватности модели;

—                   получение решения задачи с помощью модели.

Рис.1.

Особенности построения моделей для электронной таблицы, построение математических моделей. Построение модели рассматривается по схеме (рис.1.).

Занятия построены таким образом, что начальные задания содержат подробный алгоритм выполнения, и студенты шаг за шагом проходят все этапы компьютерного моделирования от постановки задачи до анализа полученных результатов. Затем студенты выполняют индивидуальные задания, закрепляя теоретический материал. Приобретенные студентами знания и практические навыки компьютерного моделирования позволят им в дальнейшем профессионально совершенствоваться в среде новых компьютерных технологий.

Моделирование может быть также связано с моделированием собственных, внутренних объектов информатики: редакторов, исполнителей. При этом происходит логическое завершение курса информатики. Это ведет к уверенности в собственных силах, закреплению интереса к информатике, прочности знаний. Таким образом, достигаются общеобразовательные цели, формируется компьютерная образованность.

Проведение интегрированных занятий и использование метода моделирование на практических занятиях по информатики предоставляет большие возможности для формирования навыков математического моделирования, позволяющего расматривать различные варианты развития исследуемого процесса и выбрать альтернативную стратегию поведения, что обеспечит в будущей профессиональной деятельности нахождение согласованного решения в сложной, противоречивой ситуации.

Хорошо подготовленная и организованная занятия раскрывает связь между разными идеями, отражает альтернативные точки зрения, рассматривает все объяснения фактов, сомнения в достоверности выводов, а также занятия мотивирует дальнейшее обучение. Студенты самостоятельно формулируют, обосновывают и выражают идеи и представления, самостоятельно постигает ведущие понятия и идеи, при помощи анализа, синтеза, обобщения материала вырабатывает ценностные суждения о методах, решениях, идеях.

Таким образом, использования метода моделирование в среде Excel на практических занятиях по информатики в сочетании с принципом деятельности повышает интерес к знаниям, позволяет облегчить процесс их усвоения, способствует развитию познавательного интереса и активизации учебно-познавательной деятельности студентов.

Литература:

1.                  Королев А. Л. Компьютерное моделирование. –М.: Бином, 2010.

2.                  О. К. Мясникова. Моделирование и формализация в курсе информатики. // Информатика и образование, № 11–2003.

3.                  Мартышко В. И. Компьютерное моделирование экономических задач на занятиях информатики. // Проблемы информатики в образовании, управлении, экономике и технике: Сб. статей Междунар. научно-техн. конф.– Пенза: ПДЗ, 2010. — С. 165–167.

Основные термины (генерируются автоматически): занятие, компьютерное моделирование, информатик, моделирование, модель, практическое занятие, Решение задачи, электронная таблица, высшее образование, математическое моделирование.

Государственное бюджетное
образовательное учреждение
города Москвы школа № 2114

Mетодическая разработка на тему
«Интерактивное обучение школьников на примере урока информатики в 9-м классе
по теме «Моделирование в
Excel»

Выполнила:
учитель информатики
ГБОУ школа № 2112
Гребеник
Марина Эдуардовна

г. Москва

2018

«Знание только тогда знание, когда оно приобретено 
усилиями своей мысли, а не одной памятью.»

Л.Н.Толстой

Аннотация.

Продуктивный урок сегодня должен
формировать не только глубокие и прочные знания, но и умение их самостоятельно
добывать, использовать в различных ситуациях, формировать опыт решения проблем.
Получение наилучших результатов при решении данных вопросов возможно на
интерактивном уроке, то есть на уроке, который стимулирует познавательный
интерес, раскрепощает личность ребенка, позволяет проявить его творческие
способности, помогает установить тесный психологический контакт между учителем
и учеником.

Целью данной
методической разработки является
анализ и обобщение методических особенностей урока в
системе интерактивного обучения на примере урока информатики в 9-м классе по
теме «Моделирование в
Excel»». Данная методическая
разработка создана в качестве примера, показывающего как можно активизировать
мыслительную деятельность учащихся. Любой учитель-предметник может и
cпользовать данную методическую
разработку для создания своего аналогичного урока.

Содержание

1.     
Введение
………………………………………………………………………………………………………………4

2.     
Интерактивное
обучение школьников на примере урока информатики в 9-м классе по теме
«Моделирование в
Excel»
……………………………………………………………………………….6

2.1.   Цели и задачи методической
разработки
……………………………………………………………6

2.2.   Условия эффективности
использования данной методической разработки …………6

2.3.   Перспективы использования
методической разработки в массовой практике ……..7

2.4.   Рекомендации другим педагогам
по использованию данного методического пособия
……………………………………………………………………………………………………………..7

2.5.   Описание урока
…………………………………………………………………………………………………7

2.5.1.    
Особенности
данного урока
………………………………………………………………………7

2.5.2.    
Предварительная
работа по подготовке к занятию …………………………………….8

2.5.3.    
Постановка
задачи
…………………………………………………………………………………….8

2.5.4.    
Используемый
наглядный материал
………………………………………………………….8

2.5.5.    
Ход
занятия ………………………………………………………………………………………………9

3.     
Заключение
…………………………………………………………………………………………………………….13

4.     
Литература
……………………………………………………………………………………………………………..15

5.     
Приложения
………………………………………………………………………………………………………….16

5.1.   Приложение
1………………………………………………………………………………………………….16

5.2.   Приложение 2
………………………………………………………………………………………………….18

5.3.   Приложение 3
………………………………………………………………………………………………….19

  1. Введение

Мир, в котором мы
живем, предельно сложен, но в то же время органичен и целостен. Чтобы понимать
его, зачастую недостаточно знаний, полученных в школе.

Мы живем в
динамичном, постоянно обновляющемся мире, и обществе, в котором происходит
стремительное нарастание больших объемов информации, как научной, развивающей,
несущей что-то новое, так и не имеющей отношения к получению новых знаний, а
порой и вредоносной.

Чтобы система
образования в таких условиях была эффективной, она должна обеспечивать
подготовку подрастающего поколения к жизни и деятельности в быстро меняющемся
мире, то есть должна занимать активную позицию по отношению к проблемам и
перспективам развития общества в целом. В результате переосмысления и
переоценки сложившейся практики обучения и воспитания должен быть достигнут
эффект в подготовке выпускников, которые будут занимать активную жизненную
позицию в быстро меняющемся мире и будут готовы к преодолению противоречий,
которые этот мир в себе таит.

Чтобы достичь
такого результата, необходимо научить школьников мыслить. Успешное развитие мышления происходит тогда, когда обучение
организовано системно, и если оно само логично.

Известно, что существуют две линии обновления системы
образования: предметная и надпредметная. Если предметная область предполагает
знания внутри самого предмета, то надпредметная область задает иную плоскость,
а именно: определенные знания и умения, которые требуются в современном мире
при работе с информацией – ее поиску, анализу, выявлению достоверности, умению
выделять нужный источник и т.д. Эти две линии обновления системы образования
очень зависят друг от друга. Но, если работа в предметной области предполагает
четкие знания внутри самого предмета, то работа в надпредметной области
пронизывает весь процесс образования.

 

В течение многих
лет учителя преподавали разрозненные дисциплины, не выделяя никакой связи между
ними. Ирина Димова, первый заместитель главного редактора «Учительской
Газеты» пишет: «Если учитель двигается только в рамках своей узкой
предметной парадигмы, то у него нет возможности перспективного развития в
новом, ХХ
I веке». Сегодня есть
надежда, что ситуация кардинально изменится с введением в школе новых
стандартов общего образования. Продуктивный урок сегодня должен
формировать не только глубокие и прочные знания, но и умение их самостоятельно
добывать, использовать в различных ситуациях, формировать опыт решения проблем.
Наилучших результатов при решении данных вопросов позволяет достичь
интерактивный урок – урок, стимулирующий познавательный интерес, раскрепощающий
личность ребенка, позволяющий проявить его творческие способности, помогающий
установить тесный психологический контакт между учителем и учеником.

В ходе интерактивного урока ребенок осваивает сразу два типа содержания –
содержание предметной области и деятельность. Таким образом, интерактивный урок
в образовании – это своеобразная машина по удвоению производительности труда в
рамках того же самого учебного времени. Кроме того, включение ребенка в разные
типы деятельности связано с анализом своеобразных способов действия каждого
конкретного ребенка, что создает условия для его личностного роста.

На интерактивном
уроке реализуются следующие преимущества

1.     
Получаемое
знание не является запоминанием фактов из учебных пособий, а есть продукт
собственного мышления.

2.     
Самостоятельная
постановка вспомогательных исследовательских задач

3.     
На
занятии строится прототип научной коммуникации между самими учащимися и между
учащимися и преподавателями.

4.     
Интересная
задача и форма проведения занятия являются источником повышенной мотивации

5.     
Возможность
верификации собственных решений на эксперименте.

В настоящее время на первый план выходят не сами знания, а
способность, возможность и знание о том, где и как их применять. Но еще важнее
– знание о том, как нужную информацию добывать, интегрировать или создавать.
Любое знание состоит частично из «информации» («чистое знание») и частично из
«умения». Умение – это способность использовать имеющиеся сведения для
достижения своих целей. Как научить детей умениям и навыкам мышления,
необходимым при исследовании различных задач, методам поиска и обработки
найденной информации для решения этих задач?

Данная разработка на примере конкретного урока дает ответы на
эти вопросы.

2.      Интерактивное обучение
школьников на примере урока информатики в 9-м  классе по теме «Моделирование в
Excel».

2.1. Цели и задачи методической разработки.

Целью данной
методической разработки является
анализ и обобщение методических особенностей урока в
системе интерактивного обучения на примере урока информатики в 9-м классе по
теме «Моделирование в
Excel»».

Задачи:

·        
описать организацию урока, на котором ученик поставлен в условия поиска,
заблуждений, радостных открытий и огорчений от временных неудач;

·        
показать,
что на уроке возможна социализация детей путем работы с учебным
материалом, который применим в конкретной жизненной ситуации;

·        
привести
пример урока, который продуман таким образом, что поставленные цели
подразделяются на ряд учебных задач, решаемых учащимися совместно или
самостоятельно.

2.2. Условия эффективности использования данной методической
разработки.

Для эффективного использования данной методической разработки
необходимо выполнение некоторых условий. А именно:

·        
необходимо создать комфортные
условия на уроке, при которых ученик чувствует свою успешность, свою
интеллектуальную самостоятельность, что делает продуктивным сам процесс
обучения;

·        
между учащимися должен
происходить активный  обмен знаниями, идеями, способами деятельности;

·        
необходимо поставить задачу, которая
позволяет не только получать новые знания, но и развивать саму познавательную
деятельность;

·        
все участники процесса
обучения должны проявлять терпимость к любой точке зрения;

·        
в зависимости от задачи и
ситуации возможно применение индивидуальной, групповой и парной работы;

·        
возможно использование
ролевых игр, исследовательских проектов и других форм реализации данной
методики

·        
требуется соблюдать регламент
и процедурные вопросы (распределение функций, соблюдение правил).

2.3. Перспективы использования методической разработки в
массовой практике.

Как для учеников, так и для учителя,
урок интересен и результативен только тогда, когда он современен в самом
широком понимании этого слова. Современный — это и совершенно новый, и не
теряющий связи с прошлым (традиционным), одним словом – актуальный.

Данная методическая разработка создана как пример того, как
можно активизировать мыслительную деятельность учащихся, разрабатывая
актуальные уроки. Любой учитель-предметник может и
cпользовать данную методическую
разработку для создания своего аналогичного урока.

2.4. Рекомендации другим педагогам по использованию данного
методического пособия.

Взять на вооружение методику проведения уроков
такого типа проще всего тем учителям, у которых есть компьютерный класс или
возможность использования компьютерных классов в процессе учебной работы.

Особое внимание при проведении таких уроков надо
обращать на то, чтобы активность всех детей была равномерной, чтобы сильные
ученики не брали решение всех проблем на себя, чтобы слабые ученики тоже имели
возможность высказать свою точку зрения.

2.5. Описание урока.

2.5.1. Особенности данного урока.

На уроке происходит поиск решения проблемы на основе
конкуренции. Класс делится на группы, каждая из которых решает проблему
по-своему и обосновывает свой выбор.

Тема
урока: «Моделирование в
Excel»

Класс:
9-й

Способ
организации: класс или подгруппа

Продолжительность:
2 академических часа для гимназического класса; 3 академических часа для
общеобразовательного класса.

2.5.2. Предварительная работа по подготовке к занятию.

Чтобы интерактивный урок прошел успешно, необходимо провести
предварительную подготовку, как учителю, так и учащимся.

Подготовительная
работа учителя:

·        
четкая и
однозначная формулировка задачи, которую предстоит решать;

·        
разработка
таблицы, которую необходимо будет заполнять в процессе работы;

·        
разработка
карточек-вопросов для повторения;

·        
разработка
схемы-подсказки

·       
подготовка
ватмана, фломастеров, карандашей для оформления и защиты учащимися проектов.

Предварительная
подготовка учащихся:

·       
умение
работать с поисковыми системами и грамотно формулировать запрос;

·       
знание
основных встроенных функций
Excel;

·        
умение работать
с формулами;

·       
знание
отличий относительной и абсолютной адресации.

·        
умение
составлять и записывать формулы с использованием относительных и абсолютных
ссылок

2.5.3. Постановка задачи.

Школе выделено 250000 рублей для оборудования школьного
компьютерного класса на 12 учащихся. Используя прайс-лист реальной фирмы
(искать в интернете), скомплектовать компьютерный класс для школы. Кроме
ученических компьютерных мест в компьютерный класс должны входить: АРМ учителя
(компьютер, принтер, сканер), проектор и экран. Школа заключит контракт с той
фирмой, которая предложит наиболее выгодное предложение в соотношении «цена –
качество». Решение задачи представить в виде электронной таблицы (образец дается).

2.5.4. Используемый наглядный материал

·        
Карточки
для повторения пройденного материала по
Excel, который необходим для решения поставленной задачи (абсолютные,
относительные ссылки; работа с формулами).- Приложение 1.

·        
Образец
таблицы, которую надо заполнить — Приложение 2:

·        
Карточка-подсказка
Приложение 3:

·        
Презентация
к уроку.

2.5.5. Ход занятия

В начале урока необходимо повторить пройденный материал,
который будет использоваться при работе на уроке. Повторение можно организовать
двумя способами:

·  
раздать
карточки для индивидуальной проверки знаний и готовности учащихся к работе
(Приложение 1);

·  
организовать
повторение, формулируя вопросы в презентации и заслушивая ответы отдельных
учеников.

Работа по карточкам займет больше времени, но будет более
эффективна для проверки готовности учащихся к уроку. Второй способ сэкономит
время, но меньше активизирует мозговую деятельность учащихся.

После повторения можно начинать основную часть урока.

Для того чтобы больше заинтересовать учащихся и увеличить их активность
в процессе выполнения задания, они делятся на три равноценных по знаниям
группы. Каждая группа представляет собой конкурирующую фирму, которая должна
будет решить задачу лучше остальных. Приветствуется выполнение творческого
задания: придумать название и логотип фирмы.

Сильные ученики, которые есть в каждой группе, назначаются
генеральными директорами фирм. Перед уроком с «руководителями фирм» проводится
консультация по необходимым вопросам. Им рассказывается суть урока и их права:
они могут давать технические подсказки по работе с поисковыми системами и
таблицами
Excel, должны выслушивать все
предложения и их обоснования, но не решать задачу за остальных членов
коллектива.

Курс доллара:   ?

Наименование

Требуемое
количество

Цена в руб.

Цена в $

Стоимость

?

?

?

?

?

?

?

?

?

?

Сумма            ?

Остаток в долларах    ?

Остаток в рублях      ?

            Образец таблицы, которую надо заполнить.

            Курс
доллара определяется с помощью поисковой системы. В столбец «Наименование»
записывается компьютерная техника, выбранная для компьютерного класса.
Конкретными значениями заполняются только два столбца: требуемое количество и
цена в рублях. Значения в оставшихся столбцах (где стоят знаки «?»)
рассчитываются по формулам, которые оставляют сами учащиеся.

Поиск решения проблемы на основе конкуренции фирм показан на
схеме 1.

Схема 1. Поиск решения проблемы на
основе конкуренции фирм

Если говорить о способах решения проблемы, то можно
рассмотреть два варианта:

1.     
Обсуждение
в группе и принятие оптимального решения.

2.     
Индивидуальный
поиск каждого члена группы и сравнение найденных результатов.

Каждая группа сама решает, какой способ будет использоваться
для работы. Поскольку, попадая в проблемную ситуацию, ученик не только
анализирует ее, но и вырабатывает свою собственную точку зрения по вопросу; не
исключается возможность использования нового способа решения задачи,
выработанного группой. Появление своей точки зрения в проблемной ситуации и
превращение ее в позицию представляет собой процесс самоопределения. В такой
ситуации сценарий урока потребует корректировки.

            После определения способа действия учащиеся
внутри каждой группы должны сделать правильный выбор технических средств для
школьного компьютерного класса в соответствии с показателями цены и качества
(Схема 2). Кроме того, у каждого из членов группы есть поисковая система, с
которой привычнее работать. При использовании сценария коллективной работы, по
этому вопросу тоже может возникнуть дискуссия.

  1. ПК
  2. Моноблок
  3. Ноутбук

 

1.     
Проектор+экран

2.     
Интерактивная доска

 

1.     
Оптимальный запрос

2.     
Оптимальная поисковая система

 

 

Схема 2. Варианты выбора

В процессе попытки решить проблему учащиеся ведут дискуссию в
группах под руководством «генеральных директоров фирм», но под наблюдением
педагога. При необходимости учитель направляет обсуждение в нужное русло.

После того, как фирмы разработали прайс-листы, начинается
обсуждение проблемы и дискуссия между «представителями фирм». В этой дискуссии
участвует учитель. В процессе обоснования и попытки доказать оптимальность
своего выбора, фирмы формулируют проблемы и дают способы ее решения.

            В результате такого урока формулируется проблема
правильного выбора. На данном уроке ребенок учится отстаивать свою собственную
точку зрения, обоснованно доказывая преимущества своего выбора.

            С точки зрения деятельностного подхода на занятии
происходит процесс взаимодействия между самими детьми и детьми и учителем. На
уроке разворачивается реальная деятельность ребенка и взрослого. Слова и
информация – это то, что поддерживает деятельность, но ни в коем случае не
заменяет ее. Деятельность, осуществляемая на занятии ребенком совместно со
взрослым, и выступает осваиваемым содержанием образования.

3.     
Заключение

На уроке учащимся предлагалось задание, в котором они должны
были с одной стороны, использовать свои знания, полученные по данной теме, а с
другой – работать с информацией, используя логическое мышление, изобретая и
осваивая новые способы работы, как в предметной, так и в надпредметной
областях. Урок показал, что краткая и ясная формулировка задачи ориентировала
учащихся на употребление определенного способа работы, и была понята детьми
однозначно. В процессе урока необходимо было создать условия для того, чтобы
ученик начал рефлексировать собственный процесс работы.

Интерактивный урок основывался на групповой работе учащихся,
в которой сталкивались их суждения по проблемному вопросу. Для того, чтобы эти
столкновения были плодотворными, учащимся необходим был высокий уровень
понимания друг друга в живой коммуникации. В процессе работы они должны были
усвоить сложную технику видения одного и того же предмета одновременно с разных
позиций.

Методические особенности обучения на данном уроке
определялись, в первую очередь, деятельностным подходом. С точки зрения
деятельностного подхода на занятии происходила не столько передача информации,
сколько процесс взаимодействия между самими детьми и детьми и учителем. Слова и
информация – это то, что должно поддерживать деятельность, но ни в коем случае
не заменять ее. Деятельность, осуществляемая на занятии ребенком совместно со
взрослым, и выступала осваиваемым содержанием образования.

Анализ урока показал, что
практически все участники оказались вовлеченными в процесс познания и имели
возможность понимать и рефлексировать по поводу своих  знаний и возможностей
участия в дискуссии, аргументации и защиты своей позиции. В процессе дискуссии
был востребован субъективный опыт учащихся, и формировалась их личностная
позиция.

Интерактивный 
урок позволил ощутить успех от достижения результатов, и, как следствие, повысить
свою самооценку. Такие уроки несут и воспитательную нагрузку: учащиеся должны
были проявлять терпимость к любой точке зрения, ребята сопереживали успехам
своих товарищей, столкнулись с проблемой справедливого распределения полученных
призовых баллов, и, наконец, просто получили удовольствие от урока.

На интерактивном уроке уже большая часть
учебной деятельности отошла к ученикам, а учитель при этом играл роль
наблюдателя, вмешиваясь только в случае, если процесс обсуждения становился
неуправляемым.

Такая форма и организация урока привели к тому, что некоторые
учащиеся раскрыли себя с совершенно неожиданной стороны. Отстаивая свою
собственную точку зрения, обоснованно доказывая преимущества своего выбора,
ученики приобретали опыт публичного выступления. В результате такого урока была
сформулирована проблема правильного выбора.

4.      Литература.

1.     
Глазунова
О.И. Метапредмет как способ введения учащихся в культуру работы с проблемами. 
http://1314.ru/problem

2.     
М.В.
Дарган  Работа с информацией как один из важнейших аспектов обновления
содержания образования. Новые педагогические технологии, Москва, Центр
«Школьная книга», 2015 г.

3.     
П.А.
Климов Метапредметы как средство формирования понятийного аппарата физики.
«Новые педагогические технологии». Москва, Центр «Школьная книга» 2015

4.     
Л.С. Яблонская 
Использование задачной формы обучения в преподавании русского языка и
литературы http://nsportal.ru/shkola/russkii-yazyk/library/statyaispolzovanie-zadachnoi-formy-obucheniya-v-prepodavanii-russkogo-y

5.     
Мыследеятельностная
педагогика http://metodpresscentr.ru/blog/innovatika/1281.html

6.     
Новые
педагогические технологии. Москва, Центр «Школьная книга», 2016 г.

5.      Приложения.

5.1.     Приложение 1

Карточка 1

Относительная ссылка в Excel это-
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Абсолютная  ссылка в Excel это- ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Смешанная  ссылка в Excel это-
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Как при вводе формулы указать
абсолютный адрес ячейки?
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Правила  ввода формулы в ячейку.
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Как заполнить формулами
интервал ячеек?
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Карточка 2

1.  
D1 = (A2+B1-C1).

A

B

C

D

1

1

3

4

2

4

2

5

3

3

1

2

Ответ:
в ячейке
D1 значение ___________

2.  
Значение в ячейке С3
электронной таблицы

A

B

C

1

3

9

=В2+$A$1

2

7

15

3

3

45

4

=C1-C2

Ответ:
в ячейке С3 значение ______

3.  
Значение в ячейке С1
заменили на 7. В результате этого значение в ячейке D1 автоматически
изменилось на 11.

A

B

C

D

1

3

4

8

2

3

2

5

3

7

1

2

1)  записана формула В1+С1
2)  при любом изменении таблицы значение увеличивается на 3
3)  записана формула СУММ(А1:С1)
4)  записана формула СУММ(А1:А3)

4.   Значение ячейки С1 вычисляется по формуле
=В1+$A$1

A

B

C

1

3

2

5

2

7

1

3

4

4

  Ответ: в ячейке С3 значение ______

5.2.                      
Приложение
2

Курс доллара:   ?

Наименование

Требуемое
количество

Цена в руб.

Цена в $

Стоимость

?

?

?

?

?

?

?

?

?

?

Сумма            ?

Остаток в долларах    ?

Остаток в рублях      ?

5.3.                      
Приложение
3

1.     
ПК

2.     
Моноблок

3.     
Ноутбук

 

1.     
Проектор+экран

2.     
Интерактивная доска

 

1.     
Оптимальный запрос

2.     
Оптимальная поисковая система

 

 

Занятие 1 по финансовому моделированию


В начале занятия чуть ниже по тексту предлагаем Вам скачать пример финансовой модели,
разработке которой мы здесь обучаем.

Занятие 1. Общая организация финмодели, шкала времени и периоды.

Первое занятие курса обучения финансовому моделированию либо можно посмотреть в формате видео-урока, размещенного
на нашем канале»MNGMNT.RU-Управление ВСЕМ» в YouTube, и выложенного здесь в ниже следующем окне, либо прочитать
в данном разделе после видеоролика.

Внимание! При просмотре видео-урока рекомендуем настроить качество картинки на формат HD (1080p).

Для удобства восприятия занятия 1 скачивайте итоговый EXCEL-файл первого урока по финансовому моделированию
в ниже следующей синей рамке.

СКАЧАТЬ


ИТОГОВЫЙ EXCEL-ФАЙЛ ПЕРВОГО УРОКА ПО ФИНМОДЕЛИРОВАНИЮ

Далее на этой странице мы размещаем материал занятия 1 в печатном виде со множеством иллюстраций, а прежде того скачивайте пример финмодели, к которой мы в итоге
придем, а также смотрите видео-инструкцию о том, как устроена эта финансовая модель в целом, ну и наконец-таки в путь!

СКАЧАТЬ


УНИВЕРСАЛЬНАЯ ФИНАНСОВАЯ МОДЕЛЬ ИНВЕСТПРОЕКТА

Итак приступаем к обучению…

Разработку финансовой модели мы будем реализовывать в Excel с нуля, для чего создаем пустой файл Excel с расширением xlsx:

Пустой Excel-файл для будущей финансовой модели

Каждый эксель-файл представляет из себя совокупность листов, по этой причине эксель-файлы еще называются книгами.
Ярлычки листов эксель-файла расположены в нижней строке и для добавления нового листа книги Excel, достаточно либо нажать на «+»
в нижней строке, справа от ярлычка последнего листа

добавление очередного листа в книге Excel

в результате чего появится очередной лист в книге Excel

лист 2 в книге Excel

либо для добавления нового листа книги Excel достаточно навести мышку на тот лист, перед которым
Вы желаете вставить новый лист xlsx-книги, нажать на правую кнопку, после чего в появившемся меню нажать на «Вставить…»

вставка нового листа в книге Excel

и далее нажать на «Ок»

подтверждение вставки нового листа в книге Excel

и, тем самым, еще один лист эксель-книги добавлен

очередной лист 3 в книге Excel

Листы эксель-файла состоят из двумерного массива ячеек, где каждая ячейка однозначно задается двумя координатами:
по горизонтали номером строки, по вертикали буквой или буквами латинского алфавита.

В ячейки можно вручную вносить текст или числовые данные, а также можно вписывать формулу, значение которой
рассчитывается и отображается внутри этой ячейки, причем аргументами такой формулы могут выступать другие ячейки из
этого листа или любого другого листа эксель-файла.

Поскольку нас интересует моделирование в Excel, а именно финансовое моделирование, поэтому мы будем
разделять все ячейки и листы нашего Excel-файла на те, которые предназначены для задания вручную исходных данных нашего
бизнес-проекта, например, прайс-листы, на те, в которых производятся различные финансово-экономические и прочие расчеты
нашей финмодели, например, динамика продаж, на те, в которых формируются отчеты и рассчитываются показатели эффективности
нашего предприятия или бизнес-проекта, например, финансовый поток и его внутренняя норма доходности IRR, а также на те,
которые служат различным техническим целям, например, выпадающие списки или справочники статей доходов и расходов.

Обычно количество листов (или как еще их называют – «вкладки») в Excel-файле финансовой модели достаточно большое –
и все они служат тем или иным целям в рамках общей логики построения финмодели. При этом для удобства пользования моделью,
а также для максимальной устойчивости финансовой модели важно, чтобы все эти вкладки были настроены в едином стиле,
что и будет по сути содержанием настоящего занятия.

Итак, назовем первый лист нашего xlsx-файла с будущей финансовой моделью «START», для этого достаточно дважды
щелкнуть на ярлычек первого листа, либо навести на него мышку и нажав на правую кнопку, выбрать опцию «Переименовать»

переименование листа в книге Excel

получаем переименованный лист «START»

лист START в книге Excel

Да, кстати, чтобы не было так скучно, подкрасим ярлычек вкладки START, например, в фиолетовый цвет,
для этого наводим курсор мышки на ярлычек листа, нажимаем на правую кнопку, наводим мышку на опцию «Цвет ярлычка» и
выбираем квадратик с необходимым цветом, в нашем случае с фиолетовым

подкрашивание листа в другой цвет в книге Excel

имеем подкрашенный в фиолетовый цвет ярлычек листа START нашего файла

подкрашенный лист в книге Excel

Теперь приступим к общим настройкам листа эксель-файла с нашей будущей финмоделью.

Как хорошо видно на картинках, границы всех ячеек листов в Excel всегда по умолчанию выделены в виде серых линий,
образующих сетку листа. Нам это не требуется, и мы удалим эту сетку, точнее сделаем так, чтобы визуально она не присутствовала,
для этого необходимо кликнуть на кнопку «Файл» в верхнем левом углу окна Excel’я.

кнопка Файл книги Excel

Далее в появившемся меню нажать на кнопку «Параметры»

кнопка Параметры книги Excel

и выбрать опцию «Дополнительно»

Дополнительные Параметры книги Excel

С использованием правой вертикальной прокрутки находим параграф «Параметры отображения листа»,
где находим пункт «Показывать сетку» и снимаем «галочку», т.е. деактивируем сетку выделения ячеек листа

Деактивация сетки листа книги Excel

нажимаем на «Ок» и видим, как сетка исчезла

лист без сетки выделения ячеек книги Excel

Теперь задаем для всего листа общий шрифт и его размер, а также формат отображения данных в ячейках.
Для выделения всех ячеек листа или просто для выделения всего листа достаточно нажать курсором мыши на верхний левый
угол активной области листа, как показано на рисунке

выделение всех ячеек листа книги Excel

после чего в меню «Главная» мы оставляем шрифт «Calibri» (он нас вполне устраивает), а его размер меняем с 11-ого,
который идет по умолчанию, на 10-тый, что приводит к чуть более компактному отображению листа

выбор размера шрифта для всего листа книги Excel

Часто можно встретить финансовые модели, где основной размер шрифта выбирается равным 8-ми,
но мы считаем, что это слишком мелко и усложняет работу с финмоделью, поэтому мы за то, чтобы продумывать
само по себе устройство организации модели изначально более эффективно.

Оставляя лист выделенным, нажимаем на правую кнопку мыши и в появившемся меню выбираем опцию «Формат ячеек…»,
после чего в закладке «Число» выбираем формат «Числовой» с параметрами «0» десятичных знаков после запятой и проставленной
галочкой напротив «Разделитель групп разрядов ()»

выбор числового формата с разделителем разрядов для всего листа книги Excel

То есть все ячейки листа будут отображать числовые значения в виде чисел с разделителями разрядов и без
знаков после запятой. Позже если потребуется, то мы специально для отдельных ячеек листа и их блоков будем указывать
необходимые форматы, отличные от выбранного нами единого формата по умолчанию.

Целиком стандартный лист Excel-книги можно сказать бесконечен как по вертикали (более 1 миллиона строк),
так и по горизонтали (более 16 тысяч столбцов) относительно той его части, которую мы можем наблюдать через монитор компьютера.
Поэтому обычно для удобной работы с файлом финансовой модели при переходах между листами, крайне удобным является закрепление
некоторых вертикальных и горизонтальных областей листа, которые не смещаются при вертикальной и горизонтальной прокрутках листа.
Причем эти закрепленные части листов служат также некоторым важным техническим целям организации работы с финмоделью, о которых мы расскажем далее.

В качестве горизонтальной закрепленной области листа мы возьмем блок строк с 1-ой по 14-тую, причем строки с 1-ой по 10-тую
будем рассматривать, как технические, их высоту зафиксируем равной 9-ти, для этого выделим первые десять строк, нажимаем на правую
кнопку мыши и в появившемся меню нажимаем на «Высота строки» и в появившемся окне вписываем высоту, равную 9-ти

изменение высоты строк листа книги Excel

Далее оставляем выделение этих 10-ти строк и в меню «Главная» меняем размер шрифта для этих строк с 10-ти на 8-мь

изменение размера шрифта закрепленных строк листа книги Excel

а также меняем цвет шрифта с черного на светло серый, чтобы технические записи в закрепленных первых 10-ти строках
не бросались в глаза, поскольку, как мы ранее сказали, они будут носить исключительно технический характер

изменение цвета шрифта закрепленных строк листа книги Excel

Отделим эти 10 строк от остальных серой пунктирной линией, для чего необходимо, например, выделить 10-тую и 11-тую строки,
нажать на правую кнопку мыши, выбрать опцию «Формат ячеек…» и в появившемся окне в закладке «Граница» выбрать стиль границы
(в нашем случае пунктирный), цвет и расположение, как показано на рисунке:

добавление границы между ячейками листа книги Excel

Размер высоты строк для оставшихся 4-рех строк закрепляемой области, а именно для строк с 11-той по 14-тую устанавливаем, равным 12-ти

изменение размера шрифта дополнительных закрепленных строк листа книги Excel

и отделим 14-ую строку от остальных, идущих ниже строк, пунктирной светло серой границей по аналогии,
как выше были разделены строки 10 и 11, тем самым, верхняя горизонтальная область для закрепления готова

вид закрепленных строк листа книги Excel

Переходим к вертикальной закрепленной зоне. Выделим пять первых столбцов с «A» по «E»
(далее буквенные названия столбцов будем без кавычек указывать – просто, например, A и E) и установим их ширину, равной 2,78,
для этого по аналогии с тем, как мы меняли высоту строк, нажимаем на правую кнопку мыши, выбираем опцию «Ширина столбца…»
(обязательно при выделенных столбцах) и так далее

изменение ширины столбцов листа книги Excel

Также, как и для первых 10-ти срок, задаем размер шрифта в столбцах A-E равным 8-ми и цвет шрифта задаем светло серым,
поскольку здесь тоже у нас будут технические параметры финансовой модели. Столбцы E и F отделяем пунктирной светло
серой границей и получаем следующий вид нашего файла

разметка области закрепления листа книги Excel

Но закреплять мы будем не эту область, а чуть шире по столбцам. Дело в том, что основной набор вкладок
финансовой модели в Excel обычно имеет структуру, где шкала времени распространяется слева направо и причем
достаточно далеко может уходить вправо по естественному ходу столбцов, т.е. каждый столбец, начиная с некоторого стартового,
соответствует очередному стандартному расчетному или отчетному периоду, например, очередному месяцу финмодели или кварталу.
Поэтому для этих целей мы наперед сразу определимся, что шкала времени у нас будет начинаться со столбца AA, и тогда закреплять
мы будем по вертикальному направлению все столбцы, начиная со столбца A и заканчивая столбцом Y, так чтобы столбец
Z разделял вертикально закрепленную зону финмодели от зоны, где простирается шкала времени.

И для того, чтобы закрепленная вертикальная зона не занимала более 60-70% экрана мы для столбцов с F по Z определим их ширины следующим образом:

столбцы F,G,H – зададим ширину, равную 1;

11-ть столбцов с I по S – зададим ширину, равную 7;

и наконец для 7-ми столбцов с T по Z зададим ширину, равную 1.

Между столбцами Y и Z, равно как и между столбцами Z и AA, проведем пунктирную светло серую границу и посмотрим, что получилось в итоге:

разметка листа книги Excel

Теперь наша задача закрепить зону строк с 1-ой по 14-ую и одновременно зону столбцов с A по Y, так чтобы при перемещении
курсора по ячейкам листа вниз или вправо указанные зоны оставались неподвижными. Для этого необходимо выполнить последовательно
следующие действия: наводим курсор мыши на ячейку Z15, в верхнем меню выбираем закладку «Вид», в появившемся верхнем горизонтальном
меню нажимаем на опцию «Закрепить области» и выбираем там первую строчку «Закрепить области», как показано на рисунке

закрепление области листа книги Excel

Итак, наш лист разбит на функциональные зоны, которые нам теперь следует наполнить тем содержимым, которое будет
отображаться для каждого листа нашей будущей финансовой модели.

Почти квадратную зону в левом верхнем углу с координатами A1-E10 мы используем под логотип нашего проекта
MNGMNT.RU – Управление ВСЕМ, причем картинку с логотипом превратим в гиперссылку, так чтобы при нажатии на него
открывался наш сайт. Для того чтобы это сделать, необходимо навести курсор мыши на картинку, нажать на правую кнопку,
выбрать в появившемся меню «Гиперссылка…» и в окне с параметрами гиперссылки в строке «Адрес» внести адрес нашего сайта
https://mngmnt.ru, а также, нажав на кнопку «Подсказка», указать текстовое
сообщение, которое будет отображаться при наведении мышки на картинку еще до активации гиперссылки с помощью нажатия левой
кнопки мыши, в нашем случае мы напишем «Переход на сайт проекта MNGMNT.RU — Управление ВСЕМ».

создание гиперссылки на сайт с помощью картинки на листе книги Excel

Как мы уже упоминали, эксель-файлы с финансовой моделью обычно содержат немалое количество вкладок,
у каждой из которых свое предназначение. И сейчас мы как раз-таки займемся формированием будущей структуры этих вкладок –
пропишем названия соответствующих листов, сформулируем кратко их роль и создадим набор «кнопок» с гиперссылками,
при нажатии на которые можно будет перемещаться по этим вкладкам. Ну, а созданные кнопки в свою очередь аккуратно разместим
в закрепленных зонах листа, для того чтобы у нас внутри файла с будущей финмоделью была максимально удобная навигация.

Во-первых, начнем с уже созданной нами вкладки START, ее основной функцией является методологическое описание разрабатываемой
нами финансовой модели. Так и запишем.

начало формирования списка листов эксель-файла финмодели

Во-вторых, важнейшим компонентом любой профессиональной финансовой модели должна быть система контроля за корректностью
в самых различных срезах финмодели. Такая система контроля должна пронизывать всю финмодель «вдоль и поперек».
Мы обычно для этого создаем отдельный лист (назовем его «Cntrl») в эксель-файле разрабатываемой финансовой модели,
который собирает в себя со всех вкладок соответствующие контроли в единый список, после чего из вкладки Cntrl единый «флажок»
контроля всей модели (объединяющий все контроли) целиком «раздается» в каждый лист финмодели в одно и то же место закрепленной
области – в нашем случае это будет ячейка D14 каждой вкладки. Ниже мы еще не раз коснемся в нашем курсе обучения финансовому
моделированию более подробного описания организации системы контроля, здесь же, забегая вперед зафиксируем лишь только то,
что строка 14 нашей закрепленной области будет отдана полностью, т.е. во всех вкладках под систему контроля финансовой модели.

Таким образом, вторым листом нашего xlsx-файла будет являться вкладка с названием Cntrl, ярлычек которой мы,
когда придет время, окрасим в красный цвет, сигнализирующий о повышенном внимании к данной вкладке.

вкладка общего контроля в списке листов эксель-файла финмодели

Следующий блок листов финансовой модели содержит 28 перечисленных ниже листов с их кратким описанием:

Periods – лист, в котором задаются минимальный период расчетов финмодели, горизонт моделирования в
количестве минимальных периодов расчета, период фактических данных, а также временной шаг итоговой управленческой отчетности финансовой модели;

Lists – здесь задаются все выпадающие списки;

Macro – вкладка, предназначенная для внесения всех необходимых для расчетов финмодели
исходных прогнозных макропоказателей, характеризующих внешнюю финансово-экономическую конъюнктуру;

Items – здесь задаются все оборотно-сальдовые статьи, которые будут использоваться в управленческой отчетности,
а также их комбинации, в случае если будет иметь место сложная многоуровневая иерархия статей;

KPI – список ключевых показателей эффективности финмодели, включающая в себя коэффициенты
классического финансово-экономического анализа и основные показатели инвестиционного анализа;

Mrkting – вкладка для оцифровки рынков сбыта, каналов привлечения клиентов, формирования заказов, формирования доходов и т.п.;

CapEx – здесь формируется календарный план-график капитальных затрат;

Sales – лист моделирования продаж или бюджета доходов финмодели;

Prdction – данная вкладка предназначена для моделирования производственных процессов в виде технологических карт;

HR – лист предназначен для формирования штатного расписания бизнес-проектов или предприятий;

Exp – моделирование расходной части финансовой модели, не включающей себестоимостные затраты,
прямые производственные расходы, а также ФОТ, осуществляется в этом листе;

Credits – вкладка отображения кассовых разрывов и расчета внешних источников
финансирования вместе с их всевозможными условиями по предоставлению, возврату и выплате процентов;

PL – формирование итогового управленческого отчета о прибылях и убытках;

CF – формирование итогового управленческого отчета о движении денежных средств;

BS – формирование итогового управленческого баланса бизнес-проекта;

MAIN – данная вкладка является главным итоговым листом финансовой модели,
в котором сведены все ключевые показатели бизнес-проекта, характеризующие с разных сторон
уровень эффективности и коммерческой целесообразности реализовывать моделируемый бизнес-проект;

PLd –здесь формируется детализированный управленческий отчет о прибылях и убытках;

CFd – здесь формируется детализированный управленческий отчет о движении денежных средств;

BSd – здесь формируется детализированный управленческий баланс финмодели;

Sens – анализ чувствительности бизнес-проекта к изменениям предпосылок моделирования;

UnitEc – расчет экономики, нормированной на одну продажу, на один заказ, на одну единицу продукции и т.п., т.е. расчет юнит-экономики бизнес-проекта;

Cfind – формирование и анализ финансового потока косвенным методом;

FinEcAn – проведение финансово-экономического анализа бизнес-проекта путем расчета всех коэффициентов, характеризующих смоделированную деятельность;

InvAn – проведение комплексного инвестиционного анализа финансовой модели проекта;

EBITDA – проведение комплексного анализа собственной операционной деятельности;

Rep – формирование всей управленческой отчетности предприятия в одном листе на основе листа с детализированной отчетностью Repd;

Repd — формирование всей управленческой отчетности предприятия в максимально детализированном виде в одном листе на основе листа
с функционалом финмодели Calc;

Calc – вкладка с функционалом финансовой модели, здесь производятся все без исключения расчеты финмодели,
из которых потом формируются все остальные листы с результатами.

список ключевых вкладок эксель-файла финмодели

Достаточно часто при разработке финансовой модели того или иного бизнес-проекта оказывается,
что сам проект уже стартовал и по нему были произведены по факту различные финансово-хозяйственные операции,
которые в том числе были учтены, например, в бухгалтерском учете 1С. В такой ситуации обычно требуется включить
в финмодель факт прошлых периодов для того, чтобы видеть картину бизнес-проекта в целом. Поэтому добавим к нашим
30-ти вкладкам еще 8-мь вкладок, из которых 3 отведем под учет факта прошлых периодов,
а остальные 5-ть рассмотрим в качестве резервных листов.

список дополнительных вкладок эксель-файла финмодели

Здесь вкладки «Fact», «1S» и «Rules» будут предназначены соответственно для учета фактических операций
в рамках финансового моделирования нашего бизнес-проекта, для выгрузок данных о фактических операциях из 1С или
каких-либо других учетных бухгалтерских программ и для прописания правил сопоставления выгруженной из 1С информации
статьям доходов, расходов и т.п. Остальные пять «зеленых» вкладок будут резервными.

Пожалуй, что 38-ми листов для формирования нашей будущей универсальной финансовой модели будет вполне достаточно.
Перейдем теперь к вопросам организации навигации по листам нашей финмодели.

В Excel’е можно легко создать кнопки, при нажатии на которые Вы будете перемещаться по листам эксель-файла
в точности также, как это происходит при нажатии на ярлычки листов в нижней строке Excel. Это бывает удобным,
а иногда и крайне необходимым для эффективной работы с файлом финмодели, когда вкладок много и большая часть
из них не помещается на экране и для перехода в необходимый лист необходимо сдвигать нижнюю панель с ярлычками
влево для поиска необходимого листа справа. А созданные кнопки можно удобно разместить в закрепленной зоне листов модели,
так чтобы все они были всегда перед глазами. Сделаем это.

Начнем с того, что создадим 28-мь кнопок для 28-ми «синих» вкладок, представляющих основу финансовой модели,
(см. изображение выше со списком «синих» вкладок), которые разместим в верхней закрепленной области листа,
между 1-ой и 10-той строками, а также правее логотипа MNGMNT.RU, т.е. правее столбца E, и до столбца Z,
так чтобы не вылезать за пределы закрепленной области листа.

Нарисуем фигурку нашей будущей типовой кнопки передвижения по листам Excel-файла финансовой модели.
Для этого выберем фигуру из набора фигур, который мы обнаружим, если нажмем на кнопку «Вставка» верхнего меню Excel
и далее на кнопку с набором фигур для выбора необходимой для вставки фигуры, как показано на рисунке:

выбор фигуры для вставки в лист эксель-файла финмодели

После выбора фигуры курсор мышки превратится в крестик, который необходимо навести на то место в листе,
где ориентировочно планируется вставить фигурку для будущей кнопки, после чего нажатием на левую кнопку мышки фиксируем
положение фигурки и, не отпуская левую кнопку, двигаем мышку так, чтобы фигурка проявилась на листе и приняла нужный размер:

вставка фигуры в лист эксель-файла финмодели

Наводим мышку на выделенную фигурку и нажимаем на правую кнопку, в выпавшем меню выбираем пункт «Формат фигуры…»
(обычно он в самом низу этого меню) и справа появится панель «Формат фигуры»

панель формата фигуры в EXCEL

Для того, чтобы наша фигурка выглядела, как кнопка, выберем для нее градиентную заливку темно синего цвета, как показано ниже на рисунке

выбор градиентной заливки фигуры в EXCEL

Границу фигурки окрасим в темно синий цвет сплошной линией с шириной, равной 3пт, см. рисунок:

окрашивание и выбор ширины линии границы фигуры в EXCEL

Фигурка нашей будущей кнопки перехода на другой лист финмодели примет следующий вид

окрашенная фигурка для настройки кнопки в EXCEL

Теперь добавим текст с названием того листа, на который мы будем перемещаться при нажатии на эту фигурку – «Periods»,
для этого наводим мышку на фигурку, нажимаем, как обычно, на правую кнопку и выбираем в выпавшем меню опцию «Изменить текст»,
ну и пишем название необходимого нам листа – «Periods». Формат текста производим посредством выделения фигурки с текстом и нажатия
на опцию «Главная» в верхнем меню EXCEL-файла, где размер шрифта выбираем равным 10, начертание выбираем «полужирным» и, наконец, цвет – белым:

формат надписи фигурки с названием листа кнопки в EXCEL

С учетом того, что вкладок у нас 28-мь, и их всех нужно разместить в верхней закрепленной области листа,
дополнительно настроим размер фигурки так, чтобы она стала чуть более компактной, для этого нажимаем на правую кнопку
наведенной на фигурку мышки, и опять выбираем опцию «Формат фигуры», и в появившейся справа панели редактирования фигуры
выбираем последовательно раздел «Параметры фигуры», подраздел «Размер и свойства»/«Размер», где устанавливаем высоту и ширину
фигурки соответственно равными 0,5 и 1,5 см:

изменение размеров фигурки кнопки в EXCEL

В подразделе «Размер и свойства»/«Свойства» выбираем опцию «Не перемещать и не изменять размеры»,
как показано ниже на рисунке – это необходимо для того, чтобы при любых манипуляциях со столбцами наши кнопки
с гиперссылками на листы финмодели оставались на своих местах и не меняли размеры:

изменение свойств фигурки кнопки в EXCEL

В подразделе «Размер и свойства»/«Надпись» центрируем надпись по периметру фигурки и зануляем
все поля внутри фигурки – верхнее, нижнее, левое и правое поля устанавливаем, равными 0 см:

изменение расположения надписи фигурки кнопки в EXCEL

В результате наша фигурка имеет следующий вид:

вид фигурки кнопки EXCEL после форматирования

Отлично, фигурка у нас есть, а кнопку из нее делаем с помощью закрепления за ней гиперссылки на будущий
лист нашего Excel-файла разрабатываемой финансовой модели. И этот самый будущий лист с названием «Periods»
создадим пока что фиктивно (чуть позже объясним, почему фиктивно).

фиктивный лист Periods финмодели

Наводим мышку на фигурку «Periods», выделяем фигурку, нажимаем на правую кнопку мыши, где в появившемся
меню жмем на опцию «Гиперссылка». В появившемся окне «Вставка гиперссылки» в левой панели нажимаем на опцию «Место в документе»,
выбираем только что созданный лист «Periods» и пишем в строке «Введите адрес ячейки:» ссылку на ячейку F15, вместо A1,
листа с названием «Periods», как ниже показано на рисунке, а также, нажимая на кнопку «Подсказка…» в правом верхнем углу этого окна,
в появившейся строке «Подсказка для гиперссылки» делаем запись «Периоды и горизонты моделирования фактических и прогнозных данных»,
чтобы она потом отображалась при наведении мышки на кнопку перед нажатием на нее.

кнопка - установка на фигурку гиперссылки на лист EXCEL

Проверяем активность созданной нами кнопки с гиперссылкой на вкладку «Periods»,
наводя мышку на кнопку и нажимая на нее – оказываемся во вкладке «Periods» — Работает!

Теперь вернемся к вопросу о фиктивности созданного нами листа «Periods», о чем мы сказали чуть ранее.
Дело в том, что нам необходимо создать более 30-ти листов в нашем эксель-файле будущей финмодели, при этом нам необходимо,
чтобы во всех вкладках в их закрепленных областях была одна и та же структура кнопок с навигацией по финмодели, а это значит,
что при создании каждой следующей вкладки желательно, чтобы она создавалась посредством копирования заранее подготовленной
«эталонной» вкладки с распределением закрепленных зон и системой навигационных кнопок, которой к настоящему моменту еще нет,
т.е. мы ее еще не создали. Но при этом гиперссылки на кнопки нужно устанавливать уже сейчас, когда, с другой стороны нашего
противоречия, мы находимся в состоянии отсутствия необходимых листов, а, следовательно, невозможно настроить гиперссылки.

Получается некоторое противоречие, которое решается следующим путем, суть которого заключается в эксперименте,
который Вы можете с легкостью проделать и сами.

Если Вы переименуете или вообще удалите лист «Periods», после чего нажмете на кнопку с гиперссылкой на лист
с названием «Periods», то появится маленькое окошечко, в котором будет написано «Недопустимая ссылка», т.е. ссылка не работает.

недопустимая ссылка на лист EXCEL

А теперь создайте новый лист, назовите его «Periods» и опять нажмите на кнопку с гиперссылкой «Periods».
Что мы видим? Мы оказались на вновь созданном листе с названием «Periods».

То есть вывод такой, что гиперссылка не привязана к конкретному листу, она привязана к названию. А значит мы будем
создавать кнопку за кнопкой, но при этом, чтобы настраивать соответствующие гиперссылки для каждой очередной кнопки
мы будем один и тот же фиктивный лист каждый раз переименовывать для настройки очередных гиперссылок.

Следующая кнопка, которую создаем – это кнопка обеспечивающая переход на вкладку «Lists»,
где будут сосредоточены все выпадающие списки нашей будущей финансовой модели. Наводим мышку на кнопку «Periods»,
нажимаем на левую кнопку и в появившемся меню нажимаем на «Копировать»

копирование кнопки с гиперссылкой на лист EXCEL

Создаем новую кнопку, меняем ее название на «Lists» и выравниваем ее расположение по отношению к кнопке «Periods»

кнопка Lists с гиперссылкой на лист EXCEL

Теперь чтобы кнопка стала гиперссылкой на вкладку «Lists», переименовываем наш заранее созданный фиктивный лист с названия «Periods» на название «Lists»

переименование фиктивного листа для новой гиперссылки

Наводим мышку на кнопку «Lists», нажимаем на правую кнопку мыши и выбираем из выпавшего меню опцию «Изменить гиперссылку…».
В появившемся окне «Изменение гиперссылки» в левой панели видим, что выбрана опция «Место в документе», выбираем вкладку «Lists» и пишем
в строке «Введите адрес ячейки:» ссылку на ячейку F15, вместо A1, нашего фиктивного листа с названием «Lists», как ниже показано на рисунке,
а также, нажимая на кнопку «Подсказка…» в правом верхнем углу этого окна, в появившейся строке «Подсказка для гиперссылки»
меняем запись «Периоды и горизонты моделирования фактических и прогнозных данных» на новую, соответствующую новой кнопке,
«Выпадающие списки финансовой модели», чтобы она потом отображалась при наведении мышки на кнопку «Lists» перед нажатием на нее мышкой.

настройка гиперссылки на вкладку Lists с выпадающими списками финмодели

Выделяем две созданные нами кнопки, копируем их ниже и выравниваем, после чего проделываем по аналогии,
соответствующие этим двум новым кнопкам «Macro» и «Items», описанные выше процедуры настройки гиперссылок,
в результате чего получаем следующий вид нашего стартового листа и эксель-файла с финмоделью в целом (заметим,
что фиктивный лист теперь имеет название последней созданной кнопки – «Items»):

настройка кнопок Macro и Items навигации финмодели

И так далее, путем последовательного копирования кнопок и настройки гиперссылок для каждой следующей кнопки,
мы создаем верхнюю панель навигации, состоящую из 28-ми синих кнопок, разрабатываемой финансовой модели в EXCEL, и имеющую следующий вид:

верхняя навигационная панель финмодели

Теперь при создании новых листов финансовой модели, все они будут иметь одну и ту же типовую навигационную панель,
при нажатии на кнопки которой можно будет удобно перемещаться по тематическим блокам модели.

Формирование закрепленной зоны в строках с 1-ой по 10-тую мы на некоторое время завершаем и переходим далее.
В 11-той строке мы разместим название листа и заголовок листа, отражающий его содержание. Название листа мы поместим в ячейку F11,
где оформим его отображение с помощью прямой формулы на ячейку в листе «START», в которой название листа впервые появляется в финмодели.
Формула в ячейке F11 будет иметь следующий вид:

=START!I25

прямая формула со ссылкой на ячейку с названием листа

Синтаксис прямой ссылки на ячейку листа таков, что сначала идет название листа, потом восклицательный знак,
после чего координаты ячейки (название столбца и номер строки). В случае если бы название листа с восклицательным
знаком отсутствовало, то при копировании этой формулы в другой лист, формула бы ссылалась на соответствующую ячейку
в новом листе, но не на лист START, как нам необходимо, поэтому при указании конкретного листа в формуле, как у нас,
формула всегда будет указывать на нужный нам лист START.

Ячейку F11 с названием текущего листа форматируем так, чтобы шрифт был 8пт, полужирный и темно синего цвета:

формат ячейки с названием листа в заголовке

В ячейку I11 по аналогии подтягиваем краткое описание предназначения листа из столбца K при помощи формулы «=START!K25»
и форматируем ячейку I11 так, чтобы шрифт был полужирным и темно красного цвета, а также его размер остался 10пт – это у нас будет заголовок листа.

формат ячейки с заголовком листа финмодели

Строку 12 мы сейчас пропустим, но потом еще вернемся как к ней, так и к строке 11, дело в том,
что в расчетных и отчетных вкладках нашей финансовой модели в этих строках, начиная со столбца AA, а также
в столбце X будут отображаться даты начала и конца периодов, но об этом чуть позже.

В 13-той строке будем указывать названия столбцов листа или заголовки, например, как показано ниже на рисунке:

оформление заголовков столбцов листа финмодели

Следующая строка 14 у нас отводится под формирование системы контроля финансовой модели, в нее на каждом листе
будут стекаться все контрольные «точки» листа и далее, суммируя их по всей 14-той строке, начиная от столбца F и завершая
столбцом PL (это столбец, на котором будет заканчиваться шкала времени расчетов финмодели), сумма будет отображаться в ячейке E14,
т.е. в ячейке E14 мы прописываем формулу:

=сумм($F14:$PL14)

А для самой 14-той строки настраиваем условное форматирование таким образом, что если в какой-либо из
ее ячеек появляется число не равное нулю, то эта ячейка окрашивается в ярко красный цвет с полужирным белым шрифтом,
при такой настройке форматирования пользователь финмодели сразу заметит, что произошло что-то не так – обнаружит наличие ошибки.

условное форматирование контрольной строки листа финмодели

Также шрифт 14-той строки выберем равным 8-ми, полужирным и отцентрируем по горизонтали текст в ячейках.

Когда мы создадим вкладку «Cntrl», мы достроим систему контроля финансовой модели в целом, и читателю будет
понятен задуманный нами механизм контроля. А сейчас переходим к настройке кнопок для перехода на оставшиеся листы:
«START», «Cntrl» и восемь «зеленых» листов, в том числе для отражения фактических операций.

Кнопки для перехода на листы «START» и «Cntrl» мы создаем абсолютно также, как и предыдущие
28-мь кнопок верхней панели, и располагаем их на уровне 12-той и 13-той строк левой вертикальной закрепленной области:

создание кнопок для стартового и контрольного листов финмодели

С оставшимися «зелеными» кнопками проделываем тоже самое и выкладываем их на левой закрепленной области листа, ниже 15-той строки.

В завершение типовой базовой настройки листа мы, начиная с ячейки A15 и ниже (например, до 70-той строки), пропишем в ячейках формулу

=строка()

которая отображает в ячейках номер строк, в которых они находятся – это нам далее потребуется для некоторых
технических моментов. А также настроим такое общее условное форматирование на весь лист, при котором если в ячейке
отображается нулевое значение или просто стоит ноль, то шрифт этих ячеек будет автоматически иметь светло серый цвет –
это способствует тому, чтобы визуализация листа, на котором много нулевых значений, была комфортна для восприятия.

Итак, наш типовой лист имеет следующий вид:

типовой базовый формат листов финмодели

Стартовая часть нашего занятия завершена, в оставшейся части занятия мы настроим еще три вкладки нашей будущей
финансовой модели, а именно вкладки «Cntrl», «Periods» и «Lists».

Создаем последовательно три копии нашего листа «START». Для этого наводим курсор мышки на ярлычок листа START,
нажимаем на правую кнопку мыши и в появившемся меню выбираем опцию «Переместить или скопировать…»

начало создания копии листа финмодели

В появившемся окне «Переместить или скопировать» выбираем лист перед которым необходимо вставить копию вкладки «START»,
а также обязательно ставим галочку напротив «Создать копию»:

создание копии листа финмодели

Меняем название вновь созданного листа с «START (2)» на «Cntrl», цвет ярлычка вкладки «Cntrl» меняем на ярко красный,
а также в этом новом листе «Cntrl» меняем цвет линии границы кнопки «START» с красного на синий, а у кнопки «Cntrl» с синий на красную,
и перенастраиваем ссылки в ячейках F11 и I11 с 25-той строки вкладки «START» на 26-тую, где прописана информация с названием листа
и его заголовком для вкладки «Cntrl». Также очищаем от всего содержимого листа «START» в «теле» листа – например путем протягивания
или копирования строки 20 на все нижележащие до строки 62. Итого получаем следующий вид вкладки «Cntrl»:

вид контрольного листа финмодели

Теперь создаем еще две копии контрольного листа и создаем заготовки для вкладок «Periods» и «Lists»:

формирование структуры вкладок финмодели

Лист «Cntrl» пока что «отложим в сторону» и приступим к настройке вкладки «Periods».

Вкладка «Periods» предназначена для задания шкалы времени финансового моделирования, т.е. здесь пользователю необходимо позволить задавать

— момент или дату старта расчетов финансовой модели;

— минимальный временнОй шаг или период учета с целью детализации принадлежности финансово-хозяйственных операций по дате их реализации;

— горизонт моделирования в количестве минимальных периодов учета и расчетов;

— периодизацию отчетности;

— горизонт учета фактически произведенных операций.

Для начала настроим вертикальную разметку столбцов листа «Periods».

Договоримся о том, что все показатели в финансовой модели будут иметь не более, чем трехуровневую структуру,
и отведем под нее столбцы H, I и J; столбец Q будет служить для задания пользователем финмодели тех или иных исходных данных;
столбец X будет являться итоговым столбцом по отношению к столбцам детализирующим расчеты и отчеты модели в рамках блока столбцов,
начинающихся со столбца AA и далее до последнего периода детализации расчетов; и наконец остальные столбцы пока что сделаем по ширине,
равными 1, чтобы иметь возможность потом их использовать, под различные новые цели моделирования.

вертикальная разметка столбцов вкладок финмодели

Далее настроим условное форматирование строк, начиная с 16-той, в зависимости от того уровня, на котором находится рассматриваемый показатель.

Выделяем ячейки H16, I16, J16, и настраиваем
условное форматирование в соответствии со следующим набором правил
форматирования в зависимости от комбинаций содержимого этих ячеек.

Правило 1. Показатель верхнего уровня. Условие: первая
ячейка не пустая, остальные две пустые.

Формула: =И($H16<>»»;$I16=»»;$J16=»»)

Формат: заливка светло серая, шрифт полужирный, верхняя
граница светло серая, нижняя граница серая. См. изображение:

правило форматирования строки с показателем верхнего уровня

Правило 2. Показатель второго уровня. Условие: первая и
вторая ячейки не пустые, третья пустая.

Формула: =И($H16<>»»;$I16<>»»;$J16=»»)

Формат: только окрашивание нижней границы в светло серый
цвет. См. изображение:

правило форматирования строки с показателем второго уровня

Правило 3. Показатель третьего уровня. Условие: все три
ячейки не пустые.

Формула:
=И($H16<>»»;$I16<>»»;$J16<>»»)

Формат: шрифт серый, нижняя граница пунктирная и окрашена в
светло серый цвет. См. изображение:

правило форматирования строки с показателем третьего уровня

В дополнение к указанным правилам, для комфортного
восприятия введем еще два правила, согласно которым для показателей второго и
третьего уровня шрифт ячеек, находящихся в первом и соответственно во втором
столбцах, в которых повторяются названия показателей предыдущей строки, будем окрашивать
в белый цвет, а также у этих ячеек будем удалять отображение нижней границы. В
итоге если мы скопируем теперь так настроенную 16-тую строку ниже на следующие
несколько строк и впишем для примера какие-либо записи показателей, то формат
получившихся ячеек будет иметь следующий вид:

вид системы форматирования строк с названиями показателей

В финансовой модели крайне важным является визуальное
разделение ячеек со значениями на ячейки, в которые пользователь задает
исходные данные, и на те ячейки, в которых отображаются результаты различных
расчетов. Мы обычно в своих финмоделях выделяем ячейки с исходными данными
путем отображения слева от них красной звездочки, а также мы эти ячейки
закрашиваем в светло синий цвет и выделяем их границу в виде темно синей
пунктирной линии. Цвет шрифта у ячеек с исходными данными окрасим в темно синий
цвет.

Причем заметим, что ячейки с исходными данными можно
разделить в свою очередь тоже на два типа – это ячейки, в которые пользователь
может задать любые исходные значения вручную, и ячейки, в которых исходные значения
задаются только из выпадающего списка тех значений, которые разрешены для
такого типа ячейки. Для ячеек, значения которых вносятся только из выпадающих
списков, мы справа от них (в дополнение к красной звездочке слева) будем
ставить галочку темно синего цвета, чтобы визуально отличать такие ячейки от
остальных.

вид ячеек с исходными параметрами финмодели

Вкладка «Lists»
как раз-таки в нашей финмодели предусмотрена для задания в ней всех выпадающих
списков, которые только могут нам понадобиться в модели.

Первый исходный параметр, необходимый нам для финансового
моделирования, это «минимальный период расчетов», который может принимать,
например, такие значения, как день, неделя, месяц, квартал, год. То есть для
этого параметра нам необходим выпадающий список, который мы и разместим во
вкладке «Lists» в
качестве первого выпадающего списка финмодели.

Поместим наш выпадающий список возможных «минимальных
периодов расчетов» в столбец I во вкладке «Lists»,
как показано ниже на рисунке

выпадающий список минимальных периодов расчетов финмодели

Чтобы данный выпадающий список заработал во вкладке «Periods», перейдем в нее и,
во-первых, в ячейке H16
введем прямую ссылку на заголовок выпадающего списка, находящегося во вкладке «Lists», в ячейке I13 – формула «=Lists!$I$13».

название выпадающего списка финмодели

И, во-вторых, настроим сам выпадающий список на ячейку Q16, для чего нажимаем на
опцию «Данные» в верхнем горизонтальном меню EXCEL-файла, выбираем кнопку «Проверка данных» и там еще раз
нажимаем на «Проверка данных…»

настройка проверки данных ячейки

В появившемся окне «Проверка вводимых значений» в закладке
«Параметры» выбираем тип данных «Список» и в строке источник прописываем
формулой («=Lists!$I$16:$I$22») ссылку на блок ячеек во вкладке «Lists», где находятся
значения выпадающего списка «минимальный период расчетов».

настройка выпадающего списка на ячейку

В результате при наведении на ячейку с настроенным на нее
выпадающим списком и нажатием на появившуюся кнопку справа от этой ячейки,
получаем выпадающий список значений, из которых выбираем необходимый нам для
финансового моделирования стандартный период:

выпадающий список периодов расчета

В связи с произведенной операцией по настройке выпадающего
списка легко отметить некоторые нюансы, которые в будущем могут для нашей
работы с финансовой моделью обернуться известными проблемами.

Если в ячейку с настроенным на нее выпадающим списком, при
помощи операции копирования вставить какое-либо значение, не совпадающее с
допустимыми значениями списка, то ничего не произойдет, т.е. никаких ошибок «не
высветится», ровно, как и в случае, когда значение внутри нашей ячейки
находится среди допустимых значений выпадающего списка и все казалось бы в
порядке, но потом в какой-то момент пользователь, не задумавшись о
последствиях, меняет список допустимых значений внутри самого выпадающего
списка во вкладке «Lists».
Это мы будем решать при помощи настройки в соседнем столбце формулы, которая
будет проверять факт наличия значения из ячейки среди значений выпадающего
списка (формула будет проставлять «нолик», если значение ячейки из списка и
«единичку», если наоборот), и передавать эту информацию в контрольную строку
14.

Если во вкладке «Lists» пользователь решит увеличить список допустимых значений
выпадающего списка путем простого добавления ячейки в конце списка, то это
новое добавленное значение очевидно не появится в выпадающих списках тех ячеек,
которые были настроены на этот список ранее. Этот нюанс мы будем решать
посредством прописания более сложной формулы в окне «Проверка вводимых
значений», в строке «Источник» закладки «Параметры».

Еще обратим особое внимание на тот факт, что сам по себе
Эксель – это инструмент с огромными возможностями, которые раскрываются по мере
того, как пользователь ставит все более интересные и амбициозные задачи,
которые настойчиво пытается решить при помощи EXCEL.

Вот и мы поставим интересную задачу, связанную с выпадающими
списками. Очень бы хотелось, чтобы, когда пользователь, прописывая в столбце H (показатели первого уровня)
название выпадающего списка из вкладки «Lists», копирует ранее настроенную ячейку с выпадающим списком в соответствующую
ячейку в столбце Q, то
автоматически выпадающий список перенастраивался на тот, название которого
стоит напротив этой ячейки с новым выпадающим списком.

Приступим к обучению читателя хитростям настройки выпадающих
списков, которые «одним махом» решат все вышеперечисленные проблемы и создадут
для нас крайне удобную среду для работы с этими самыми списками.

Для начала зайдем во вкладку «Lists» и сделаем некоторый набор
настроек вокруг нашего выпадающего списка. Начнем со столбца, в котором
расположен сам выпадающий список. В первой его строке, т.е. в ячейке I1 пропишем формулу,
возвращающую номер столбца

=столбец()

Во второй строке, т.е. в ячейке I2, нам понадобится формула,
возвращающая буквенное название столбца, в качестве такой формулы, можно,
например, использовать следующую:

=ЛЕВСИМВ(АДРЕС(1;СТОЛБЕЦ();4);ДЛСТР(АДРЕС(1;СТОЛБЕЦ();4))-1)

Правее от столбца I с выпадающим списком рассмотрим еще пару столбцов J и K, в первом из которых запишем формулу
нумерации значений выпадающего столбца

=МАКС(J$15:J15)+1

а во втором пропишем формулу, контролирующую неповторяемость
значений выпадающего списка

=ЕСЛИ(ИЛИ(J16=»»;J16=0);0;ЕСЛИ(СЧЁТЕСЛИ(I$15:I$100000;I16)=1;0;1))

Протягиваем формулы на все значения выпадающего списка, а
также настраиваем условное форматирование второго столбца, т.е. контрольного столбца
K, так чтобы ячейки, в
которых будет отражено число, отличное от нуля, закрашивались в ярко красный
цвет с белым полужирным шрифтом, и в соответствующей ячейке контрольной строки
14 листа «Lists»
прописываем формулу суммирования всех ячеек столбца K с контролем неповторяемости значений
выпадающего списка.

На следующем рисунке хорошо видно, как работает контроль за
повторяемостью значений выпадающего списка, где вместо значения «квартал»,
повторилось еще раз значение «неделя»:

контроль неповторяемости значений выпадающего списка финмодели

Заключительным ингредиентом для написания универсальной
формулы выпадающего списка является формула записи массива ячеек, в которых
находятся актуальные значения выпадающего списка, эту формулу мы для каждого
выпадающего списка будем размещать в строке 15. Сама формула имеет вид:

=$F$11&»!»&I$2&$A16&»:»&I$2&($A15+МАКС(J$15:J$100000))

и представляет из себя склейку названия листа, с адресами
ячеек, в которых находятся первое и последнее актуальные значения выпадающего
списка.

Итак, стандартно настроенный выпадающий список у нас будет
выглядеть вот так:

стандартный формат выпадающего списка

Теперь переходим во вкладку «Periods», наводим мышку на ячейку Q16, которая у нас настроена
на выпадающий список и меняем формулу

=Lists!$I$16:$I$22

выпадающего списка в окне «Проверка вводимых значений» на
новую универсальную формулу выпадающего списка, зависящую в том числе и от
названия заголовка выпадающего списка, прописанного в столбце H в качестве показателя первого уровня в
виде прямой формульной ссылки на заголовок во вкладке «Lists» с полным перечнем выпадающих
списков финансовой модели:

=ДВССЫЛ(ИНДЕКС(Lists!$15:$15;СУММЕСЛИМН(Lists!$1:$1;Lists!$13:$13;$H16)))

Данная формула посредством функции ИНДЕКС «находит» в строке
15 вкладки «Lists»
ровно ту запись блока ячеек, в котором сосредоточены значения выпадающего
списка с заголовком, прописанным в соответствующей ячейке столбца H с показателями верхнего
уровня листа «Periods».

Отметим, что при использовании такого универсального подхода
необходимо контролировать, чтобы показатель в столбце H верхнего
уровня действительно совпадал с одним из заголовков выпадающих списков вкладки
«Lists». Такой контроль
осуществим в столбце G,
в ячейках левее ячеек показателей верхнего уровня, где пропишем формулу
проверки нахождения в листе «Lists»
такого же заголовка, как в столбце H, при условии, что в столбце R находится «галочка»:

=ЕСЛИ($R16=»^»;ЕСЛИ(СЧЁТЕСЛИ(Lists!$13:$13;H16)=1;0;1);0)

В 14-той строке естественно прописываем соответствующую
формулу суммирования «контрольных ноликов».

Аналогично в столбце S настраиваем контроль за тем, чтобы
значение, которое должно быть значением из выпадающего списка, действительно
находилось среди значений этого списка, которые прописаны во вкладке «Lists», для чего используем
формулу:

=ЕСЛИ(ИЛИ($Q16=0;$Q16=»»);0;ЕСЛИ($R16=»^»;
ЕСЛИ(СЧЁТЕСЛИ(ДВССЫЛ(ИНДЕКС(Lists!$15:$15;
СУММЕСЛИМН(Lists!$1:$1;Lists!$13:$13;$H16)));$Q16)=1;0;1);0))

Контроль ошибок в оформлении выпадающих списков финмодели
работает, как изображено на рисунке:

контроль ошибок оформления выпадающих списков

После того как пользователь финансовой модели определился с
минимальным делением шкалы времени, т.е. выбрал из выпадающего списка
минимальный период расчетов, ему необходимо задать в качестве исходных данных
моделирования дату старта и горизонт моделирования в количестве минимальных
периодов. Реализуем это в нашем листе «Periods» следующим образом:

старт и горизонт финмоделирования

Здесь мы ячейки с датой старта и количеством периодов
горизонта моделирования настроили следующим образом.

Для даты старта настройка в виде даты в формате «ДД.ММ.ГГ» с
ограничением снизу по дате на уровне 1-ого января 1980г.:

настройка формата даты старта проекта

А для количества минимальных периодов горизонта
моделирования ячейку перевели в формат целого числа от 1 до 400:

настройка формата горизонта моделирования

Понятно, что наиболее часто используемый минимальный период
расчетов финмодели – это месяц, и количество месяцев в 400 штук с лихвой
покрывает 99,9% запросов на финансовые модели в ежемесячной детализации. Но
поскольку мы здесь претендуем на создание финансовой модели максимально
универсального типа, то видим, что при выборе в качестве минимального периода
расчетов периода в один день, горизонт моделирования в максимальные 400 таких
минимальных периодов составит всего один год и 1 месяц с маленьким хвостиком. С
другой стороны, Вы спросите, а что это бывает актуально, реализовывать
финансовые модели в ежедневной детализации? Поверьте, что да, и еще как
актуально! Для крупных интернет компаний, у которых за сутки на сайте
формируются заказы в количестве в несколько тысяч штук, да плюс к тому
присутствует явно выраженное внутринедельное неравномерное распределение
объемов созданных заказов в зависимости от дня недели, такое построение
финансового моделирования особенно важно. Автору не один раз приходилось
настраивать в крупнейших российских интернет-компаниях системы финансового
моделирования, бюджетирования и управленческого учета, которые работали в
ежедневном разрезе.

Этих трех параметров, а именно минимальный период расчетов,
начальная дата и горизонт моделирования, нам теперь вполне достаточно для
формирования временнОй шкалы финансовой модели в виде последовательности
заданных минимальных периодов.

Строки 20, 21 и 22 отведем под задание начальных, конечных
дат и названий периодов финансового моделирования, как показано на рисунке:

формирование временной шкалы финмодели

Далее мы пропишем необходимые формулы для задания
периодизации расчетов модели и укажем в какие ячейки их необходимо вставить,
после чего прокомментируем суть этих формул.

Сначала формулу

=ЕСЛИ(ИЛИ($Q$17=»»;$Q$17=0);»»;ЕСЛИ($Q$16=Lists!$I$16;$Q$17;
ЕСЛИ($Q$16=Lists!$I$17;$Q$17-ЕСЛИ(ДЕНЬНЕД($Q$17)=1;7;ДЕНЬНЕД($Q$17))+2;
ЕСЛИ($Q$16=Lists!$I$18;КОНМЕСЯЦА($Q$17;-1)+ЦЕЛОЕ((ЕСЛИ(ДЕНЬ($Q$17)=31;30;
ДЕНЬ($Q$17))-1)/10)*10+1;ЕСЛИ(ИЛИ($Q$16=Lists!$I$19;$Q$16=Lists!$I$21);
КОНМЕСЯЦА($Q$17;-1)+1;ЕСЛИ($Q$16=Lists!$I$20;
КОНМЕСЯЦА($Q$17;-(МЕСЯЦ($Q$17)-3*ЦЕЛОЕ((МЕСЯЦ($Q$17)-1)/3)))+1;
ЕСЛИ($Q$16=Lists!$I$22;КОНМЕСЯЦА($Q$17;-МЕСЯЦ($Q$17))+1;»»)))))))

вставляем в ячейку X20, тем самым уточняя для финмодели корректную дату старта
моделирования в соответствии с типом выбранного минимального периода.

Формулу

=ЕСЛИ(AA$16>$Q$18;»»;ЕСЛИ(AA$16=1;
ЕСЛИ($X20=»»;»»;$X20);ЕСЛИ(Z21=»»;»»;Z21+1)))

вставляем в ячейку AA20 (старт первого расчетного периода финмодели), причем для
работы этой формулы нам потребуется техническая настройка в строке 16, где,
начиная со столбца AA,
мы пропишем формулу

=МАКС($Z16:Z16)+1

которая будет отображать номер периода расчетов финмодели
(от 1 до 400).

Далее формулу

=ЕСЛИ(AA20=»»;»»;ЕСЛИ($Q$16=Lists!$I$16;AA20;
ЕСЛИ($Q$16=Lists!$I$17;AA20+6;ЕСЛИ($Q$16=Lists!$I$18;ЕСЛИ(ДЕНЬ(AA20)=21;
КОНМЕСЯЦА(AA20;0);AA20+9);ЕСЛИ($Q$16=Lists!$I$19;КОНМЕСЯЦА(AA20;0);
ЕСЛИ($Q$16=Lists!$I$20;КОНМЕСЯЦА(AA20;2);
ЕСЛИ(ИЛИ($Q$16=Lists!$I$21;$Q$16=Lists!$I$22);КОНМЕСЯЦА(AA20;11);»»)))))))

вставляем в ячейку AA21, получая расчет конечной даты расчетного
периода финмодели.

И наконец формулу

=ЕСЛИ(ИЛИ(X20=»»;AA21=»»);»»;МАКС($Z21:$PK21))

вставляем в ячейку X21, где у нас будет отображаться дата горизонта моделирования.

Также для удобства визуального восприятия мы добавляем
22-тую строку к нашей системе периодизации финмодели, прописывая в ячейке AA22 следующую формулу:

=ЕСЛИ(AA20=»»;»»;ЕСЛИ($Q$16=Lists!$I$16;ЕСЛИ(ДЕНЬНЕД(AA20)=1;»вс»;
ЕСЛИ(ДЕНЬНЕД(AA20)=2;»пн»;ЕСЛИ(ДЕНЬНЕД(AA20)=3;»вт»;ЕСЛИ(ДЕНЬНЕД(AA20)=4;»ср»;
ЕСЛИ(ДЕНЬНЕД(AA20)=5;»чт»;ЕСЛИ(ДЕНЬНЕД(AA20)=6;»пт»;»сб»))))));
ЕСЛИ(ИЛИ($Q$16=Lists!$I$17;$Q$16=Lists!$I$18);
СЧЁТЕСЛИМН($Z$17:AA$17;МЕСЯЦ(AA20);$Z$18:AA$18;ГОД(AA20)-2000)&
ЕСЛИ($Q$16=Lists!$I$17;»нд-«;»дк-«)&ЕСЛИ(AA$17=1;»янв»;ЕСЛИ(AA$17=2;»фев»;
ЕСЛИ(AA$17=3;»мар»;ЕСЛИ(AA$17=4;»апр»;ЕСЛИ(AA$17=5;»май»;ЕСЛИ(AA$17=6;»июн»;
ЕСЛИ(AA$17=7;»июл»;ЕСЛИ(AA$17=8;»авг»;ЕСЛИ(AA$17=9;»сен»;ЕСЛИ(AA$17=10;»окт»;
ЕСЛИ(AA$17=11;»ноя»;»дек»)))))))))))&AA$18;ЕСЛИ($Q$16=Lists!$I$19;AA20;
ЕСЛИ($Q$16=Lists!$I$20;(ЦЕЛОЕ((AA$17-1)/3)+1)&»кв»&AA$18&»г»;
ЕСЛИ($Q$16=Lists!$I$21;AA$16&»год»;
ЕСЛИ($Q$16=Lists!$I$22;ГОД(AA20)&»г.»;»»)))))))

Для которой с использованием функций МЕСЯЦ() и ГОД() нам
потребуется добавить еще две технические строки, а именно строки 17 и 18, в
которых, начиная со столбца AA,
будут отображаться число месяца и номер года в третьем тысячелетии даты старта
соответствующего расчетного периода из строки 20.

Указанные выше формулы являются простыми по своей сути, но
визуально кажущимися сложными ввиду их громоздкости. Простыми они являются
поскольку в их основе лежит исключительно одна функция – функция ЕСЛИ().

Последовательная вложенность функций ЕСЛИ() в этих формулах
обусловлена тем, что нам необходимо перебрать один за другим все варианты
выбора пользователем финансовой модели из выпадающего списка минимального
расчетного периода:

— если в качестве периода выбран «день», то временнАя шкала
финмодели начинается с указанной пользователем стартовой даты;

— если в качестве периода выбрана «неделя», то шкала
начинается с понедельника той недели, внутри которой оказалась дата старта
моделирования;

— если в качестве периода выбрана «декада», то шкала
начинается с 01-ого, 11-ого или 21-ого числа месяца в зависимости от того в
какую декаду месяца попала стартовая дата;

— если в качестве периода выбран «месяц», «квартал» или
«календарный год», то шкала начинается с первого числа того календарного
месяца, квартала или года, внутри которого оказалась дата старта моделирования,
заданная пользователем;

— если в качестве периода выбран «текущий год», то шкала
начинается с первого числа того календарного месяца, внутри которого оказалась
стартовая дата.

Таким вот образом мы расписали словами одну из «громоздких»
формул из перечисленных выше, откуда очевидно вытекает, что ничего сверх
сложного в этих формулах нет.

Для читателя будет полезным разобрать самостоятельно
остальные прописанные формулы.

И вот как теперь выглядит наша вкладка с периодизацией
финмодели:

временная шкала финмоделирования

Отметим, что здесь на рисунке горизонт моделирования в
количестве периодов указан равным 60, т.е., начиная со столбца AA, должно быть задействовано
60 последовательных столбцов под задание временнОй шкалы, и для завершения
формирования шкалы времени финмодели нам необходимо скопировать столбец AA на
59 столбцов правее AA.
Но мы пока что не будем этого делать. Сделаем тогда, когда настроим все формулы
для первого периода шкалы из столбца AA для отображения всех задуманных нами параметров модели, которые
должны быть на листе «Periods».
После чего мы одним протягиванием столбца AA на 399 столбцов правее, вплоть до столбца PJ, дооформим шкалу времени.

Кстати, одним из принципов финансового моделирования как
раз-таки является способность разработчика финмодели прописать формулы в первом
столбце шкалы времени так, чтобы при протягивании на остальные столбцы листа
все формулы «встали» корректно.

Теперь перейдем к вопросу отражения фактических данных. Тут
на самом деле возникает два последовательных уточняющих вопроса:

— учитывать или нет в финмодели факт прошлых периодов?

— если фактические данные учитывать, то за какой период?

Для того чтобы пользователь в рамках работы с финансовой
моделью мог отвечать на подобные вопросы введем в рассмотрение выпадающий список
во вкладке «Lists» с
заголовком «ответ “да/нет”» и списком выпадающих значений «да» и «нет». Для
чего скопируем столбцы H,I,J,K правее в столбцы L,M,N,O, переименуем заголовок, удалим лишние
5-ть последних записей выпадающего списка и пропишем новые его значения в
первых двух записях – «да», «нет», см. изображение:

выпадающий список ответов да-нет

В листе «Periods»
создаем два вопроса для пользователя с ответами из выпадающего списка «да/нет»,
как ниже показано на рисунке:

выпадающие списки для задания фактического периода

Далее строки 20 и 21 копируем в строки 28 и 29, меняем
названия на «дата начала фактического периода» и «дата окончания фактического
периода» соответственно и настраиваем формулы в ячейках с датами начала и
окончания фактических периодов с учетом дополнительных двух значений, которые
располагаем в следующих двух строках столбца Q:

— «по умолчанию — сегодняшний день» со значением в ячейке Q30 (используем формулу
«=СЕГОДНЯ()», возвращающую сегодняшнюю дату);

— «задать вручную дату окончания факта» со значением,
которое пользователь задает самостоятельно вручную в ячейке Q31, в случае если в ячейке Q25 выбрано значение «да», а
в Q26 – «нет».

При написании формул начала и окончания фактических периодов
необходимо учитывать, что все должно начинаться с формулы окончания периода в
ячейке AA29:

=ЕСЛИ($Q$25=Lists!$M$16;ЕСЛИ(AA$21<
=ЕСЛИ($Q$26=Lists!$M$16;$Q$30;$Q$31);AA$21;»»);»»)

Суть которой состоит в том, что мы учитываем в качестве
фактических периодов только те периоды временнОй шкалы моделирования, у которых
конечная дата не превосходит дату окончания фактического периода, заданную
пользователем финмодели.

настройка периодов отражения фактических данных

Наконец нам необходимо также настроить шкалу отчетности.
Помимо того, что всю отчетность финансовой модели мы естественно соберем в
предусмотренных для этого вкладках в разрезе расчетной периодизации, обычно для
конечного пользователя финмодели требуется собрать управленческие отчеты еще и
в укрупненном виде, например, в разрезе календарных лет или кварталов, поэтому
нам во вкладке «Periods»
имеет смысл сразу задать и шкалу времени для укрупненных отчетов, назовем ее
«отчетной периодизацией», а соответствующие периоды – «отчетными периодами».

Для этого создадим
еще один выпадающий список во вкладке «Lists» со списком периодов более крупных, чем тот, который выбран
пользователем в ячейке Q16
листа «Periods» в
качестве минимального расчетного периода финансовой модели. То есть теперь
значения выпадающего списка формулами связаны с выбранным значением
минимального расчетного периода во вкладке «Periods», это можно увидеть на ниже следующем изображении вкладки
«Lists», обратив
внимание на строку с отображением формулы, находящейся в выделенной ячейке.

выпадающий список периодов отчетности

По аналогии с тем, как в листе «Periods» был задан минимальный расчетный
период, формируем для пользователя в строках с 33-тьей по 37-ую задание и
расчет отчетной периодизации, результат отражен ниже.

итоговая периодизация финмодели

Получается так, что в рамках нашей логики построения шкалы
времени все листы финмодели должны разделяться, как минимум, на три типа:
расчетные, отчетные и технические, где первые два типа листов будут в строках
11,12 и 13 верхней закрепленной области, начиная со столбца X, иметь шкалу времени соответственно с
минимальным периодом и отчетным периодом, а третий тип листов – это листы
подобные вкладке «Lists»,
где не нужна шкала времени, т.е. эти листы носят технический характер для
финансовой модели.

Хорошо, вводим в рассмотрение во вкладке «Lists» еще один выпадающий список с
заголовком «тип листа» и тремя значениями: «расчетный», «отчетный» и
«технический».

выпадающий список типов листов финансовой модели

На этом в рамках первого занятия по обучению финансовому
моделированию мы завершаем наполнение вкладки «Lists» выпадающими списками, это конечно
же не значит, что в следующих занятиях курса обучения финмоделированию не
появятся новые выпадающие списки, на самом деле их еще будет много, но здесь до
конца настоящего занятия мы уже не будем касаться дальнейшего развития вкладки
«Lists», разве что
немного доведем до логического конца контрольную часть, и это ожидает нас далее.

Да, прежде чем также завершить формирование листа «Periods», мы отвлечемся на
организацию вкладки «Cntrl»
и системы контроля за корректностью финансовой модели в целом.

Как мы уже вскользь упомянули ранее, система контроля в Excel-файле с финмоделью у
нас выстраивается таким образом, чтобы внутри каждой вкладки был свой контроль,
который пронизывает контрольными ноликами по горизонтали и вертикали весь лист,
собирает все в строку 14 и далее 14-тая строка суммируется в ячейке E14 опять же каждой вкладки,
после чего все контрольные суммы в ячейках E14 собираются в листе «Cntrl» и теперь уже их общая контрольная сумма направляется в
каждую вкладку финмодели в ячейки с адресом D14. Очевидно, что при такой системе организации контроля сложно
ошибиться и сразу не заметить ошибку и более того, сложно оперативно не
разобраться, где произошел сбой.

В листе «Cntrl»
нам потребуются пять столбцов со следующими заголовками: «лист», «ячейка с
контролем», «контроль», «номер листа» и «тип листа», причем последнее название
тянется прямой ссылкой с соответствующего заголовка вкладки «Lists». В столбец «лист» мы подтягиваем
названия листов из вкладки «START»
прямыми ссылками, в ячейках столбца «ячейка с контролем» напротив названий
листов мы вписываем вручную в качестве значений адреса тех ячеек этих листов, в
которых находятся их общие контроли – как мы хорошо помним, это везде ячейка E14. В столбце «контроль» мы
прописываем формулу

=ДВССЫЛ(I18&»!»&K18)

которая очевидно по своей сути является прямой ссылкой на
ячейки E14, тех листов,
названия которых прописаны напротив в столбце «лист».

В ячейке M16
мы суммируем контроли всех листов финмодели и потом отображаем их в ячейке D14 всех вкладок модели, см.
рисунок:

организация контрольного листа финансовой модели в EXCEL

Также нам здесь понадобились еще два технических столбца:
«номер листа» и «тип листа». В первом из них прописана функция ЛИСТ(), которая
возвращает порядковый номер ярлычка листа в нижней горизонтальной панели
эксель-файла, и послужит она нам для того, чтобы контролировать совпадение
названия листа, с одной стороны, прописанного в ярлычке, а, с другой стороны,
того, которое указано в списке листа «START». Такой контроль нам необходим, поскольку все гиперссылки
наших кнопок навигации по вкладкам финмодели настроены на вполне конкретные
названия листов, а значит изменение пользователем названия того или иного листа
может привести к ошибкам внутри xlsx-файла
с финмоделью.

Для контроля названий листов поместим в ячейку F14 каждой вкладки
эксель-файла формулу:

=ЛИСТ($A$1)-СУММЕСЛИМН(Cntrl!$O$15:$O$100000;Cntrl!$I$15:$I$100000;$F$11)

Теперь если эта формула не будет равна нулю, то это будет
значить, что название ярлычка листа, в котором находится эта формула, не
совпадает с названием, которое предполагается для этой вкладки в списке
названий листов вкладки «START».

В столбце «тип листа», как отображено выше на рисунке,
напротив названия каждого листа финмодели выбираем из выпадающего списка тип
этого листа.

С вкладкой «Cntrl»
мы завершили, переходим к последним настройкам листа «Periods».

Отобразим в листе «Periods» тип этого листа в 12-той строке закрепленной области
(выше заголовков), как показано на рисунке:

отображение типа листа в заголовке листа финмодели

Наконец, в строках 11, 12 и 13, начиная со столбца X, т.е. в ячейках, отведенных
под отображение в листах финансовой модели шкалы времени, пропишем формулы,
точнее единую формулу, которую потом протянем, суть которой сводится к тому,
что если в ячейке Q12
тип листа отобразился со значением «расчетный», то шкала времени подтягивается
из соответствующих ячеек строк 20, 21 и 22, отвечающих за формирование
расчетных периодов, если значение – «отчетный», то шкала времени подтягивается
отчетная из строк 35, 36 и 37, ну а уж если значение – «технический», то
«пусто».

В заключение с технической целью, а также для улучшения визуального
восприятия, во-первых, добавим в строках с 1-ой по 10-тую, начиная со столбца AA, т.е. в области шкалы
времени, расчет следующих 10-ти показателей:

— номер столбца;

— номер периода модели;

— номер факт-периода;

— номер план-периода;

— число даты начала периода;

— номер месяца даты начала периода;

— год даты начала периода;

— число даты окончания периода;

— номер месяца даты окончания периода;

— год даты окончания периода.

Во-вторых, подкрасим номер факт-периода зеленоватым цветом,
номер план-периода – синеватым, а также синеватым подкрасим даты начала и
окончания периодов шкалы времени. В-третьих, настроим условное форматирование
шкалы времени так, чтобы если период относится к фактическому, то будем его
подкрашивать в зеленоватый цвет, а если в данном столбце периодов нет, т.е.
шкала периодов пуста, то будем ее подкрашивать в желтоватый цвет. И,
в-четвертых, добавим светло серую разделительную пунктирную границу между
столбцами AA и AB (между первым и вторым периодами финмодели).

окончательная настройка шкалы времени финансовой модели

И последний штрих нашего первого занятия по обучению
финансовому моделированию – копируем или, как еще говорят, протягиваем столбец AA с первым периодом шкалы
времени нашей будущей финансовой модели на 399 столбцов правее (почему на 399,
мы ранее уже говорили) вплоть до столбца PJ. И готово. Готова общая настройка Excel-файла будущей финмодели – это
крайне важный шаг, который нам позволит в дальнейшем избежать огромного
количества проблем с разработкой финансовой модели и самое главное с ее
последующим использованием.

Посмотрим, как это
выглядит.

Начало шкалы времени:

изображение начала шкалы времени финансовой модели

Окончание шкалы времени:

изображение окончания шкалы времени финансовой модели

Максимальный горизонт шкалы времени – 400-тый период
(столбец PJ):

максимальный горизонт шкалы времени финансовой модели

На этом первое занятие курса обучения финансовому
моделированию в Excel
завершено, на следующем занятии мы перейдем непосредственно к моделированию и
начнем с маркетингового анализа, а именно будем обучаться основам моделирования
каналов привлечения клиентов.

Для удобства восприятия занятия 1 скачивайте итоговый EXCEL-файл первого урока по финансовому моделированию
в ниже следующей синей рамке.

СКАЧАТЬ


ИТОГОВЫЙ EXCEL-ФАЙЛ ПЕРВОГО УРОКА ПО ФИНМОДЕЛИРОВАНИЮ

Ожидайте занятие 2 (маркетинг) курса обучения фин моделированию в районе с 20 по 25 июня 2021г.
В июле планируем выпустить много интересных видео-материалов.
Успехов Вам в изучении финансового моделирования!

Следующие уроки:
Прил. 1 к занятию 1. Система контроля финмодели

Цели урока:


  1. Обучающие: Повторить и закрепить навыки
    работы в MS Excel; научить применять современное
    программное обеспечение в решении
    математических задач, строить математические
    модели в среде MS Excel.

  2. Развивающие: Развивать: практические и
    исследовательские навыки по составлению моделей
    в электронных таблицах, научное мировоззрение
    через связь информационных технологий с другими
    школьными предметами, логическое и
    алгоритмическое мышление, аналитические
    способности, внимание, память.

  3. Воспитательные: Воспитание общей и
    информационной культуры, творческого подхода к
    работе, желания экспериментировать,
    самостоятельности в учебном труде.

Тип урока: Комплексного применения
знаний, обобщения и систематизации.

Программное и техническое обеспечение
урока:


  • компьютеры с ОС MS Windows XP;

  • пакет Microsoft Office;
  • мультимедийный проектор

Время проведения урока: один из
последних уроков в разделе «Информационное
моделирование».

План урока: (40 минут)

  1. Орг. момент. (1 мин)
  2. Проверка и актуализация знаний. / Тестирование
    по теме (4 мин)./ Разминка (5 мин)
  3. Теоретическая часть. (10 мин)
  4. Практическая часть. (10 мин)
  5. Самостоятельная работа. (8 мин)
  6. Подведение итогов. Д/з (2 мин)

Ход урока:

1. Организационный момент.

Приветствие, проверка присутствующих.

С помощью проектора демонстрируется
на экране первый слайд презентации. Приложение 1

Сообщается тема урока: «Математическое
моделирование в среде электронных таблиц MS Excel

«.Озвучить цели и план урока.

2. Актуализация опорных знаний.

Пройденная нами тема «Электронные
таблицы»– одна из наиболее практически
значимых, востребованных, после текстового
редактора Word и его возможностей. Но электронные
таблицы не только позволяют автоматизировать
расчеты, но и являются эффективным средством
моделирования различных вариантов и ситуаций.
Меняя значения исходных данных, можно проследить
за изменением получаемых результатов и из
множества вариантов решения задачи выбрать
наиболее подходящий.

Перечислите, что вы научились делать,
изучая табличный процессор MS Excel?

выполнять вычислительные операции
при помощи формул;

– составлять таблицы;

– строить графики и диаграммы.

Тестирование по теме «Электронные
таблицы».

Домашним заданием было повторить весь
изученный материал по теме «Электронные
таблицы». Чтобы проверить домашнее задание, я
предлагаю Вам ответить на вопросы электронного
теста. (Дети уже знакомы с работой системы
дистанционного обучения MyTestServer 1.1) Приложение 2

Перед началом работы учащиеся
прослушивают инструкцию по выполнению теста.

Тест состоит из 5 вопросов. Дается
только одна попытка, будьте внимательны, не
торопитесь. Время на тест 3 минуты.

После завершения тестирования каждому
ученику системой выставляется оценка, которую он
видит на экране своего монитора.

Сегодня на уроке мы будем использовать
электронные таблицы с их мощным вычислительным
потенциалом для решения математических задач –
построим математическую модель в среде MS Excel и
проведем небольшое исследование.

А для этого вспомним основные понятия
по теме “моделирование” (проводим устную разминку).

Вопросы разминки: Приложение 1

Моделирование – метод познания
окружающего мира, состоящий..

Модель – это объект, который
используется в качестве..

Различают ____________и ___________модели.

Натурные модели – это…

Информационные модели – это…

Основными видами информационных
моделей являются:_________ ,_________, __________.

А как вы думаете, математическая
модель к какому виду принадлежит?

Математическая модель – это модель,
построенная с использованием…

Приведите пример знаковой
информационной модели, рассматриваемой на
уроках математики.

Основным языком информационного
моделирования в науке является язык математики.

3. Теоретическая часть.

Какую бы жизненную задачу ни взялся
решать человек, первым делом он строит модель
заданного объекта. Очень часто задачи связаны с
потребностями человека.

Сегодня нам предстоит решить
следующую задачу:

Задача 1: Приложение
1

У маленького Васи есть небольшой
бассейн во дворе. Иногда Вася ходит к речке и
приносит воду в бассейн в небольшой цистерне
цилиндрической формы. Известны ширина ШБ, высота
ВБ, ДБ бассейна и объем цистерны Об Ц. Сколько раз
Васе нужно сходить к речке за водой, чтобы
наполнить бассейн наполовину?

Этот текст можно рассматривать как
словесную модель бассейна.

Постановка задачи: выяснение
условий

Какую форму может иметь бассейн?
(ответы детей).

А какой формы он в нашей задаче?– В
форме куба или параллелепипеда, потому, что даны
его параметры: ширина, высота, длина. А что еще нам
известно?

– объем цистерны.

Давайте попробуем решить задачу:
узнаем сколько раз (N) Васе нужно сходить к речке
за водой, чтобы наполнить бассейн наполовину.

Что для этого нужно знать?

– сколько цистерн воды помещается в
бассейн.

А как это узнать?

– определить объем бассейна (Об Б)

– сравнить половину объема бассейна и
объем цистерны (Об Б / Об Ц / 2).

4. Практическая часть.

Карточка – задание №1 Приложение 3

Задание для практической работы: Скопировать
в свою папку файл – шаблон Excel Приложение 4

Назвать лист номером задачи «Задача
1
» (редактирование названия – двойной щелчок
мыши на «Лист 1»).

Оформить на листе решения разделы «Дано«,
«Найти«, «Математическая модель«,
«Решение«, «Ответ» (по образцу):

В ячейках А1и А7 напечатать
слова «Дано» и «Найти«.

Объединить ячейки А10, В10 и С10,
ввести текст: «Математическая модель«

Объединить ячейки Е1 и F1,
напечатать слово «Решение«.

В ячейку Е7 – «Ответ«.

 Заполнить таблицу начальными
данными
.

В ячейки В1:В4 ввести текст: ШБ=;
ДБ=; ВБ=; Об Ц=.

В ячейки С1:С4; ввести
соответствующие значения параметров: 4,3; 5,8; 2; 4,5.

Для наглядности, если есть
возможность, можно построить графическую модель
(рисунок задаче) в Painte и скопировать ее в
электронную таблицу или нарисовать бассейн
непосредственно в Excel.

Далее заполнить раздел таблицы
«Математическая модель».

Объединить ячейки А11, В11 и С11,
ввести формулы (тип данных – текст) в раздел
(пробел перед знаком «=»). «Объем бассейна
=С1*С2*С3
«

Объединить ячейки А13, В13 и С13
и ввести текст «N = ОКРУГЛВВЕРХ(G4 / C4 / 2)«.
(для получения целого числа используем функцию
округления ОКРУГЛВВЕРХ)

В разделе «Решение»
создать сетку вычислений:

– Обозначить искомые и промежуточные
величины.

– Объединить ячейки Е4 и F4,
ввести текст: «Объем бассейна =«. В ячейку
Е5 – «N =«(тип данных – текст).

В ячейки G4 и G5; ввести
соответствующие формулы (тип данных – формулы):
=С1*С2*С3;

Используем функцию округления
дробного числа до целого:

Вставка-функция – математические –
ОКРУГЛВВЕРХ –
число разрядов выбираем «0«.

=ОКРУГЛВВЕРХ(G4 / C4 / 2)

В разделе «Ответ» запишем
искомый результат в ячейку G7 (тип данных –
текст).

 Проведем небольшое исследование:

Вопрос: Сколько раз Васе нужно будет
сходить к речке за водой, если он возьмет
цистерну емкостью 5,6 литров; 4 литра; 3,3
литра?

Меняем в ячейке С4 значение на 5,6
и электронные таблицы автоматически производят
пересчет.

Создадим таблицу значений Об Ц и
будем заносить в нее результаты вычислений N.

Введем в ячейку А20 и В2 текст
«Об Ц» и » N«. Заполним таблицу
данными.

Об Ц

N

3,3

8

4

7

4,5

6

5,6

5

Для графического представления
результатов выделить диапазон А21: В24,
построить график функции, отредактировать его.

 Анализ полученных результатов.

5. Самостоятельная работа.

Задание для самостоятельной разработки:

Карточка – задание №2 Приложение
3

Задача 2. Пешеход начал движение из
начала координат со скоростью V=0,6 м/с.
Найдите, какой путь S прошел пешеход за одну
минуту t после начала движения, если он
двигался равномерно.

Постановка задачи: выяснение
условий

Скажите, что мы будем моделировать? –

– движение

Какие виды движения вы знаете? (ответы
детей)

Какое движение рассматривается в
нашей задаче?

– равномерное. Приложение 1

Давайте вспомним формулу расчета
скорости: V=s/t– отсюда s=V*t

Технология моделирования:

  1. Назвать лист номером задачи «Задача 2»
    (редактирование названия – двойной щелчок мыши
    на «Лист 2»).
  2. Выделить расчетную таблицу на листе «Задача1»
    и скопировать ее на лист «Задача 2«.
  3. Заполнить таблицу новыми начальными данными.
  4. Ввести формулу (тип данных – текст) в раздел
    «Математическая модель» (пробел перед
    знаком «=»).
  5. Ввести фоpмулу (тип данных – формулы) в
    раздел «Решение«.
  6. В разделе «Ответ» записать искомый
    результат (тип данных – текст).

  7. Создать таблицу значений t и занести в нее
    результаты вычислений S. Заполнить таблицу
    данными.
  8. Для графического представления результатов
    выделить область аргументов и функций, построить
    график зависимости пути S от времени при t=40;60;90,
    отредактировать график.

6. Итог урока.


Сегодня на уроке мы узнали, как можно
использовать электронные таблицы в решении
математических задач, научились строить
математические модели в. среде MS Excel

Домашним заданием будет: самим
придумать задачу, разработать ее математическую
модель.

У кого есть вопросы по пройденному материалу?

Спасибо за работу. Вы сегодня молодцы. Можете
быть свободны.

В этой статье мы рассмотрим достаточно интересную разработку, позволяющую автоматизировать процесс составления расписания занятий в учебном заведении (это может быть вуз, колледж, школа и др.). Фактически мы попробуем построить информационную систему для эффективного управления аудиторным фондом. В понятие управление вкладывается создание разнообразных сервисных функций для пользователя, необходимых ему при составлении расписания учебных занятий. Это будут формы для ввода информации о занятиях и подбора аудитории, возможности просмотра расписания и занятости аудиторного фонда.

Как вы увидите, решение рассматриваемой задачи приводит к разработке сложного управления информационной базой. Автоматизированная книга включает в себя несколько листов и электронных форм ввода. Разработанные алгоритмы позволяют пользователю исключать ошибки и принимать правильные решения при составлении расписания занятий и подборе аудиторий.

Функциональные возможности разрабатываемой книги Microsoft Excel рассчитаны на широкую категорию пользователей. В связи с тем, что все читатели знакомы с учебным процессом по школе, колледжу или вузу, перечисленные далее основные сервисные возможности разработки должны быть понятны:

  • ввод заявок на проведение учебных занятий с помощью электронной формы;
  • подбор свободных аудиторий для занятий;
  • возможность быстрого получения информации о свободном аудиторном фонде;
  • удобная возможность просмотра расписания по учебным группам.

Ввод начальной информации

Понятно, что рассматриваемая разработка требует некоторой начальной информации — о группах, аудиторном фонде и т. д. Фактически нам необходимы справочники по группам, аудиториям, преподавателям и еще ряду категорий. Такие данные заносятся на отдельный лист книги; один из вариантов его заполнения представлен на рис. 5.15.

Рис. 5.15. Лист, содержащий справочную информацию

Рис. 5.15. Лист, содержащий справочную информацию

Здесь в столбцы А и В нужно ввести информацию об имеющихся аудиториях (при этом в первый столбец заносится номер аудитории, а во второй — количество мест в ней). В столбец С следует занести номера учебных недель в семестре (нумерация недель достаточно широко распространена в учебных заведениях).

В столбце D располагаются учебные дни в течение недели, а столбец Е отводится для времени начала занятий. Так, во второй строке этого столбца отображается время начала первого занятия, в третьей строке — начало второго занятия, и т. д.

В следующих столбцах располагаются другие списки: заявители (это могут быть названия факультетов, фамилии деканов или руководителей учебных программ), затем — преподаватели, группы (с указанием количества учащихся). В последнем столбце располагаются названия учебных дисциплин.

Пустых ячеек внутри списков рассмотренных данных быть не должно. Пустая ячейка в столбце для всех приводимых далее процедур является индикатором того, что ниже этой ячейки данных уже нет.

Таким образом, лист Нач. инф. представляет собой совокупность исходных данных для работы программы составления расписания и должен заполняться в первую очередь. Все рассматриваемые далее процедуры используют эту начальную информацию.

Перейдем к рассмотрению листа Заявки (рис. 5.16), который предназначен для фиксации заявок на проведение занятий, а также для указания аудиторий, где они должны проходить.

Традиционно в большинстве разработок на первом листе рабочей книги располагаются элементы управления, связанные с основными действиями пользователя, и здесь мы поступим таким же образом. В дальнейших программных процедурах учитывается, что лист Заявки является первым в последовательности листов книги, а лист Нач. инф. располагается на втором месте.

Рис. 5.16. Организация листа Заявки

Рис. 5.16. Организация листа Заявки

Основное содержание листа Заявки — регистрация заявок на проведение учебных занятий и аудиторий, которые для этих занятий выделяются. Для этого в верхней части листа располагаются два элемента управления. О них мы поговорим позднее, но уже из надписей на кнопках понятны их функции.

Посмотрим теперь на информацию, расположенную начиная с четвертой строки листа (третья строка отводится для заголовков столбцов). Здесь каждая строка в этой области содержит заявку на проведение определенного занятия новая заявка вводится в очередную свободную строку на этом листе. При этом информацию по заявке условно можно разделить на две категории:

  • начальная информация о занятиях (заявитель, преподаватель, день, время, группа, количество студентов в группе, название дисциплины и номера учебных недель, когда занятия должны проводиться);
  • информация об обслуживании данной заявки (обслужена ли она, и если да, то номер аудитории, выбранной для проведения занятия).

Алгоритм подбора аудитории составляет важную содержательную часть рассматриваемой разработки. Здесь учитывается вместимость аудитории и количество студентов.

Так, в каждой строке столбцы F и G отводятся для записи информации об обслуживании заявки (подобранной для нее аудитории). И если аудитория подобрана, то в столбец F программно записывается слово «да», а в следующий столбец вписывается номер аудитории. Фактически информация на первом листе представляет собой определенную базу данных.

Начальные столбцы содержат информацию о заявителе (это может быть деканат или учебное подразделение), преподавателе, дне и времени проведения занятий. Данная информация не требует ручного заполнения, а извлекается из предварительно заполненного второго листа, как описано ранее. Непосредственно ввод данных будет выполняться с помощью специально разработанной формы ввода. Например, для ввода фамилии преподавателя мы будем выбирать ее из перечня, предварительно заполненного на втором листе.

В столбце Е для каждой заявки указывается количество студентов, которые учатся в данной группе. Эта информация вносится автоматически после выбора названия группы (вы уже видели, что на втором листе присутствует два связанных столбца — название группы и число студентов в ней). В столбцах, начиная с J, отмечаются недели, когда должны проводиться занятия по данной заявке. Звездочка в соответствующем столбце говорит о том, что на этой неделе занятие планируется. В дальнейшем для исключения лишних фрагментов мы ограничимся семью неделями учебного процесса.

Нумерация учебных недель является типичной для учебных заведений. Это связано с тем, что количество аудиторных часов для разных дисциплин по учебному плану неодинаково. В связи с этим какие-то дисциплины в семестре ограничены тремя занятиями, а какие-то продолжаются в течение всего семестра.

При необходимости можно легко самостоятельно скорректировать приведенные процедуры на большую продолжительность.

Рассмотрим теперь элементы управления на рис. 5.16. Это две кнопки, которые на листе расположены в области первых двух строк. В табл. 5.1 приведены значения их свойств Name и Caption.

Таблица 5.1. Значения свойств кнопок, расположенных на листе Заявки

Name Caption
Input_New Ввод новой заявки
Input_Auditoria Подбор аудитории

Понятно, что заполнение информации о заявке и тем более подбор для нее подходящей аудитории требуют определенного алгоритма. Так, программа должна обнаруживать возможный ввод некорректных заявок. Например, при вводе очередной заявки преподаватель может быть в указанное время уже занят. Другая возможная ситуация — для указанной в заявке группы уже зафиксировано другое занятие в это время. Все эти и другие подобные ситуации создаваемая разработка должна отслеживать. При этом автоматическая блокировка подобных накладок не требуется, так как, возможно, они закладываются в расписание не случайно.

Форма для ввода заявок

Форма, которую мы здесь рассмотрим, связана с вводом новой заявки на проведение занятий. Пользователю для вызова этой формы нужно просто щелкнуть на кнопке Ввод новой заявки. После этого автоматически выполняется предопределенная процедура, приведенная в листинге 5.20.

1
2
3
4
' Листинг 5.20. Обработка щелчка на кнопке Ввод новой заявки
Private Sub Input_New_Click()
    Form_Add.Show
End Sub

Здесь Form_Add — значение свойства Name формы, которую мы далее разработаем для ввода информации. Выполняется метод Show этой формы, который загружает ее в память и отображает на экране. Фактически для пользователя щелчок на кнопке ввода новой заявки приводит к появлению формы на экране. На рис. 5.17 представлена рассматриваемая форма ввода.

Рис. 5.17. Форма ввода заявок на занятия

Рис. 5.17. Форма ввода заявок на занятия

На форме расположено шесть элементов управления типа «Поле со списком» или ComboBox (в табл. 5.2 приведены значения их свойства Name). Для каждого подобного объекта рядом имеется поясняющая надпись. При активизации формы эти элементы автоматически заполняются информацией со второго листа книги. Скажем, при щелчке на поле со списком преподавателей мы увидим фамилии преподавателей, предварительно внесенные нами на второй лист.

Таблица 5.2. Значения свойства Name полей со списками на рис. 5.17

Name Подпись
Boss Декан
Prepod Преподаватель
Day День
Time Время
Group Группа
Disp Дисциплина

В правой части формы расположено текстовое окно Количество студентов (Name — Col_Stud), в которое автоматически заносится информация о количестве студентов после выбора группы. Это обеспечивает процедура, представленная в листинге 5.21.

1
2
3
4
' Листинг 5.21. Обработка щелчка в поле со списком групп учащихся
Private Sub Group_Click()
Col_Stud.Text = Worksheets(2).Cells(Group.ListIndex + 2, 2).Value
End Sub

В верхней части формы присутствует набор элементов управления тина «Флажок». Каждый флажок предназначен для указания определенного номера недели, когда должно проводиться занятие. Значения свойства Name флажков формируются как комбинация символов Ch и номера недели: Chi, Ch2 и т. д. Здесь предполагается, что в учебном блоке не больше 7 учебных недель.

В нижней части формы располагаются три важные функциональные кнопки. При щелчке на кнопке Выход (Name — Com_Out) форма просто закрывается, и никакой записи информации в базу данных первого листа не производится. В листинге 5.22 приведен текст предопределенной процедуры для обработки щелчка на кнопке Выход. Метод Hide позволяет закрыть форму и вернуться на рабочий лист.

1
2
3
4
' Листинг 5.22. Обработка щелчка на кнопке Выход
Private Sub Com_Out_Click()
    Form_Add.Hide
End Sub

Другие две кнопки позволяют перенести на рабочий лист данные, внесенные пользователем в форму. При этом одна из кнопок (Зафиксировать и ввести следующую, Name — Com_Next) после записи оставляет форму активной, а другая (Name — Com_Wr_Out) закрывает ее. При активизации формы автоматически выполняется предопределенная процедура UserForm_Activate, а ее текст приведен в листинге 5.23. Основное ее назначение заключается в заполнении списков преподавателей, групп и т. д. Данные для заполнения берутся со второго листа, о чем уже говорилось.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
' Листинг 5.23. Процедура, выполняемая при активизации формы на рис. 5.17
Private Sub UserForm_Activate()
Ch1.Value = False
Ch2.Value = False
Ch3.Value = False
Ch4.Value = False
Ch5.Value = False
Ch6.Value = False
Ch7.Value = False
'Заполнение заявителей
N = 0
While Worksheets(2).Cells(N + 2, 6).Value <> ""
    N = N + 1
Wend
Boss.Clear
For i = 1 To N
Boss.AddItem Worksheets(2).Cells(i + 1, 6).Value
Next
'Заполнение преподавателей
N = 0
While Worksheets(2).Cells(N + 2, 7).Value <> ""
    N = N + 1
Wend
Prepod.Clear
For i = 1 To N
Prepod.AddItem Worksheets(2).Cells(i + 1, 7).Value
Next
' Заполнение учебных дней
N = 0
While Worksheets(2).Cells(N + 2, 4).Value <> ""
    N = N + 1
Wend
Day.Clear
For i = 1 To N
Day.AddItem Worksheets(2).Cells(i + 1, 4).Value
Next
'Заполнение начала пар
N = 0
While Worksheets(2).Cells(N + 2, 5).Value <> ""
    N = N + 1
Wend
Time.Clear
For i = 1 To N
Time.AddItem Worksheets(2).Cells(i + 1, 5).Value
Next
' Заполнение названий групп
N = 0
While Worksheets(2).Cells(N + 2, 8).Value <> ""
    N = N + 1
Wend
Group.Clear
For i = 1 To N
Group.AddItem Worksheets(2).Cells(i + 1, 8).Value
Next
' Заполнение названий дисциплин
N = 0
While Worksheets(2).Cells(N + 2, 10).Value <> ""
    N = N + 1
Wend
Disp.Clear
For i = 1 To N
    Disp.AddItem Worksheets(2).Cells(i + 1, 10).Value
Next
    Col_Stud.Text = ""
End Sub

Выполнение рассмотренной процедуры приводит к тому, что при активизации формы ввода все расположенные на ней списки автоматически заполняются. Теперь от пользователя требуется указать в них параметры заявки. Когда эго будет сделано, требуется щелчком на одной из двух кнопок зафиксировать введенную информацию. В листинге 5.24 приведена процедура обработки щелчка на кнопке Зафиксировать и ввести следующую.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
' Листинг 5.24. Процедура щелчка на кнопке Зафиксировать и ввести следующую
Private Sub Com_Next_Click()
' Массивы для фиксации пересечений в занятиях
' по группам и преподавателям
Dim Mass(10) As Integer
Dim Mass2(10) As Integer
' Поле заявителя необходимо заполнить
If Boss.ListIndex = -1 Then
    MsgBox ("Выберите заявителя")
    Exit Sub
End If
' Поле преподавателя необходимо заполнить
If Prepod.ListIndex = -1 Then
    MsgBox ("Выберите преподавателя")
    Exit Sub
End If
' Поле для указания дня недели должно быть заполнено
If Day.ListIndex = -1 Then
    MsgBox ("Выберите день")
    Exit Sub
End If
' Поле для указания начала занятий должно быть заполнено
If Time.ListIndex = -1 Then
MsgBox ("Выберите время")
Exit Sub
End If
' Поле для указания группы должно быть заполнено
If Group.ListIndex = -1 Then
    MsgBox ("Выберите группу")
    Exit Sub
End If
' Необходимо выбрать дисциплину
If Disp.ListIndex = -1 Then
    MsgBox ("Выберите дисциплину")
    Exit Sub
End If
' Необходимо указать количество студентов
If IsNumeric(Col_Stud.Text) = False Then
    MsgBox ("Не указано количество студентов")
    Exit Sub
End If
' Подсчет числа заявок на первом листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
' Запись информации на первый лист
Worksheets(1).Cells(N + 4, 1).Value = Boss.Text
Worksheets(1).Cells(N + 4, 2).Value = Prepod.Text
Worksheets(1).Cells(N + 4, 3).Value = Day.Text
Worksheets(1).Cells(N + 4, 4).Value = Time.Text
Worksheets(1).Cells(N + 4, 5).Value = Col_Stud.Text
Worksheets(1).Cells(N + 4, 8).Value = Group.Text
Worksheets(1).Cells(N + 4, 9).Value = Disp.Text
If Ch1.Value = True Then
    Worksheets(1).Cells(N + 4, 10).Value = "*"
    End If
If Ch2.Value = True Then
    Worksheets(1).Cells(N + 4, 11).Value = "*"
End If
If Ch3.Value = True Then
    Worksheets(1).Cells(N + 4, 12).Value = "*"
End If
If Ch4.Value = True Then
    Worksheets(1).Cells(N + 4, 13).Value = "*"
End If
If Ch5.Value = True Then
    Worksheets(1).Cells(N + 4, 14).Value = "*"
End If
If Ch6.Value = True Then
    Worksheets(1).Cells(N + 4, 15).Value = "*"
End If
If Ch7.Value = True Then
    Worksheets(1).Cells(N + 4, 16).Value = "*"
End If
Key = 0 ' Переменная-индикатор при наличии накладок в расписании
Ch_mass = 0
' Счетчик накладок по группам
Ch_mass2 = 0
' Счетчик накладок по преподавателям
' Цикл по заявкам
For it = 4 To 4 + N - 1
' Проверка преподавателя
    q1 = Worksheets(1).Cells(it, 2).Value 'Преподаватель
    q2 = Worksheets(1).Cells(it, 3).Value 'День
    q3 = Worksheets(1).Cells(it, 4).Value 'Время
    Zan_Pr = 0 ' Сброс индикатора занятости преподавателя
    If q1 = Worksheets(1).Cells(N + 4, 2).Value And _
    q2 = Worksheets(1).Cells(N + 4, 3).Value And _
    q3 = Worksheets(1).Cells(N + 4, 4).Value Then
    For Ned = 10 To 16
    If Worksheets(1).Cells(N + 4, Ned).Value <> "" _
        And Worksheets(1).Cells(it, Ned).Value <> "" Then
    Zan_Pr = 1 ' Преподаватель занят
    Exit For
End If
Next
If Zan_Pr = 1 Then
    Mass(Ch_mass) = it
    Ch_mass = Ch_mass + 1
    Key = 1 ' Отмечается факт противоречия в данных
    End If
    End If
'Проверка группы
    q1 = Worksheets(1).Cells(it, 8).Value
    q2 = Worksheets(1).Cells(it, 3).Value
    q3 = Worksheets(1).Cells(it, 4).Value
    Zan_Gr = 0
    If q1 = Worksheets(1).Cells(N + 4, 8).Value And _
    q2 = Worksheets(1).Cells(N + 4, 3).Value And _
    q3 = Worksheets(1).Cells(N + 4, 4).Value Then
    For Ned = 10 To 16
        If Worksheets(1).Cells(N + 4, Ned).Value <> "" And _
        Worksheets(1).Cells(it, Ned).Value <> "" Then
        Zan_Gr = 1
        Exit For
    End If
    Next
        If Zan_Gr = 1 Then
        Mass2(Ch_mass2) = it
        Ch_mass2 = Ch_mass2 + 1
        Key = 1 ' Отмечается факт противоречия в данных
        End If
        End If
    Next ' Завершение цикла по заявкам
If Key = 1 Then
    If Ch_mass > 0 Then ' Если есть противоречия по преподавателю
    Inform_str = "" ' Формирование информационной строки
    For i = 0 To Ch_mass - 1
    If Inform_str <> "" Then
    Inform_str = Inform_str + ","
    End If
    Inform_str = Inform_str + CStr(Mass(i))
    Next
    Inform_str = "Преподаватель занят. Заявка в стр. " + Inform_str
    MsgBox (Inform_str)
    End If
    If Ch_mass2 > 0 Then ' Накладка по группе
    Inform_str = "" ' Формирование информационной строки
        For i = 0 To Ch_mass2 - 1
            If Inform_str <> "" Then
                Inform_str = Inform_str + ","
                End If
                Inform_str = Inform_str + CStr(Mass2(i))
        Next
        Inform_str = "У группы уже есть занятие. Заявка в стр. " + Inform_str
        MsgBox (Inform_str)
        End If
' Выбор варианта действия пользователя
Inform = MsgBox("Если все равно записать заявку - Да. " + _
        " Если продолжить редактирование - Отмена. " + _
        " Если удалить, то нажмите - Нет. ", _
        vbYesNoCancel)
If Inform = vbNo Or Inform = vbCancel Then
' Удаление только что введенных данных
    For i = 1 To 16
    Worksheets(1).Cells(N + 4, i).Value = ""
    Next
End If
End If
End Sub

В начале процедуры подсчитывается количество уже имеющихся заявок на первом листе:

1
2
3
4
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend

Это делается для того, чтобы записать новую заявку в очередную свободную строку. Однако до этого проверяется, все ли данные введены: заявитель, преподаватель, группа и т. д. Что касается полей со списками, то для них индикатором выбора элемента в списке является значение свойства ListIndex (номер выбранного элемента): -1 означает, что в списке не выбран ни один элемент. Например, если не указан день, то следующая конструкция выводит соответствующее сообщение и процедура на этом завершается:

1
2
3
4
If Day.ListIndex = -1 Then
MsgBox ("Выберите день")
Exit Sub
End If

Программный фрагмент проверки ввода числа студентов немного сложнее. Так, для дальнейших действий в этом поле обязательно должно быть число, и это проверяется с помощью внутренней функции IsNumeric:

1
2
3
4
If IsNumeric(Col_Stud.Text) = False Then
MsgBox ("Введите число студентов")
Exit Sub
End If

Функция IsNumeric возвращает значение False, если входной параметр не является числом. Таким образом, если вместо количества студентов пользователь введет строку с включением букв или других символов, то процедура воспримет подобную информацию как некорректную.

Итак, мы рассмотрели так называемый блок предварительной проверки данных. Далее в процедуре располагается фрагмент, позволяющий выявить противоречия с уже имеющимися данными. Для этой проверки вводится переменная Key, которая в начале проверки принимает значение 0, а если в процессе просмотра имеющихся заявок обнаруживается накладка (по преподавателю или по группе), программно устанавливается в значение 1. Это является индикатором для вывода информационного сообщения в конце процедуры. Сама проверка технически достаточно проста — проверяется, есть ли в указанное время занятия в выбранной группе и у данного преподавателя. Однако несколько деталей мы все же поясним.

Так, в начале процедуры определены массивы Mass и Mass2. При вводе новой заявки процедура просматривает все предыдущие, проверяя, нет ли накладок в расписании по преподавателю и группе. Допустим, преподаватель может вести занятие для нескольких групп. Тогда при вводе новой заявки, если у преподавателя уже есть заявка на это время, в массиве Mass запоминается ее строка на первом листе книги, а в счетчик заявок Ch_mass добавляется 1. Например, если в результате просмотра всех имеющихся заявок в переменной Ch_mass будет число 5, это говорит о том, что у преподавателя в это время уже есть 5 других занятий (такое возможно при проведении занятия для нескольких групп одновременно). В конце процедуры на экран будет выведено одно сообщение с упоминанием обо всех этих заявках.

Массив Mass2 предназначен для проверки накладок по группе. Если у рассматриваемой группы yжe есть заявка на это время, то в массиве Mass2 запоминается номер строки этой имеющейся заявки, а в счетчик заявок Ch_mass2 добавляется 1. Например, если в результате просмотра всех имеющихся заявок в переменной Ch_mass2 будет число 1, это говорит о том, что у группы в это время уже есть другое занятие. В конце процедуры на экран выводится окно сообщения с упоминанием обо всех этих заявках. Фактически предназначение массивов — служить буфером для хранения информации, который очищается в начале процедуры.

Теперь несколько слов о завершении процедуры. Если накладок нет, то заявка, созданная в форме, просто остается записанной на первом листе. Если обнаруживается противоречие по группе или преподавателю, то предлагается либо удалить заявку, либо продолжить ее корректировать, либо просто ее оставить на листе. Это реализуется с помощью уже известной вам стандартной функции:

1
2
3
Inform = MsgBox("Если все равно записать, то нажмите — Да. " + _
" Если продолжить редактировать, то нажмите — Отмена. " + _
" Если удалить заявку, то нажмите — Нет. ", vbYesNoCancel)

В этом месте процедуры на экран выводится стандартное диалоговое окно с кнопками Да, Нет и Отмена. В случае выбора варианта Отмена либо Нет выполняется очистка только что введенных данных на листе:

1
2
3
4
5
If inform = vbNo Or inform = vbCancel Then
For i = 1 To 16
Worksheets(1).Cells(N + 4, i).Value = ""
Next
End If

Таким образом, пользователь может отредактировать имеющуюся заявку в форме либо создать новую. А если накладок нет, то набранная заявка просто остается записанной на первом листе. На рис. 5.18 показан результат ввода одной из заявок на занятие.

Рис. 5.18. Заполненная заявка на проведение занятий

Рис. 5.18. Заполненная заявка на проведение занятий

Процедура обработки щелчка на кнопке Зафиксировать и выйти принципиально не отличается от только что рассмотренной. Различия лишь в заключительном фрагменте программного кода, который отдельно приведен в листинге 5.25.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
' Листинг 5.25. Фрагмент процедуры щелчка на кнопке Зафиксировать и выйти
Private Sub Com_Wr_Out_Click()
If Key = 1 Then
    If Ch_mass > 0 Then ' Если есть противоречия по преподавателю
    Inform_str = "" ' Формирование информационной строки
    For i = 0 To Ch_mass - 1
    If Inform_str <> "" Then
    Inform_str = Inform_str + ","
    End If
    Inform_str = Inform_str + CStr(Mass(i))
    Next
    Inform_str = "Преподаватель занят. Заявка в стр. " + Inform_str
    MsgBox (Inform_str)
    End If
    If Ch_mass2 > 0 Then
' Накладка по группе
    Inform_str = "" ' Формирование информационной строки
        For i = 0 To Ch_mass2 - 1
            If Inform_str <> "" Then
                Inform_str = Inform_str + ","
            End If
            Inform_str = Inform_str + CStr(Mass2(i))
        Next
    Inform_str = "У группы уже есть занятие. Заявка в стр. " + Inform_str
    MsgBox (Inform_str)
End If
' Выбор варианта действия пользователя
Inform = MsgBox("Если все равно записать заявку - Да. " + _
    " Если продолжить редактирование - Отмена. " + _
    " Если удалить, то нажмите - Нет. ", _
    vbYesNoCancel)
If Inform = vbNo Or Inform = vbCancel Then
' Удаление только что введенных данных
    For i = 1 To 16
    Worksheets(1).Cells(N + 4, i).Value = ""
    Next
Else
Form_Add.Hide
End If
Else
Form_Add.Hide
End If
End Sub

Итак, можно подвести итоги. Мы познакомились с процедурами, связанными с формой для ввода заявок. Однако, несмотря на внешне привлекательный вид электронной формы и некоторые сервисные возможности, подобное заполнение заявок при активной работе пользователя является в некоторых случаях не очень удобным.

В дальнейшем мы рассмотрим более удобную возможность формирования новых заявок на базе существующих. При этом наши действия будут аналогичны функциям меню Копировать и Вставить. В этом случае при минимуме действий со стороны пользователя автоматически будет формироваться новая строка на первом листе с частично заполненной информацией.

Форма для подбора аудитории

В этом разделе мы рассмотрим один из наиболее интересных компонентов разработки — форму для подбора аудиторий для заявок на проведение учебных занятий. Сама форма с разнообразными элементами управления приведена на рис. 5.19, а для ее активизации на первом листе имеется кнопка с соответствующей надписью. В листинге 5.26 приведен текст процедуры, с помощью которой рассматриваемую электронную форму можно вывести на экран. Из текста видно, что в качестве значения свойства Name для формы подбора аудитории выбрано Form_Podbor.

1
2
3
4
' Листинг 5.26. Обработка щелчка на кнопке Подбор аудитории на первом листе
Private Sub Input_Auditoria_Click()
    Form_Podbor.Show
End Sub

Рис. 5.19. Форма подбора аудитории

Рис. 5.19. Форма подбора аудитории

Рассмотрим последовательно все основные расположенные на форме (рис. 5.19) элементы. В левом верхнем углу находится элемент управления типа ListBox (Name — Num_Str), а чуть выше располагается поясняющая подпись к нему — Номер строки. Этот список при активизации формы автоматически заполняется заявками, для которых еще не подобрана аудитория. Точнее не самими заявками, а номерами строк первого листа, где эти заявки расположены. В дальнейшем, выбрав (выделив) в списке номер заявки, мыс помощью специально разработанного алгоритма будем подбирать для нее подходящую аудиторию.

В левой части рис. 5.19 расположена группа элементов типа Label — они предназначены для отображения параметров заявки, выбранной в списке Num_Str. Эти элементы выделяются светлым цветом на фоне формы и снабжены поясняющими подписями. В табл. 5.3 приведены значения свойства Name элементов типа Label и соответствующие подписи.

Теперь перейдем к элементу управления Frame с подписью Поиск аудитории, который включает в себя несколько объектов. В верхней части этого условного контейнера объектов располагается кнопка Начать (Name — Begin_Poisk), щелчком на которой запускается алгоритм подбора аудитории для указанной в списке Num_Str заявки.

Таблица 5.3. Элементы управления Label для указания параметров заявок

Name Подпись
Boss Декан
Prepod Преподаватель
Day День
Times Время
Group Группа
Disp Дисциплина
Col_Stud Количество студентов

Программа обнаруживает совместные заявки на одно занятие для нескольких групп и подбирает им одну (достаточно вместительную) аудиторию. Так, при выборе в списке Num_Str заявки для обслуживания, возможна ситуация, когда у указанного преподавателя аналогичное занятие есть и в других группах. Эту ситуацию программа «видит» (при выделении одной из таких фупповых заявок в списке Num_Str) и запоминает во внутренней структуре данных. В дальнейшем по щелчку на кнопке Начать производится поиск общей аудитории для всех этих групп.

Продолжим обсуждение элементов, находящихся в рамке Поиск аудитории на форме. Элемент управления типа ListBox (Name — SpAyd), куда программная процедура записывает подходящие для заявки аудитории, расположен ниже кнопки Начать. Действия пользователя заключаются в указании конкретной аудитории в этом списке (щелчком мышью следует выделить одну из подходящих аудиторий). Элемент управления типа Label (Name — Inf_vmest), расположенный рядом с подписью Вместимость, используется для отображения вместимости выбранной аудитории в списке SpAyd. Теперь пользователю следует нажать кнопку Записать аудиторию (Name — Com_Write), что позволяет зафиксировать аудиторию, выбранную в списке, в строке заявки на первом листе.

Важно отметить следующую особенность, о которой выше мыуже упоминали. При выборе в списке Num_Str заявки для обслуживания алгоритм автоматически просматривает наличие групповых занятий (одно занятие для нескольких групп). Эта ситуация запоминается во внутренней структуре данных, которая будет использоваться в дальнейшем при подборе аудитории.

В правой нижней части формы расположен элемент «Надпись» (Name — Inf_z), который предназначен для вывода информационных сообщений о наличии групповых заявок. Заполнение этого элемента производится при щелчке на списке Num_Str. В этом случае указывается, какие заявки комбинируются с выбранной. Таким образом, мы рассмотрели основные элементы управления, присутствующие на форме, и теперь можем перейти к описанию программного кода.

По щелчку на кнопке Подобрать аудиторию на первом листе происходит активизация этой формы. В этом случае выполняется предопределенная процедура UserForm_Activate (листинг 5.27).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
' Листинг 5.27. Процедура, выполняемая при активизации формы подбора аудиторий
Private Sub UserForm_Activate()
' Подсчет числа заявок на первом листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
N = N + 1
Wend
' Подсчет числа аудиторий
N_Rooms = 0
While Worksheets(2).Cells(N_Rooms + 2, 1).Value <> ""
N_Rooms = N_Rooms + 1
Wend
' Заполнение списка заявок
Num_Str.Clear
For i = 1 To N
Obslz = Worksheets(1).Cells(i + 3, 6).Value
If Obslz = "" Then
Num_Str.AddItem Worksheets(1).Cells(i + 3, 1).Row
End If
Next
'Заполнение списка аудиторий
If Num_Str.ListCount > 0 Then
Num_Str.ListIndex = Num_Str.ListCount - 1
End If
Com_Write.Enabled = False
End Sub

Действия, выполняемые в соответствии с данной процедурой, достаточно несложные, поэтому мы ограничимся комментарием, присутствующим в тексте листинга. Таким образом, пользователь при открытии формы подбора аудитории получил заполненный список заявок, для которых еще не подобрана аудитория. От него далее требуется выделить заявку на занятие, для которой он собирается поставить аудиторию. В этом случае нам понадобится процедура, выполняемая по щелчку на списке Num_Str, текст которой приведен в листинге 5.28. Далее мы прокомментируем ее основные программные конструкции.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
' Листинг 5.28. Процедура, выполняемая при щелчке на списке Num_Str
Private Sub Num_Str_Click()
Inf_z.Caption = "" 'Очистка информационного поля
Select_vibor = CInt(Num_Str.Text) 'Номер выделенной заявки
' Перенос информации о параметрах заявки на форму
Boss.Caption = Worksheets(1).Cells(Select_vibor, 1).Value
Prepod.Caption = Worksheets(1).Cells(Select_vibor, 2).Value
Day.Caption = Worksheets(1).Cells(Select_vibor, 3).Value
Times.Caption = Worksheets(1).Cells(Select_vibor, 4).Value
Col_Stud.Caption = Worksheets(1).Cells(Select_vibor, 5).Value
Group.Caption = Worksheets(1).Cells(Select_vibor, 8).Value
Disp.Caption = Worksheets(1).Cells(Select_vibor, 9).Value
Ned.Caption = ""
For i = 10 To 16
    If Worksheets(1).Cells(Select_vibor, i).Value <> "" Then
    Ned.Caption = Ned.Caption + CStr(i - 9) + ","
    End If
Next
' Подсчет числа заявок на первом листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
N_Group = 0 ' Переменная для подсчета разных групп в одной аудитории
For i = 1 To N ' Основной цикл по заявкам
    Num = i + 3
    If Num <> Select_vibor Then ' Пропускаем выбранную заявку
    Prep = Worksheets(1).Cells(Num, 2).Value
    Day_Ned = Worksheets(1).Cells(Num, 3).Value
    Vre = Worksheets(1).Cells(Num, 4).Value
    Ob = Worksheets(1).Cells(Num, 6).Value
' Если у необслуженной заявки совпадают — день, время и преподаватель
    If Prep = Prepod.Caption And Day_Ned = Day.Caption And _
    Vre = Times.Caption And Ob = "" Then
    Zan = 0
    For j = 10 To 16
    If Worksheets(1).Cells(Num, j).Value = "*" And Worksheets(1).Cells(Select_vibor, j).Value = "*" Then
    Zan = 1 ' Если есть пересечение занятий
    Exit For
    End If
Next
If Zan = 1 Then
' Отмечаем информацию о совместных занятиях
    N_Group = N_Group + 1
    Mass_Group(N_Group) = Num
    End If
End If
End If
Next ' Завершение цикла по заявкам
' Выбранная завка сохраняется в элементе с нулевым индексом
Mass_Group(0) = Select_vibor
' Вывод информации о совместных заявках
If N_Group > 0 Then
    Inf_z.Caption = "Совместные заявки в строках "
    For i = 1 To N_Group
' Корректировка числа студентов
        Col_Stud.Caption = CInt(Col_Stud.Caption) + _
        Worksheets(1).Cells(Mass_Group(i), 5).Value
' Перечисление строк групповых занятий на 1-м листе
        Inf_z.Caption = Inf_z.Caption + Str(Mass_Group(i)) + ","
    Next
End If
End Sub

В начале процедуры в совокупность надписей на форме записывается информация о параметрах выбранной заявки. Например, строка Boss.Caption = Worksheets(1).Cells(Select_vibor, 2).Value заполняет поле заявителя на форме — элемент Label с именем Boss. Далее в цикле

1
2
3
4
5
For i = 10 To 16
    If Worksheets(1).Cells(Select_vibor, i).Value <> "" Then
    Ned.Caption = Ned.Caption + CStr(i - 9) + ","
    End If
Next

в надпись с именем Ned записываются номера недель, когда занятия будут проводиться. Как уже говорилось, если на первом листе в соответствующей ячейке присутствует символ звездочка, то, следовательно, запятые на этой неделе есть.

Для отслеживания групповых занятий в разделе General определяется счетчик количества групповых занятий (N_Group). Еще один массив предназначен для запоминания номеров строк заявок с общим одновременным занятием в одной аудитории (Mass_Group). На рис. 5.20 показана область описания общих переменных для рассматриваемой формы.

Рис. 5.20. Общие переменные формы подбора аудитории

Рис. 5.20. Общие переменные формы подбора аудитории

Понятно, что информация о групповых заявках должна быть известна и процедурам, связанным с их обслуживанием, а именно: процедуре поиска аудитории и процедуре записи выбранной аудитории. Поэтому в общей области определения для рассматриваемой формы необходимо отвести память для переменной и массива.

В процедуре Num_Str_Click основной цикл заключается в переборе всех необслуженных заявок на первом листе. В начале этой процедуры переменная N_Group устанавливается в 0, а при обнаружении такого же занятия (у того же преподавателя) в другой группе увеличивается на 1.

В результате, если у выбранной в списке Num_Str заявки находятся совместные, то информация о них выводится в элемент надпись, расположенный в нижней части формы:

1
2
3
4
5
6
7
8
If N_Group > 0 Then
Inf_z.Caption = "Совместные заявки в строках "
For i = 1 To N_Group
Col_Stud.Caption = CInt(Col_Stud.Caption) + _
Worksheets(1).Cells(Mass_Group(i), 5).Value
Inf_z.Caption = Inf_z.Caption + Str(Mass_Group(i)) + ","
Next
End If

Здесь производится суммирование количества студентов во всех объединяемых группах в надписи Col_Stud.

Таким образом, когда мы выделяем мышью в списке одну из заявок, то с помощью предопределенной процедуры, выполняемой по щелчку в списке Num_Str (с подписью Номер строки), выполняются следующие действия:

  • Заполняются информационные надписи на форме параметрами заявки.
  • Просматривается наличие групповых заявок, и если они есть, то в массив Mass_Group записываются номера строк, в которых эти заявки расположены на первом листе. Количество групповых заявок отображается в переменной N_Group.
  • Информация об имеющихся групповых занятиях выводится в информационную надпись в нижней части экрана.

Таким образом, в результате описанных действий мы подготовились к процедуре , выполняемой по кнопке Начать, которая запускает алгоритм поиска подходящих аудиторий для указанной заявки. Эта процедура Begin_Poisk_Click приведена в листинге 5.29, а далее мы прокомментируем ее основные моменты.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
' Листинг 5.29. Процедура, выполняемая при щелчке на кнопке Начать
Private Sub Begin_Poisk_Click()
Inf_vmest.Caption = ""
SpAyd.Clear
If Num_Str.ListIndex = -1 Then
    MsgBox ("Не выбрана заявка на занятие")
    Exit Sub
End If
' Подсчет числа аудиторий
Nom = 0
While Worksheets(2).Cells(Nom + 2, 1).Value <> ""
    Nom = Nom + 1
Wend
' Подсчет числа заявок
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To Nom ' Цикл по аудиториям
    Ayd = Worksheets(2).Cells(i + 1, 1).Value
' Проверка вместимости
    If Worksheets(2).Cells(i + 1, 2).Value >= CInt(Col_Stud.Caption)
Then
    SpAyd.AddItem Ayd
    End If
Next
End Sub

Например, на рис. 5.21 показано, что вместе с текущей заявкой есть еще одна — совместная (одно занятие для нескольких групп). В списке аудиторий приведен перечень подходящих для указанного занятия аудиторий (результат щелчка на кнопке Начать — в этом случае подбираются аудитории подходящие по вместимости для двух групп).

Рис. 5.21. Форма подбора аудиторий

Рис. 5.21. Форма подбора аудиторий

Так, в начале процедуры в листинге 5.28 проверяется, сделан ли выбор заявки, и если нет, то процедура завершается, так как обслуживать нечего:

1
2
3
4
If Num_Str.ListIndex.ListIndex = -1 Then
MsgBox ("Не выбран номер строки заявки")
Exit Sub
End If

После этого сравнивается количество мест в аудитории с числом студентов и если аудитория мала, то она также не рассматривается. Это реализуется с помощью следующей конструкции:

1
If Worksheets(2).Cells(i + 1, 2).Value >= CInt(Col_Stud.Caption) Then,

где учитывается, что во втором столбце на втором листе указано количество мест в аудитории.

На рис. 5.21 была показана форма с подбором возможных аудиторий для указанной заявки. Далее пользователь должен гцелчком мыши в списке с отобранными аудиториями указать, какую конкретно он намеревается записать для обслуживаемой заявки.

При щелчке на списке выполняется предопределенная процедура SpAyd_Click. Основное ее назначение — фиксация (для процедуры, выполняемой по щелчку на кнопке Записать аудиторию) конкретной аудитории для заявки, а также вывод информации о ее вместимости. Сама процедура приведена в листинге 5.30.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
' Листинг 5.30. Процедура, выполняемая при щелчке на списке SpAyd
Private Sub SpAyd_Click()
' Подсчет числа аудиторий на втором листе
N = 0
While Worksheets(2).Cells(N + 2, 1).Value <> ""
    N = N + 1
Wend
For i = 2 To N + 1
    If SpAyd.Text = Worksheets(2).Cells(i, 1).Value Then
' При нахождении выбранной аудитории на втором листе
    Inf_vmest.Caption = Worksheets(2).Cells(i, 2).Value
    Exit For
    End If
Next
Com_Write.Enabled = True
End Sub

Для рассматриваемой формы осталось рассмотреть процедуру записи информации на лист Заявки (листинг 5.31).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
' Листинг 5.31. Процедура, выполняемая при щелчке на кнопке Записать
Private Sub Com_Write_Click()
If SpAyd.ListIndex = -1 Then
    MsgBox ("Не выбрана аудитория")
    Exit Sub
End If
Select_vibor = CInt(Num_Str.Text)
Inf_vmest.Caption = "" ' Очистка информационного поля
' Запись информации на первый лист
For i = 0 To N_Group
    Worksheets(1).Cells(Mass_Group(i), 6).Value = "да"
    Worksheets(1).Cells(Mass_Group(i), 7).Value = SpAyd.Text
Next
Com_Write.Enabled = False ' Запрет доступа для записи
Num_Str.Clear ' Очистка списков
SpAyd.Clear
' Заполнение списка заявок
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To N
If CStr(Worksheets(1).Cells(i + 3, 6).Value) = "" Then
    Num_Str.AddItem Worksheets(1).Cells(i + 3, 1).Row
End If
Next
End Sub

Лист Расписание

В этом разделе разберем одну из основных возможностей программы составление расписания. Для этого в программе используются два листа Расписание и Потоки.

Название потока может быть взято из списка групп (расположенного на втором листе книги), а может быть чисто символическим; запись в первом столбце даже может отсутствовать, но в последующих столбцах названия групп должны присутствовать (тогда они будут отражены в расписании).

Лист Потоки является вспомогательным и используется для задания потоков и групп, для которых мы намереваемся построить расписание занятий. Поэтому созданные нами ранее две группы объединим в общий поток и внесем в лист Потоки (рис. 5.22). Структура листа Потоки следующая: в первом столбце располагаются потоки, а последующих столбцах соответствующей строки — группы, входящие в поток.

Рис. 5.22. Организация листа Потоки

Рис. 5.22. Организация листа Потоки

Далее необходимо создать лист Расписание (рис. 5.23). Здесь три элемента управления: одна кнопка и два поля со списком. В полях со списком пользователю следует выбрать интервалы недель и затем щелкнуть на кнопке Заполнить. В результате на листе отобразится расписание для групп, указанных на листе Потоки.

Рис. 5.23. Организация листа Расписание

Рис. 5.23. Организация листа Расписание

На рис. 5.24 показан результат заполнения листа Расписание. И теперь разберем необходимые технические шаги для этого. Для работы с расписанием нам необходимо иметь заполненные списки недель. Данное заполнение мы выполним при активизации листа Расписание (листинг 5.32).

1
2
3
4
5
6
7
8
9
10
11
12
13
' Листинг 5.32. Процедура, выполняемая при активизации листа Расписание
Private Sub Worksheet_Activate()
N = 0
While Worksheets(2).Cells(N + 2, 3).Value <> ""
    N = N + 1
Wend
L1.Clear
L2.Clear
For i = 1 To N
    L1.AddItem Worksheets(2).Cells(i + 1, 3).Value
    L2.AddItem Worksheets(2).Cells(i + 1, 3).Value
Next
End Sub

Рис. 5.24. Формирование листа Расписание

Рис. 5.24. Формирование листа Расписание

Значения свойства Name элементов типа «Поле со списком» выберем L1 и L2 соответственно, а для кнопки Заполнить установим у аналогичного свойства значение Zapolnit. В листинге 5.33 приведена ключевая процедура, которая формирует заполнение листа Расписание.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
' Листинг 5.33. Процедура, выполняемая при щелчке на кнопке Заполнить
Private Sub Com_Start_Click()
Dim Mass(10) As Integer
' Очистка предыдущего расписания
Range("a5:AZ100").Select
Selection.ClearContents
Selection.Interior.ColorIndex = 0
' Подсчет числа потоков
NP = 0
While Worksheets("Потоки").Cells(NP + 2, 1).Value <> _
"" Or Worksheets("Потоки").Cells(NP + 2, 2).Value <> ""
NP = NP + 1
Wend
' Подсчет количества групп, входящих в поток
For i = 1 To NP
    Mass(i) = 0
    j = 0
    While Worksheets("Потоки").Cells(i + 1, j + 2).Value <> ""
    j = j + 1
    Wend
    Mass(i) = j
Next
' Подсчет числа аудиторий
N_Rooms = 0
While Worksheets("Нач. инф.").Cells(N_Rooms + 2, 1).Value <> ""
    N_Rooms = N_Rooms + 1
Wend
Sct = 0 ' Счетчик столбцов
'Заполнение названий групп и потоков
For i = 1 To NP
    Potok = Worksheets("Потоки").Cells(i + 1, 1).Value
    For j = 1 To Mass(i)
    Cells(5, Sct + 3).Value = Potok
    Cells(6, Sct + 3).Value = Worksheets("Потоки").Cells(i + 1, 1).Value
    Sct = Sct + 1
    Next
Next
' Подсчет числа дней
N_Days = 0
While Worksheets("Нач. инф.").Cells(N_Days + 2, 4).Value <> ""
N_Days = N_Days + 1
Wend
'Подсчет числа занятий в течение дня
N_Times = 0
While Worksheets("Нач. инф.").Cells(N_Times + 2, 5).Value <> ""
    N_Times = N_Times + 1
Wend
' Количество строк в расписании
DayTimes = N_Times * N_Days
' Заполнение первых двух столбцов
Stroka = 7
For i = 1 To N_Days
    For j = 1 To N_Times
    Cells(Stroka, 1).Value = Worksheets("Нач. инф.").Cells(i + 1, 4).Value
    Cells(Stroka, 2).Value = Worksheets("Нач. инф.").Cells(j + 1, 5).Value
    Stroka = Stroka + 1
    Next
Next
' Вычисление числа записей на первом листе
N = 0
While Worksheets("Заявки").Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
' Цикл по строкам первого листа
For i = 1 To N
    Days = CStr(Worksheets("Заявки").Cells(i + 3, 3).Value)
    Times = CStr(Worksheets("Заявки").Cells(i + 3, 4).Value)
    Group = CStr(Worksheets("Заявки").Cells(i + 3, 8).Value)
    Prepod = CStr(Worksheets("Заявки").Cells(i + 3, 2).Value)
    Disp = CStr(Worksheets("Заявки").Cells(i + 3, 9).Value)
    Aud = CStr(Worksheets("Заявки").Cells(i + 3, 7).Value)
    Obs = CStr(Worksheets("Заявки").Cells(i + 3, 6).Value)
    Indic = 0
' Попадает ли заявка в указанный интервал недель?
    For j = CInt(L1.Text) To CInt(L2.Text)
If CStr(Worksheets(1).Cells(i + 3, 9 + j).Value) = "*" Then
Indic = 1
    Exit For
    End If
Next
' Если заявка попадает в указанный интервал недель
If Indic = 1 Then
' Цикл по столбцам
For im = 1 To Sct
If Group = CStr(Cells(5, im + 2).Value) Or Group = CStr(Cells(6, im + 2).Value) Then
Stolbec = im + 2
For j = 1 To DayTimes
If CStr(Cells(6 + j, 1).Value) = Days And CStr(Cells(6 + j, 2).Value) = Times Then
    If Cells(6 + j, Stolbec).Value <> "" Then
    Cells(6 + j, Stolbec).Value = _
    Cells(6 + j, Stolbec).Value + Chr(10)
    End If
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + Disp + " "
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + Prepod
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + " Ауд." + Aud + Chr(10)
    For jj = CInt(L1.Text) To CInt(L2.Text)
    ask = CStr(Worksheets(1).Cells(i + 3, jj + 9).Value)
    If ask = "*" Then
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + " " + Str(jj) + ","
    End If
    Next
    End If
    Next
    End If
    Next
    End If
Next
Cvet1 = 35 ' Оформление цветом
Cvet2 = 40
Cell1= Cells(7, 1).Value
For i = 7 To 100
    Cel12= Cells(i, 1).Value
    If Cell1 <> Cell2 Then
    Vr_cvet = Cvet1
    Cvet1 = Cvet2
    Cvet2 = Vr_cvet
    End If
        Cel11= Cel12
    Rows(i).Select
    Selection.Interior.ColorIndex = Cvet1
Next
Range("A7").Select
End Sub

Разберем некоторые конструкции процедуры, выполняемой по щелчку на кнопке Заполнить. Вначале производится очистка имеющейся старой информации на листе:

1
2
Range("A5:Z100").Select
Selection.ClearContents

Здесь для упрощения выделяется, а затем очищается заведомо большая область на листе, внутри которой находится информация о расписании. В следующем фрагменте подсчитывается количество потоков, выводимых в расписании:

1
2
3
4
5
NP = 0
While Worksheets("Потоки").Cells(NP + 2, 1).Value <> _
"" Or Worksheets("Потоки").Cells(NP + 2, 2).Value <> ""
NP = NP + 1
Wend

Затем в массиве Mass вычисляется, сколько групп в каждом потоке. Так, в элементе Mass (1) подсчитывается количество групп в первом выводимом в расписании потоке, в Mass (2) — во втором, и т. д. Процесс заполнения массива Mass выполняется следующим образом:

1
2
3
4
5
6
7
8
For i = 1 To NP
Mass(i) = 0
j = 0
While Worksheets("Потоки").Cells(i + 1, j + 2).Value <> ""
j = j + 1
Wend
Mass(i) = j
Next

Далее в пятую и шестую строки листа Расписание выводятся названия потоков и групп, для которых мы его составляем. Аналогичным образом в первые два столбца листа программно заносятся учебные дни и время начала занятий. После этого выполняется цикл но всем строкам на первом листе, и если при этом очередная заявка относится к одной из рассматриваемых групп, то она выводится в соответствующей ячейке (которая определяется днем, временем, группой либо потоком).

Если подвести некий промежуточный итог, то можно сказать следующее: мы имеем почти готовую версию расписания. На рис. 5.24 поля со списками позволяют выбрать интервал недель, для которого мы хотим составить расписание. Фактически на этом функциональные возможности листа можно было бы считать исчерпанными. Однако мы реализуем дополнительные сервисные возможности по вводу заявок. В большой доли случаев приходится копировать занятие по определенной дисциплине. Часто также приходится какие-то заявки удалять. Реализуем это с помощью дополнительных элементов управления. На рис. 5.25 добавлены:

  • кнопка Копировать (Name — Com_Copy);
  • кнопка Вставить (Name — Com_Paste);
  • кнопка Удалить (Name — Com_Delete);
  • текстовое окно (Name — Inform).

Рис. 5.25. Добавление элементов управления на лист Расписание

Рис. 5.25. Добавление элементов управления на лист Расписание

Начнем рассмотрение с кнопки Копировать. В этом случае необходимо выделить заполненную ячейку расписания. Далее с помощью кнопки Копировать выделенная (или выделенные) заявка копируется во внутренний буфер. В листинге 5.34 показана процедура, которую необходимо выполнить но щелчку на кнопке.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
' Листинг 5.34. Процедура, выполняемая при щелчке на кнопке Копировать
Private Sub CommandButton4_Click()
NumRow = ActiveCell.Row
NumCol = ActiveCell.Column
Group = CStr(Cells(6, NumCol))
Days = CStr(Cells(NumRow, 1))
Times = CStr(Cells(NumRow, 2))
ColZaavok = 0
' Переменная для подсчета выделенных заявок
N = 0 ' Расчет числа заявок на 1-м листе
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To N
    Day1 = CStr(Worksheets(1).Cells(i + 3, 3).Value)
    Time1 = CStr(Worksheets(1).Cells(i + 3, 4).Value)
    Group1 = CStr(Worksheets(1).Cells(i + 3, 8).Value)
' Если параметры заявки совпадают
    If Time1 = Times And Day1 = Days And Group = Group1 Then
    For j = CInt(L1.Text) To CInt(L2.Text)
        Zan = Worksheets("Заявки").Cells(i + 3, 9 + j).Value
        If Zan = "*" Then
            ColZaavok = ColZaavok + 1
            MassZaavok(ColZaavok) = i + 3
            Exit For
        End If
        Next
    End If
Next
Inform.Text = ""
' Очистка текстового окна для сообщений
If ColZaavok > 0 Then
' Вывод номеров строк заявок в окно сообщений
    For i = 1 To ColZaavok
    Number.Text = Number.Text + Str(MassZaavok(i)) + ","
    Next
Else
    Number.Text = ""
End If
End Sub

Данная процедура фиксирует в переменной ColZaavok количество заявок в выделенной ячейке (как правило, эго одна заявка, однако может быть две или три). Также в массиве MassZaavok запоминаются номера строк первого листа, в которых размещаются отмеченные заявки. Разместить эти переменную и массив необходимо в общей области (рис. 5.26)

Рис. 5.26. Описание переменной и массива в общей области

Рис. 5.26. Описание переменной и массива в общей области

Теперь необходимо разместить процедуру обработки щелчка на кнопке Вставить. Она представлена в листинге 5.35.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
' Листинг 5.35. Процедура, выполняемая при щелчке на кнопке Вставить
Private Sub Com_Paste_Click()
NewRow = ActiveCell.Row
NewCol = ActiveCell.Column
If Inform.Text = "" Then
    Exit Sub
End If
Ngroup = 0
While Worksheets(2).Cells(Ngroup + 2, 8).Value <> ""
    Ngroup = Ngroup + 1
Wend
For i = 1 To ColZaavok ' Цикл по числу скопированных заявок
    N = 0
    While Worksheets("Заявки").Cells(N + 4, 1).Value <> ""
    N = N + 1
    Wend
    Worksheets(1).Cells(N + 4, 1).Value = _
    Worksheets(1).Cells(MassZaavok(i), 1).Value
    Worksheets(1).Cells(N + 4, 2).Value = _
    Worksheets(1).Cells(MassZaavok(i), 2).Value
    Worksheets(1).Cells(N + 4, 3).Value = CStr(Cells(NewRow, 1))
    Worksheets(1).Cells(N + 4, 4).Value = Cells(NewRow, 2)
    For j = 1 To Ngroup
    If Worksheets(2).Cells(j + 1, 8).Value = Cells(6, NewCol) Then
        Exit For
    End If
    Next
    Worksheets(1).Cells(N + 4, 5).Value = Worksheets(2).Cells(ib + 1, 9).Value
    Worksheets(1).Cells(N + 4, 8).Value = CStr(Cells(6, NewCol))
    For m = 9 To 16
    Worksheets(1).Cells(N + 4, m).Value = Worksheets(1).Cells(MassZaavok(i), m).Value
    Next
    Cells(NewRow, NewCol).Value = _
    Cells(NewRow, NewCol).Value + Worksheets(1).Cells(N + 4,
    9).Value + _
    " " + Worksheets(1).Cells(N + 4, 2).Value + Chr(10)
    For l = CInt(L1.Text) To CInt(L2.Text)
    If CStr(Worksheets(1).Cells(i + 3, l + 9).Value) = "*" Then
    Cells(NewRow, NewCol).Value = _
    Cells(NewRow, NewCol).Value + " " + Str(l) + ","
    End If
    Next
Next
End Sub

Теперь мы можем легко добавить еще одно занятие. На рис. 5.27 добавлено еще одно занятие к показанным на рис. 5.24. Для этого мы сначала выделили ячейку D14 и щелчком на кнопке Копировать зафиксировали параметры заявки во внутренней структуре данных. После этого необходимо выделить ячейку D10 и щелкнуть на кнопке Вставить. В результате на первом листе сформируется новая заявка и мы ее увидим на листе Расписание.

Рис. 5.27. Выполнение изменений н расписании занятий

Рис. 5.27. Выполнение изменений н расписании занятий

На рис. 5.27 присутствует кнопка Удалить. Уже из названия следует, что она предназначена для удаления заявок. Для этого требуется лишь предварительно выделить заполненную ячейку расписания. В листинге 5.36 приведена процедура, выполняемая по щелчку на кнопке Удалить.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
' Листинг 5.36. Процедура, выполняемая при щелчке на кнопке Удалить
Private Sub Com_Delete_Click()
Dim Mass(10) As Integer
NumRow = ActiveCell.Row
NumCol = ActiveCell.Column
Group = CStr(Cells(6, NumCol))
Days = CStr(Cells(NumRow, 1))
Times = CStr(Cells(NumRow, 2))
ColZaavok = 0
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To N
If CStr(Worksheets(1).Cells(i + 3, 4).Value) = Times And _
Days = CStr(Worksheets(1).Cells(i + 3, 3).Value) _
And Group = CStr(Worksheets(1).Cells(i + 3, 8).Value) Then
    For j = CInt(L1.Text) To CInt(L2.Text)
    If Worksheets(1).Cells(i + 3, 9 + j).Value = "*" Then
    ColZaavok = ColZaavok + 1
    Mass(ColZaavok) = i + 3
    Exit For
    End If
    Next
End If
Next
Inform.Text = ""
For i = ColZaavok To 1 Step -1
	j = Mass(i)
    Worksheets(1).Rows(j).Delete
    Inform.Text = "Заявки удалены"
Next
Cells(NumRow, NumCol).Value = ""
End Sub

Лист Загрузка

Рассмотрим еще один лист, который дает представление о загрузке аудиторного фонда. Первый шаг заключается в несложном оформлении листа и создании двух элементов управления: поля со списком и кнопки (рис. 5.28).

Рис. 5.28. Организация листа Загрузка

Рис. 5.28. Организация листа Загрузка

Для заполнения номерок недель в поле со списком мы воспользуемся процедурой, выполняемой при активизации рассматриваемого листа.

1
2
3
4
5
6
7
8
9
10
11
' Листинг 5.37. Процедура, выполняемая при активизации листа Загрузка
Private Sub Worksheet_Activate()
N = 0
While Worksheets(2).Cells(N + 2, 3).Value <> ""
    N = N + 1
Wend
L1.Clear
For i = 1 To N
    L1.AddItem Worksheets(2).Cells(i + 1, 3).Value
Next
End Sub

Теперь пользователю необходимо выбрать интересующую его учебную неделю, после чего щелчок на кнопке Заполнить позволяет получить на листе информацию об использовании аудиторного фонда (рис. 5.29). Для этого необходимо оформить процедуру обработки щелчка на кнопке Заполнить в виде, представленном в листинге 5.38.

Рис. 5.29. Просмотр загрузки аудиторного фонда

Рис. 5.29. Просмотр загрузки аудиторного фонда

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
' Листинг 5.38. Процедура, выполняемая при щелчке на кнопке Заполнить
Private Sub Zapolnit_Click()
' Установка цветов для обозначения факультетов
Dim Colors(50) As Integer
Colors(1) = 4
Colors(2) = 22
Colors(3) = 19
Colors(4) = 24
Colors(5) = 26
For i = 6 To 50
    Colors(i) = 28
Next
If L1.ListIndex = -1 Then ' Выход, если не выбрана неделя
    MsgBox (" Не выбрана неделя ")
    Exit Sub
End If
Range("A5:AZ100").Select
' Очистка области данных
Selection.ClearContents
' Подсчет количества учебных дней в неделе
N_Day = 0
While Worksheets(2).Cells(N_Day + 2, 4).Value <> ""
    N_Day = N_Day + 1
Wend
' Подсчет количества занятий в течение дня
N_Times = 0
While Worksheets(2).Cells(N_Times + 2, 5).Value <> ""
    N_Times = N_Times + 1
Wend
' Подсчет количества аудиторий
N_Ayd = 0
While Worksheets(2).Cells(N_Ayd + 2, 1).Value <> ""
    N_Ayd = N_Ayd + 1
Wend
DaysTimes = N_Day * N_Times
N_Boss = 0 ' Подсчет заявителей
While Worksheets(2).Cells(N_Boss + 2, 6).Value <> ""
    N_Boss = N_Boss + 1
Wend
Range("B7:AZ100").Select
With Selection.Interior
' Заливка белым цветом области вывода
    .ColorIndex = 0
    .Pattern = xlSolid
End With
For i = 1 To 10
Cells(2, 2 + i * 2).Select
With Selection.Interior ' Установка обозначений цветов
.ColorIndex = colors(i) ' заявителей
.Pattern = xlSolid
End With
' Установка подписей заявителей для соответствующих цветов
Cells(1, 2 + i * 2).Value = Worksheets(2).Cells(i + 1, 6).Value
Next
' Подсчет количества строк с заявками на 1-м листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
Stroka = 7
' Данные на листе размещаются начиная с седьмой строки
For i = 1 To N_Ayd ' Установка подписей аудиторий
Cells(Stroka, 1).Value = Worksheets(2).Cells(i + 1, 1).Value
Stroka = Stroka + 1
Next
St = 1
For i = 1 To N_Day ' Установка подписей занятий
    For j = 1 To N_Times
    St = St + 1
    Cells(5, St).Value = Worksheets(2).Cells(i + 1, 4).Value
    Cells(6, St).Value = Worksheets(2).Cells(j + 1, 5).Value
    Next
Next
For i = 1 To DaysTimes
    For j = 1 To N_Ayd
    Cells(6 + j, i + 1) = 0 'Инициализация ячеек
    Next
Next
For i = 4 To N + 3 ' Цикл по строкам заявок
    If CStr(Worksheets(1).Cells(i, 6).Value) = "да" Then
' Выполнение условия по обслуживанию заявки
    Stroka = 0
    For m = 1 To N_Ayd
    If CStr(Worksheets(1).Cells(i, 7).Value) = _
    CStr(Cells(m + 6, 1).Value) Then
    Stroka = m + 6
    Exit For
    End If
    Next
If Stroka > 0 And _
CStr(Worksheets(1).Cells(i, CInt(L1.Text) + 9).Value) ="*" Then
' Если есть строка с указанной аудиторией
    For m = 1 To DaysTimes
' Нахождение столбца на листе для помещения заявки
    If CStr(Worksheets(1).Cells(i, 3).Value) = _
    CStr(Cells(5, 1 + m).Value) Then
    If CStr(Worksheets(1).Cells(i, 4).Value) = _
    CStr(Cells(6, 1 + m).Value) Then
        Stolbec = 1 + m
        Exit For
    End If
End If
Next
Nomer = 1
For l = 1 To N_Boss 'Определение заявителя в заявке
    If CStr(Worksheets(1).Cells(i, 1).Value) _
    = CStr(Worksheets(2).Cells(l + 1, 6).Value) Then
    Nomer = l
    Exit For
End If
Next
Cells(Stroka, Stolbec).Value = Cells(Stroka, Stolbec).Value + Worksheets(1).Cells(i, 5).Value
Cells(Stroka, Stolbec).Select
With Selection.Interior
    .ColorIndex = colors(nomer) ' Установка заливки
    .Pattern = xlSolid ' для ячейки
End With
End If
End If
Next
End Sub

Рассмотренный в данном разделе отчет позволяет компактно, с помощью различных цветных заливок ячеек, представить информацию об использовании аудиторного фонда заявителями (факультетами или руководителями программ). Численная информация, выводимая в ячейках листа, показывает соотношение вместимости аудитории и количества учащихся в группах студентов.

Понравилась статья? Поделить с друзьями:
  • Модель жизнь в excel
  • Модель дюпона в excel
  • Модель для прогнозирования в excel
  • Модель для вычислений в excel
  • Модель дисконтированных денежных потоков excel