Книга
Книга
Андрей Гарнаев
Использование MS Excel И VBA в экономике и финансах
Дюссельдорф ♦ Киев ♦ Москва ♦ Санкт-Петербург
УДК 681.3.06
Книга предназначена для читателей, интересующихся применением вычислительной техники в менеджменте и экономике. В ней рассмотрено использование Excel и языка Visual Basic for Applications для решения широкого круга задач: от составления простого финансового отчета до создания сценариев серьезных экономических проектов. На большом количестве примеров описан современный инструментарий принятия оптимальных решений в экономике.
Книга имеет выраженную учебную направленность, поэтому будет полезна не только экономистам, специалистам по менеджменту, финансам и коммерции, но и преподавателям, студентам экономических специальностей.
Для широкого круга пользователей
Гарнаев А. Ю.
Использование MS Excel и VBA в экономике и финансах. — СПб.: БХВ — Санкт-Петербург, 2000. — 336 с.: ил.
ISBN 5-8206-0024-Х
© А. Ю.Гарнаев, 1999
© Оформление, издательство "БХВ — Санкт-Петербург", 1999
Лицензия ЛР № 065953 от 15.06.98. Подписано в печать 27.01.2000.
Формат 70x1001/i6. Печать офсетная. Усл.печ. л. 27,1.
Доп. тираж 3000 экз. Заказ 51
“ЧХВ — Санкт-Петербург". 198005, Санкт-Петербург, Измайловский пр.. 29.
Гигиеническое заключение на продукцию, товар, Ns 77.99.1.953.П.950.3.99от 01.03.1999 г. выдано Департаментом ГСЭН Минздрава России.
Отпечатано с готовых диапозитивовв Академической типографии “Наука'' РАН.199034, Санкт-Петербург, 9 линия, 12.
Содержание
Предисловие3
Глава 1. Основы работы в Excel5
Рабочая книга Excel5
Работа с файлами8
Создание новой рабочей книги8
Открытие существующей рабочейкниги10
Сохранение рабочей книги11
Закрытие рабочей книги12
Удаление файла рабочей книги12
Окно приложения Excel12
Операции с рабочими листами17
Пример составления документа20
Адресация ячейки21
Ввод данных в ячейку и их редактирование22
Ввод формулы в ячейку24
Форматы данных26
Диапазон ячеек29
Выравнивание текста31
Шрифты32
Рамки и цвет фона32
Изменение ширины столбцов и высотыстрок33
Специальные текстовые и графическиеэффекты33
Параметры страницы, предварительный просмотр и печать документа35
Глава 2. Построение графиков и решение нелинейных уравнений38
Построение графика. Работа с мастером функций и мастером диаграмм38
Построение графика функции с однимусловием47
Построение графика функции с двумяусловиями48
Построение двух графиков в одной системекоординат49
Построение поверхности50
Нахождение корней уравнения53
Нахождение корней уравнения методом деления отрезка пополам55
Упражнения57
Глава 3. Работа с массивами65
Простейшие операции над массивами65
Встроенные функции для работы с матрицами67
Пошаговое решение системы линейных уравнений методом Гаусса69
Упражнения71
Глава 4. Финансовый анализ в Excel74
Финансовая функция ППЛАТ74
Пример расчета эффективности неравномерных капиталовложений с помощью функций НПЗ, ВНДОХ и Подбор параметра76
Пример расчета эффективности капиталовложений с помощью функции ПЗ79
Финансовые функции ПЛПРОЦм ОСНПЛАТ84
Финансовые функции БЗ, КП ЕР и НОРМА85
Функции для расчета амортизации АМР, АМ ГД, ДОБ и ДДОБ88
Примеры простейших отчетных ведомостей91
Пример отчетной ведомости по расчету просроченных платежей:98
Пример отчетной ведомости по расчету затрат на производство100
Планирование рекламной кампании102
Упражнения106
Глава 5. Поиск решения112
Линейная оптимизационная задача112
Планирование производства красок112
Элементы диалогового окна Поиск решения116
Определение состава сплавов120
Планирование штатного расписания123
Транспортная задача127
Решение системы нелинейных уравнений130
Задача о назначениях132
Уравнение регрессии134
Общий подход к построению уравнения регрессии на примере линейной модели135
Функции рабочего листа для уравнения линейной регрессии136
Экспоненциальная модель141
Транспортная задача с фиксированными доплатами144
Упражнения146
Глава 6. Сводные таблицы161
Глава 7. Visual Basic for Applications (VBA)170
Простейшие функции и процедуры. Типы переменных171
Функция пользователя171
Переменные и постоянные175
Процедуры'.178
Функции пользователя с операторами условного перехода., If-Then и If-Then-Else181
Функции пользователя с несколькими операторами условного перехода184
Функции пользователя, используемые при расчете комиссионных'185
Функции пользователя с оператором условного перехода If-Then185
Функциипользователя с оператором выбора Select Case187
Стандартные функции для работы с массивами188
Стандартные функции для работы с матрицами190
Объекты, свойства и методы VBA190
Операторы цикла195
Операторцикла For-Next195
Операторцикла For-Each-Next199
Операторцикла While-Wend.-202
Операторы цикла Do-Loop202
Панель инструментов Элементы управления. Процедуры перелистывания рабочих листов206
Первый пример,207
Второй пример209
Третий пример211
Четвертый пример211
Пятый пример213
Шестой пример214
Создание сценариев215
Модель управления запасами220
Задача об оптимальном раскрое228
База данных отеля231
Банковская база данных238
Как разместить капитал?255
Расчет краткосрочной ссуды с использованием диалогового окна258
Расчет числа выплат с использованием диалогового окна261
Расчет амортизации и ипотеки с использованием диалогового окна264
Расчет амортизации264
Расчет ипотеки267
Расчет постоянных периодических выплат с построением диаграммы из диалогового окна269
Программирование расчета годовой процентной ставки с помощью команды Подбор параметра278
Программирование решения систем нелинейных уравнений с параметром281
Оптимальное планирование сбыта продукции284
Программирование рекламной кампании291
Упражнения 294
Задания на вычисление комиссионных, программирование сценариев и оптимальное управление запасами294
Задания по работе с массивами296
Задания на работу с базами данных301
Задания на нахождение оптимального раскроя302
Задания на определение оптимальных капиталовложений303
Приложение А. Отладка программ307
Приложение В. Функции рабочего листа Excel315
Литература332
Предисловие
Успех в современном бизнесе и менеджменте во многом опирается на оперативный анализ экономической ситуации и выбор оптимального решения из возможных альтернатив. Одним из современных компьютерных средств для решения подобных задач является программа Microsoft Excel. Однако большинство книг, посвященных Excel, описывают лишь инструментальные возможности этой программы, не объясняя, как ими пользоваться при решении конкретных задач.
Восполнению этого пробела и посвящена данная книга. В ней представлена уникальная по количеству и разнообразию коллекция примеров, демонстрирующих возможности Excel по выполнению экономических расчетов и составлению финансовой документации. В частности, читатель научится решать следующие задачи:
Планирование капиталовложений и сбыта продукции
Управление запасами
Планирование рекламных кампаний
Создание сценариев экономических проектов
Построение баз данных и работа с ними
Разработка диалоговых окон для экономических расчетов
В главах 1—3 изложены основы работы в Excel. С функциями финансового анализа и их применением читатель познакомится в главе 4. В главе 5 описаны средства Excel, используемые для решения оптимизационных задач, а в главе 6 — средства для работы с базами данных. Глава 7 посвящена программированию на языке Visual Basic for Applications (VBA). Ознакомившись с этой главой, читатель научится более эффективно работать с электронными таблицами, а также решать многие прикладные задачи. В приложении А рассматриваются средства отладки программ, написанных на языке VBA, а в приложении В приводится список основных встроенных функций Excel.
В конце каждой главы имеется большое количество упражнений, позволяющих закрепить теоретический материал. Упражнения разбиты по вариантам, поэтому они могут быть использованы не только для самостоятельной работы, но и в качестве заданий на занятиях по информатике.
Данная книга может быть полезна не только тем, кто уже работает с программой Excel, но и тем, кто только приступает к ее изучению:
Студентам — в процессе обучения и выполнения курсовых работ
Преподавателям — для использования в лекциях и на практических занятиях
Начинающим пользователям — для самостоятельного изучения
Опытным пользователям — для расширения своих профессиональных возможностей
Типографские соглашения
Способ выделения
Применение
Полужирное начертание
Команды меню, кнопки панелей инструментов, заголовки и опции стандартных диалоговых окон Excel
Шрифт Courier
Заголовки и опции диалоговых окон, создаваемых пользователем; рабочие книги, листы, функции и формулы Excel; значения, вводимые пользователем или вычисляемые в рабочих таблицах; элементы языка программирования VBA, а также листинги и фрагменты программ
<клавиша>+<клавиша>
Комбинация клавиш, в которой сначала нажимается и удерживается первая клавиша, а затем нажимается вторая
Об авторе
Гарнаев Андрей Юрьевич, доктор физико-математических наук, профессор кафедры вычислительной математики Санкт-Петербургского Государственного Архитектурно-Строительного Университета. Область интересов: математическая кибернетика, программное обеспечение. Им опубликованы две монографии и более шестидесяти научных работ. Данная книга написана на основе многолетнего опыта преподавания Excel студентам экономических специальностей.
Глава 1
Основы работы в Excel
Добро пожаловать в изумительный и бескрайний мир Excel! Вы, дорогой читатель, можете быть как начинающим, делающим первые шаги пользователем, так и профессионалом, сломавшим большое число копий на захватывающем, полном неожиданностей и сюрпризов пути изучения Excel. Если вы начинающий пользователь, то наверняка вас заинтересует, что такое Excel, с какими документами он работает и как эти документы создавать. Первая глава как раз и посвящена этим вопросам, причем она составлена таким образом, что за минимальное время вы сможете приобрести максимальные практические навыки. Если вы профессионал, то можно пропустить эту главу и сразу перейти к интересующим вас специальным вопросам.
Рабочая книга Excel
Excel относится к программным продуктам, которые известны под названием электронные таблицы. Электронная таблица — это интерактивная программа, состоящая из набора строк и столбцов, изображенных на экране в специальном окне. Область, находящаяся на пересечении строки и столбца, называется ячейкой. В ячейке могут находиться число, текст или формула, с помощью которой осуществляются вычисления, относящиеся к одной или нескольким ячейкам. Ячейки можно копировать, перемещать, а также изменять их содержимое. При изменении содержимого ячейки производится автоматический пересчет содержимого всех ячеек, использующих в формулах измененную ячейку. На основе групп ячеек создаются диаграммы, сводные таблицы и карты. Электронную таблицу можно сохранить в отдельном файле для дальнейшего использования.
Создаваемые в Excel файлы называются рабочими книгами (WorkBook). Рабочая книга состоит из нескольких листов. Листы могут быть следующих типов:
Рабочий лист. (Worksheet) —- это самый распространенный лист, который обычно имеют в виду, говоря об электронной таблице
Лист модуля (Module) — на этом листе пишутся программы Visual Basic for Applications
Лист диалогового окна (DialogSheet) — на этом листе создаются диалоговые окна
Лист диаграмм (ChartSheet) — на этом листе с помощью мастера диаграмм (Chart Wizard) можно строить диаграммы (обычно диаграммы строят на рабочем листе)
На рис. 1.1 показано окно Excel с тремя открытыми рабочими книгами. Окна рабочей книги функционируют точно так же, как и окна любой другой программы для Windows.
Рис. 1.1. Окно Excel с тремя открытыми рабочими книгами
Заголовок одного из окон выделен синим цветом — это активная рабочая книга, т. е. книга, с которой в данный момент вы работаете, например, вводите данные. В любой момент времени активной может быть только одна рабочая книга, и ее окно размешается поверх других открытых окон.
Для того чтобы окна всех открытых рабочих книг были видны на экране, необходимо воспользоваться командой Окно, Расположить (Window, Arrange). В открывшемся диалоговом окне Расположение окон (Arrange Windows) (рис. 1.2) предоставляется возможность выбрать вариант расположения окон: рядом, сверху вниз, слева направо или каскадом.
Расположение окон
| ок| окОтменаОтменаРасположить окна О Рядом
| ок
| ок
Отмена
Отмена
Сверху вниз Г Слева направо У Каскадом!
; Г Т олько окна текущей книги; Г Т олько окна текущей книгиРис. 1.2. Диалоговое окноРасположение оконРис. 1.2. Диалоговое окноРасположение окон
; Г Т олько окна текущей книги
; Г Т олько окна текущей книги
Рис. 1.2. Диалоговое окно
Расположение окон
Рис. 1.2. Диалоговое окно
Расположение окон
Команда Окно (Window) раскрывает меню Окно, в нижней части которого приводится список имен открытых в данный момент рабочих книг (рис. 1.3).
Рис. 1.3. Меню ОкноРис. 1.3. Меню Окно
Рис. 1.3. Меню Окно
Рис. 1.3. Меню Окно
Для того чтобы активизировать окно нужной рабочей книги, необходимо щелчком мыши выбрать ее имя в этом списке (слева от имени появится галочка). Если нужное окно (хотя бы небольшая его часть) видно на экране, то его можно активизировать просто щелчком мыши по нему.
ЕЕОкна открытых рабочих книг циклически активизируются нажатием клавиш <Ctrl>+<Tab> или <Ctrl>+<F6>. Нажатие клавиш <Ctrl>+<Shift>+<F6> производит активизацию этих окон в обратном порядке. Команда Файл, Закрыть (File, Close) или нажатие клавиш <Ctrl>+<F4> закрывает рабочую книгу. При этом Excel проверяет, были ли произведены изменения в рабочей книге со времени последнего сохранения файла. Если нет, то Excel закрывает файл без всяких сообщений. В противном случае он предложит сохранить файл (рис. 1.4).
Е
Е
Microsoft Excel
Сохранить, «вменения в файле ‘pel 1.xls*?
№. „ ' I Нет | „ Отмена . |№. „ ' I Нет | „ Отмена . |Рис. 1.4. Диалоговое окно, открывающееся при закрытии рабочей книги
№. „ ' I Нет | „ Отмена . |
№. „ ' I Нет | „ Отмена . |
Работа с файлами
Основными типами файлов, с которыми работает Excel, являются рабочая книга и файл шаблона, имеющие расширения .XLS и .XLT, соответственно.
Создание новой рабочей книги
После запуска Excel автоматически создает новую рабочую книгу с именем книга!. По умолчанию рабочая книга состоит из 16 рабочих листов с именами Лист! (Sheet!), Лист2 (sheet2), ..., Лист!6 (Sheetlb). Число листов задается счетчиком Листов в новой книге (Sheets In New Workbook) вкладки Общие (General) диалогового окна Параметры (Options), открываемого командой Сервис, Параметры (Tools, Options) (рис. 1.5).
Новую рабочую книгу можно также создать одним из следующих способов:
Выбором команды Файл, Создать (File, New)
Нажатием кнопки : J
Нажатием клавиш <Ctrl>+<N>
Каждое из перечисленных действий приводит к появлению диалогового окна Создание документа (New) (рис. 1.6).
Параметры 16113
Формат модуляОбщиеОК |Отмена IФормат модуляОбщиеОК |Отмена IСписки j ДиаграммаЦвет | Модуль
Формат модуля
Общие
ОК |
Отмена I
Формат модуля
Общие
ОК |
Отмена I
Вод , Вычисления | Правка j Переход
Стиль ссылок Мени;
Р Список ранее открывавшихсядаилов ' П Меню Mictoxft Ехсе! £ О
Г": Игнорирсеать ОО Е -запросы от других приложений
Г Пред л гать заполнение свойств Файла
Г" Восстановить исходное состояние мастера подсказок
Дистов в новей книге |i ЭДтаодарпЗййурнФт рщаГсуг
Рабочий каталог. |с \MY_DOC
Каталог автозагрузки: |
Имя пользователя
Рис. 1.5. Вкладка Общие диалогового окна Параметры
Рис. 1.6. Вкладка Общие диалогового окна Создание документаРис. 1.6. Вкладка Общие диалогового окна Создание документа
Рис. 1.6. Вкладка Общие диалогового окна Создание документа
Рис. 1.6. Вкладка Общие диалогового окна Создание документа
На вкладке Решения (Spreadsheet Solutions) диалогового окна Создание документа (New) (рис. 1.7) выбирается шаблон рабочей книги: Заказ, Счет и т. д.
Рис. 1.7. Вкладка Решения диалогового окна Создание документа
Открытие существующей рабочей книги
Открыть существующую рабочую книгу можно одним из следующих способов:
Выбором команды Файл, Открыть (File, Open)
Нажатием кнопки
Нажатием клавиш <Ctrl>+<O>
В результате на экране появится диалоговое окно Открытие документа (Open) (рис. 1.8).
В поле Папка (Look in) указана папка, из которой считываются и в которой сохраняются по умолчанию рабочие книги. Если вы хотите изменить этот Стандартный рабочий каталог, введите необходимые изменения в поле Рабочий каталог (Default File Location) вкладки Общие (General) диалогового окна Параметры (Options), открываемого командой Сервис, Параметры (Tools, Options) (рис. 1.5).
Открыть рабочую книгу можно также двойным щелчком на значке ее XLS- файла. Если вам нужно открыть файл, с которым недавно работали, то его имя вы найдете в меню Файл (File), где приводится список последних четырех открывавшихся файлов.
Рис. 1.8. Диалоговое окно Открытие документа
Диалоговое окно Открытие документа (Open) также позволяет производить поиск файла на диске. Для этого введите имя файла в поле Имя файла (File name) и нажмите кнопку Найти (Find).
Сохранение рабочей книги
Рабочая книга сохраняется одним из следующих способов:
Выбором команды Файл, Сохранить (File, Save)
Нажатием кнопки У
Нажатием клавиш: <Ctrl>+<S> или <Shift>+<F12>
Если рабочая книга уже сохранялась ранее, то в результате выполнения одного из указанных действий она сохранится на диске под тем же именем. При первом сохранении рабочей книги на экране появится диалоговое окно Сохранение документа (Save As) (рис. 1.9).
В поле Имя файла (File name) вводится имя, под которым будет сохранена данная рабочая книга. По умолчанию Excel предлагает для рабочей книги следующие стандартные имена: Книга! (Booki), книга2 (воок2) и т. д., но использовать их не рекомендуется. Для облегчения работы с файлами предпочтительнее присваивать им такие имена, которые отражают их содержание. Для переименования рабочей книги необходимо воспользоваться командой Файл,
Сохранить как (File, Save As), при выполнении которой на экране также появится диалоговое окно Сохранение документа (Save As) (рис. 1.9).
Рис. 1.9. Диалоговое окно Сохранение документа
Закрытие рабочей книги
Закрыть рабочую книгу можно:
Выбором команды Файл, Закрыть (File, Close)
Нажатием клавиш: <Ctrl>+<F4> или <Ctrl>+<W>
Если вы сделали в рабочей книге какие-либо изменения, то перед закрытием этой книги Excel выдаст запрос на ее сохранение (рис. 1.4).
Удаление файла рабочей книги
Если вам не нужен какой-либо файл рабочей книги и вы хотите его удалить, Excel предоставит вам и эту возможность. Для удаления файла в диалоговом окне Открытие документа (Open) щелкните правой кнопкой мыши на значке файла и в раскрывшемся контекстном меню выберите команду Удалить (Delete) (рис. 1.10).
Окно приложения Excel
На рис. 1.11 видно, что окно Excel содержит много элементов, присущих большинству программ в среде Windows (табл. 1.1).
Рис. 1.10. Удаление файла в диалоговом окне Открытие документа
Рис. 1.11. Вид окна рабочий книги Excel
Таблица 1.1. Некоторые элементы интерфейса Windows
Элемент
Описание
Заголовок окна (Title bar)
Строка в верхней части окна приложения или рабочей книги. Заголовок окна приложения содержит название приложения и имя файла, открытого в этом окне. Заголовок окна рабочей книги содержит имя файла
Полоса меню (Menu bar)
Список команд меню. Обычно располагается под заголовком приложения
Меню (Menu)
Раскрывающийся список команд
Команда (Command)
Функция или действие, выбранное из раскрывающегося меню
Кнопка Свернуть (Minimize)
Левая кнопка из трех кнопок управления окном ЕИЗ в правой части заголовка. Уменьшает окно приложения или рабочей книги до кнопки на панели задач внизу экрана
Кнопка Развернуть (Maximize)
Средняя из трех кнопок управления окном в правой части заголовка. Разворачивает окно приложения или рабочей книги на все свободное пространство экрана
Кнопка Закрыть (Close)
Правая из трех кнопок управления окном в правой части заголовка. Закрывает приложение Excel или рабочую книгу
Панель инструментов (Toolbar)
Панель с кнопками, нажатие которых обеспечивает быстрое выполнение определенных действий
Полоса прокрутки (Scroll bar)
Горизонтальная и вертикальная полосы, позволяющие с помощью мыши прокручивать экран по горизонтали и вертикали
Строка состояния (Status bar)
Строка в нижней части окна приложения, в которой поясняются выделенные команды и даются указания и подсказки относительно следующего действия
Но разумеется, окно
приложения Excel содержит и элементы, присущие
именно этому приложению. Некоторые из них приведены в табл. 1.2.
Таблица 1.2. Некоторые элементы интерфейса Excel
Элемент
Описание
Ярлычки листов (Sheet Tabs)
Ярлычки с именами рабочих листов слева от полосы горизонтальной прокрутки
Кнопки прокрутки ярлыч- Кнопки слева от ярлычков рабочих листов LjUll ков (Tab Scrolling Buttons) помогающие быстро перебирать листы рабочей книги
Таблица 1.2 (окончание)
ЭлементЭлементОписаниеОписаниеВешка ярлычков (Tab split box)Вешка ярлычков (Tab split box)Небольшой прямоугольник между ярлычками листов и полосой горизонтальной прокрутки, перемещая который, можно увеличить место для ярлычков или увеличить размер полосы горизонтальной прокруткиНебольшой прямоугольник между ярлычками листов и полосой горизонтальной прокрутки, перемещая который, можно увеличить место для ярлычков или увеличить размер полосы горизонтальной прокруткиСтрока формул (Formula bar)Строка формул (Formula bar)Строка, в которой вводится текст, числа или формулы Расположена ниже полосы меню и панели инструментовСтрока, в которой вводится текст, числа или формулы Расположена ниже полосы меню и панели инструментовПанель инструментовСтандартная (Standard)Панель инструментовСтандартная (Standard)
Элемент
Элемент
Описание
Описание
Вешка ярлычков (Tab split box)
Вешка ярлычков (Tab split box)
Небольшой прямоугольник между ярлычками листов и полосой горизонтальной прокрутки, перемещая который, можно увеличить место для ярлычков или увеличить размер полосы горизонтальной прокрутки
Небольшой прямоугольник между ярлычками листов и полосой горизонтальной прокрутки, перемещая который, можно увеличить место для ярлычков или увеличить размер полосы горизонтальной прокрутки
Строка формул (Formula bar)
Строка формул (Formula bar)
Строка, в которой вводится текст, числа или формулы Расположена ниже полосы меню и панели инструментов
Строка, в которой вводится текст, числа или формулы Расположена ниже полосы меню и панели инструментов
Панель инструментов
Стандартная (Standard)
Панель инструментов
Стандартная (Standard)
Панель инструментов
Форматирование
(Formatting)
Как правило, в окне приложения Excel под полосой меню располагаются панели инструментов Стандартная (Standard) и Форматирование (Formatting) Панель инструментов Рисование (Drawing) может быть вызвана нажатием кнопки ^| панели инструментов Стандартная (Standard).
Вид окна Excel настраивается:
□ В диалоговом окне Панели инструментов (Toolbars) (рис. 1.12), которое вызывается командой Вид, Панели инструментов (View, Toolbars). В этом окне имеется возможность управлять выводом панелей инструментов на экран. Флажки в нижней части окна задают размер и цвет кнопок. Флажок Всплывающие подсказки позволяет управлять появлением всплывающей подсказки с названием кнопки при установке на ней указателя мыши.
□ На вкладке Вид (View) диалогового окна Параметры (Options), которое открывается командой Сервис, Параметры (Tools, Options) (рис. 1.13). В этом окне можно задать отображение на экране таких элементов окна, как сетка, строка формул, строка состояния, заголовки строк и столбцов, полосы прокрутки, ярлычки листов и т. д.
Рис. 1.12.Диалоговое окноПанели инструментовРис. 1.12.Диалоговое окноПанели инструментов
Рис. 1.12.
Диалоговое окно
Панели инструментов
Рис. 1.12.
Диалоговое окно
Панели инструментов
Рис. 1.13. Вкладка Вид диалогового окна Параметры
Основную часть окна Excel занимает рабочий лист, разделенный на отдельные ячейки. По умолчанию столбцы озаглавлены буквами, а строки — цифрами, однако, возможно обозначение строк и столбцов цифрами. Переход от одной системы ссылок на ячейку к другой осуществляется на вкладке Общие (General) диалогового окна Параметры (Options), которое открывается командой Сервис, Параметры (Tools, Options) В группе Стиль ссылок выбирается положение переключателя А1 или R1C1 (рис. 1.5). На одном рабочем листе имеется 256 столбцов и 16 386 строк.
Рис. 1.15. Контекстное меню ярлычкаРис. 1.15. Контекстное меню ярлычка
Рис. 1.15. Контекстное меню ярлычка
Рис. 1.15. Контекстное меню ярлычка
Операции с рабочими листами
Последовательный переход от одного рабочего листа к другому осуществляется при помощи кнопок прокрутки ярлычков (табл. 1.2). Существует более быстрый способ перехода: щелкните правой кнопкой мыши на кнопке прокрутки ярлычков и в открывшемся контекстном меню из списка имен имеющихся рабочих листов выберите нужный лист (рис. 1.14).
Рис. 1.14. Переход от листа к листу
Рабочие листы можно переименовывать, копировать, перемещать, удалять и скрывать.
Для переименования листа, например с именем лист1, щелкните правой кнопкой мыши на ярлычке листа и в раскрывшемся контекстном меню выберите команду Переименовать (Rename) (рис. 1.15).
В открывшемся диалоговом окне Переименование листа (Rename Sheet) в поле Имя листа введите новое имя листа, например отчет, и нажмите кнопку ОК. В результате произойдет переименование листа (рис. 1.16). Переименовать выделенный лист можно также командой Формат, Лист, Переименовать (Format, Sheet, Rename).
Рис. 1.16. Рабочий лист с новым именемРис. 1.16. Рабочий лист с новым именем
Рис. 1.16. Рабочий лист с новым именем
Рис. 1.16. Рабочий лист с новым именем
При необходимости удалить рабочий лист щелчните правой кнопкой мыши на ярлычке листа и в раскрывшемся контекстном меню выберите команду Удалить (Delete). Перед удалением Excel предупреждает, что восстановить удаленный лист невозможно. Удалить лист можно и командой Правка, Удалить лист (Edit, Delete Sheet).
Вставка нового листа осуществляется щелчком правой кнопки мыши на ярлычке листа, перед которым необходимо вставить новый лист. Выбор команды Вставка (Insert) в раскрывшемся контекстном меню открывает диалоговое окно Вставка (Insert), в котором следует выбрать тип вставляемого листа (рис. 1.17). Новый рабочий лист можно вставить и с помощью команды Вставка, Лист (Insert, Worksheet).
Рис. 1.17. Вкладка Общие диалогового окна Вставка
Для перемещения или копирования листа щелкните правой кнопкой мыши на ярлычке листа и в раскрывшемся контекстном меню выберите команду Переместить/скопировать (Move or Сору). В диалоговом окне Переместить или скопировать (Move or Copy Sheet) (рис. 1.18) укажите, в какую рабочую
книгу следует переместить выбранный лист и перед каким листом он должен располагаться. В случае копирования листа необходимо установить флажок Создавать копию (Create а Сору).
Рис. 1.18. Диалоговое окно Переместить или скопировать
Копировать или перемещать выделенный лист можно и с помощью команды Правка, Переместить/скопировать (Edit, Move or Copy).
Операцию перемещения листа удобно производить мышью. Для этого необходимо установить указатель мыши на ярлычке листа и, нажав левую кнопку мыши, перетащить ярлычок в нужное место. Подобным образом можно буксировать не только ярлычки листов, но и выделенные ячейки, их группы и любые графические объекты. Если буксировка производится при нажатой клавише <Ctrl>, то объект копируется.
Команда Формат, Лист, Скрыть (Format, Sheet, Hide) позволяет скрыть выделенный лист, а команда Формат, Лист, Показать (Format, Sheet, Unhide) — отобразить скрытый лист.
Перетаскивая Вешку ярлычков (Tab split box), можно изменить число ярлычков, отображаемых на экране (рис. 1.11).
Excel предоставляет возможность работать с группой листов как с одним в так называемом Групповом режиме (Group). Выделение группы листов осуществляется одним из следующих способов:
Щелкните правой кнопкой мыши на ярлычке листа и в раскрывшемся контекстном меню выберите команду Выбрать все листы (Select all sheets)
Добавить отдельный лист в группу можно, щелкнув на его ярлычке при нажатой клавише <Ctrl>
Выделить в группу несколько подряд идущих листов можно, щелкнув первый и последний ярлычки группы, причем щелчок на последнем ярлычке необходимо выполнять при нажатой клавише <Shift>
Ярлычки листов, выделенных в группу, окрашены белым цветом (рис. 1.19). При желании выделенную группу листов можно удалять, перемещать, копировать, вводить в нее информацию как в один лист.
Рис. 1.19. Выделение ярлычков группы листовРис. 1.19. Выделение ярлычков группы листов
Рис. 1.19. Выделение ярлычков группы листов
Рис. 1.19. Выделение ярлычков группы листов
Раскрывающийся список 11^ZJ на панели Стандартная (Standard) позволяет изменять масштаб отображения рабочего листа. Для более точного масштабирования воспользуйтесь командой Вид, Масштаб (View. Zoom). В открывшемся диалоговом окне Масштаб (Zoom) установите необходимый масштаб от 10 до 400% (рис. 1.20).
Рис. 1.20. Диалоговое окно Масштаб
Пример составления документа
Предположим, что ваш руководитель поручил вам рассчитать краткосрочную ссуду. Вы энергичны, полны амбиций и надеетесь получить прибавку к жалованию или повышение по службе. Несомненно, вы захотите подготовить документ, не только правильно рассчитывающий ссуду, но и весьма презентабельный, чтобы ваш руководитель с одного взгляда на него смог оценить вашу незаменимость и перспективность.
В данном разделе на примере создания таблицы расчета краткосрочной ссуды (рис. 1.21) рассмотрены основные понятия и приемы ввода, редактирования, форматирования и простейшей обработки данных, а также придания отчету презентабельного вида.
Рис.1.21.Расчет краткосрочной ссудыРис.1.21.Расчет краткосрочной ссуды
Рис.1.21.
Расчет краткосрочной ссуды
Рис.1.21.
Расчет краткосрочной ссуды
Обратите внимание на удобное средство при работе в Excel: щелчок на кнопке р> панели инструментов Стандартная (Standard) отменяет результат выполнения последней команды, а повторное_выполнение последней команды осуществляется при нажатии на кнопку к той же панели. Эти кнопки
позволяют отменить результаты некорректного редактирования данных и избежать повторного ввода с клавиатуры случайно удаленных данных.
Адресация ячейки
На активном рабочем листе одна ячейка является активной (active) или, другими словами, выделенной. Эта ячейка обрамлена черной рамкой. Перемещение черной рамки по рабочему листу осуществляется мышью или клавишами <Т>, <Ф>, <<-> и <->>. Каждая ячейка на активном рабочем листе определяется своим адресом, состоящим из имени столбца и номера строки, например А1. Ячейка на неактивном рабочем листе идентифицируется именем листа и ее адресом на листе, например листа iai (обратите внимание на разделительный восклицательный знак).
Существует другой способ адресации ячейки — по имени. Имя или адрес активной ячейки выводится в поле имен, которое расположено у левого края строки формул (рис. 1.22).
Для присвоения имени активной ячейке выберите команду Вставка, Имя. Присвоить (Insert, Name, Define) и в поле ввода Имя (Name) открывшегося диалогового окна Присвоить имя (Define Name) введите новое имя ячейки, например Первая ячейка (рис. 1.23).
Рис. 1.22. Активная ячейкаРис. 1.22. Активная ячейка
Рис. 1.22. Активная ячейка
Рис. 1.22. Активная ячейка
Рис.1.23.Диалоговое окноПрисвоить имяРис.1.23.Диалоговое окноПрисвоить имя
Рис.1.23.
Диалоговое окно
Присвоить имя
Рис.1.23.
Диалоговое окно
Присвоить имя
В именах ячеек не допускаются пробелы, поэтому в качестве разделителя между словами обычно используют символ подчеркивания "_". При нажатии кнопки ОК ячейке присваивается указанное имя Конечно, активной ячейке можно присвоить имя и непосредственно, введя его в поле имени. Адресация ячейки по имени абсолютна, поэтому при ссылке на ячейку по имени на неактивном рабочем листе нет необходимости указывать имя этого листа.
Ввод данных в ячейку и их редактирование
Вернемся к нашему примеру — созданию таблицы расчета краткосрочной ссуды, приведенной на рис. 1.21. В новом созданном документе переименуем рабочий лист лист! в начало и удалим остальные рабочие листы. Выделим ячейку А1 и с клавиатуры введем в нее текст Расчет краткосрочной ссуды. При вводе содержимое активной ячейки дублируется в строке формул (рис. 1.24).
Ввод текста заканчивается нажатием клавиши <Enter> или кнопки О. Нажатие клавиши <Esc> или кнопки И отменяет ввод или результат редактирования информации в ячейке. Хотя визуально текст, введенный в ячейку А1, занимает также ячейки В1 и С1, однако, эти ячейки пусты. В этом можно убедиться, сделав их активными и увидев, что в строку формул ничего не
выводится. Аналогично, в ячейки А2, АЗ, А4, А5 и Аб вводим текст, как показано на рис. 1.25.
д] оЩМ&Ш ^Ый1^ >»HI ф| А1 ^Ixl (Д] Расчет краткосрочной ссуды TZTTZbZTZ^^
Расчет краткосрочной ссуды
2
Рис.1.24.Ввод текста в ячейкуРис.1.24.Ввод текста в ячейкуN ^З^Н^чало/^ |JЗМ
Рис.1.24.
Ввод текста в ячейку
Рис.1.24.
Ввод текста в ячейку
12345. 6 =*1312345. 6 =*13Рис. 1.25. Исходные данные для расчета краткосрочной ссудыРис. 1.25. Исходные данные для расчета краткосрочной ссудыA j" fr-| С | ‘ D | Расчет краткосрочной ссуды
1
2
3
4
5
. 6 =
*13
1
2
3
4
5
. 6 =
*13
Рис. 1.25. Исходные данные для расчета краткосрочной ссуды
Рис. 1.25. Исходные данные для расчета краткосрочной ссуды
Ссуда.200:
Дата выдачи ссуды01.01.98
Дата возврата ссуды01.05.99
Процентная ставка0.1
Возвращаемая сумма
► | «^Начало | < | |
Для редактирования содержимого ячейки необходимо ее выделить и нажать клавишу <F2> или дважды щелкнуть ячейку. После этого содержимое ячейки редактируется стандартными средствами Windows непосредственно в ячейке или в строке формул, причем работать со строкой формул, как правило, удобнее. Для ускорения ввода информации и избежания ошибок при наборе пользуйтесь копированием через буфер обмена. В нашем примере содержимое ячеек АЗ (Дата выдачи ссуды) И А4 (Дата возврата ссуды) очень похожи друг на друга. Введя текст в ячейку АЗ, выделите его, скопируйте в ячейку А4 и отредактируйте. Выделять текст в ячейке или строке формул можно стандартными средствами Windows:
Перемещением указателя мыши при нажатой кнопке
С помощью клавиш <Т>, <Ф>, <<->, <—>> при нажатой клавише <Shift>
Двумя последовательными щелчками: одним в начале выделяемой области, а другим — в конце, но при нажатой клавише <Shift>
Выделенный фрагмент копируется в буфер обмена:
Выбором команды Правка, Копировать (Edit, Сору)
Нажатием клавиш <Ctrl>+<Insert> или <Ctrl>+<C>
Нажатием кнопки 3
Выделенный фрагмент копируется в буфер обмена с удалением:
Выбором команды Правка, Вырезать (Edit, Cut)
Нажатием клавиш <Shift>+<Delete> или <Ctrl>+<X>
Нажатием кнопки jt
Содержимое буфера обмена вставляется:
Командой Правка, Вставить (Edit, Paste)
Нажатием клавиш <Shift>+<Insert> или <Ctrl>+<V>
Нажатием кнопки @
Использование буфера обмена резко ускоряет создание документа, однако, будьте осторожны: копируя через буфер обмена ошибки или опечатки, вы непроизвольно размножаете их по документу.
Продолжим работу с рассматриваемым примером составления отчетной таблицы расчета ссуды. В ячейки D2, D3, D4 и D5 (рис. 1.25) введем числа 200, oi.oi.98, 01.05.99 и o.i, соответственно (размер ссуды, даты выдачи и возврата ссуды и процентную ставку). Итак, ввод начальных данных в таблицу завершен. В следующем разделе объясняется, как по этим данным выполнить расчет ссуды.
1.5.3. Ввод формулы в ячейку
Для вычисления возвращаемой суммы необходимо ввести в ячейку D6 расчетную формулу. Формула в ячейке начинается со знака равенства "=" и может содержать операторы (табл. 1.3), пары круглых скобок, числа, адреса или имена ячеек, а также функции рабочего листа, вводимые в формулу командой Вставка, Функция (Insert, Function) или нажатием кнопки Мастер функций (Function Wizard) Д .
Таблица 1.3. Допустимые операторы
Оператор
Название
+
Сложение
*
Вычитание
Умножение
/
Деление
Возведение в степень
&
Конкатенация
=
Логическое сравнение
>
Логическое сравнение на больше
Логическое сравнение на меньше
Приведем несколько примеров формул:
=3*2=А1+А2=А2А(2/3)=3*2=А1+А2=А2А(2/3)Умножение двух чисел
=3*2
=А1+А2
=А2А(2/3)
=3*2
=А1+А2
=А2А(2/3)
Сложение содержимого двух ячеек
Возведение содержимого ячейки в степень 2/3
По умолчанию Excel создает в формулах относительные ссылки на адреса ячеек. Это означает, что Excel при копировании изменяет ссылки на ячейки в соответствии с новым положением формулы. Рассмотрим следующий пример: пусть в ячейки Al, Bl, А2 и В2 введены числа 1, 2, з и 5, соответственно, а в ячейку С1 введена формула
=А1+В1
Скопируем эту формулу в ячейку С2 одним из двух способов:
Выделяем ячейку С1 и копируем в буфер обмена ее содержимое:
При помощи команды Правка, Копировать (Edit, Сору)
Нажатием клавиш <Ctrl>+<Insert> или <Ctrl>+<C>
Нажатием кнопки j
Выделяем ячейку С2 и копируем в нее содержимое буфера обмена:
При помощи команды Правка, Вставить (Edit, Paste)
Нажатием клавиш <Shift>+<Inseit> или <Ctrl>+<V>
Нажатием кнопки
Выделяем ячейку С1, располагаем указатель мыши на маркере заполнения выделенной ячейки и протаскиваем его вниз так, чтобы заполнить ячейку С2, после чего отпускаем мышь. {Маркер заполнения — это черный квадрат в нижнем правом углу выделенной ячейки или диапазона ячеек. При расположении указателя мыши на маркере заполнения он принимает вид черного креста.)
При перемещении формул все относительные ссылки перестраиваются так, чтобы в новом положении сохранились прежние связи. Это очень удобно при составлении различного рода таблиц.
Отметим, что второй способ копирования формулы значительно проще и элегантнее. В обоих случаях в ячейку С2 будет введена формула
=А2+В2
Для того чтобы скопировать формулу или ее часть без изменения адресации, необходимо сначала выполнить двойной щелчок на ячейке с формулой, а затем выделить в ячейке или в строке формул копируемую часть формулы.
Теперь нужно скопировать выделенный фрагмент в буфер обмена, нажав клавиши <Ctrl>+<Insert>. Затем выполните двойной щелчок на ячейке, в которую должна быть скопирована формула, и вставьте в нее содержимое буфера обмена, нажав клавиши <Shift>+<Insert>.
Временно прервем пополнение нашего теоретического багажа и вернемся к нашему примеру. Для вычисления возвращаемой суммы денег по ссуде введем в ячейку D6 формулу
=02*(1+05)А((04-03)/365)
После нажатия клавиши <Enter> в этой ячейке будет вычислена искомая сумма (рис. 1.26). Итак, расчет краткосрочной ссуды завершен, однако, внешний вид отчета еще далек от совершенства. Как придать нашему документу презентабельный вид, будет изложено в следующих разделах.
а I в |
С
1 0 1
ЕИ
1 :
Расчет краткосрочной ссудыТс
2 :
з ■
Ссуда
Дата выдачи ссуды
200
01.01 98
-
4
5
Дата возврата ссуды Процентная ставка
01.05 99
0.1
' 6 '
Возвращаемая сумма
227.0028.
>| И^Начало < |
J
>id
Рис.1.26.
Результат расчета краткосрочной ссуды
Форматы данных
Числовые значения, которые вводятся или вычисляются, как правило, не отформатированы (это просто последовательности цифр). Для более наглядного представления результатов вычисления их желательно отформатировать. Форматировать данные в выделенной ячейке можно одним из следующих способов:
С помощью вкладки Число (Number) диалогового окна Формат ячеек (Format Cells), которое открывается командой Формат, Ячейки (Format, Cells) (рис. 1.27)
Щелчком правой кнопки мыши на ячейке вызвать контекстное меню и выбрать команду Формат ячеек (Format Cells) (рис. 1.28). В результате откроется диалоговое окно Формат ячеек (Format Cells) (рис. 1.27)
Нажатие клавиш <Ctrl>+<l> также открывает диалоговое окно Формат ячеек (Fbrmat Cells)
Рассмотрим основные типы числовых форматов:
Общий (General) — этот формат принят по умолчанию.
Рис. 1.27. Вкладка Число диалогового окна Формат ячеек
Рис. 1.28. Выбор команды Формат ячеек из контекстного меню
Числовой (Number) — этот формат позволяет определить число выводимых знаков после десятичной точки, необходимость использования разделителя групп разрядов и способ вывода отрицательных чисел. Для того чтобы увеличить на единицу число разрядов после десятичной точки, нажмите кнопку | ^|, а чтобы уменьшить — кнопку ^ . Вставка разделителя групп разрядов и отображение числового значения с двумя знаками после запятой производится нажатием кнопки ум .
Денежный (Currency) — этот формат позволяет определить число выводимых знаков после десятичной точки, необходимость использования знака денежной единицы и способ вывода отрицательных чисел. Для того чтобы добавить знак денежной единицы, разделитель тысяч и отобразить число с точностью до двух знаков после запятой, просто нажмите кнопку |ф|.
Финансовый (Accounting) — этот формат отличается от денежного тем, что числа выравниваются по десятичной точке.
Дата (Date) — эта категория позволяет вывести дату в одном из 12 форматов (табл. 1.4). При работе с датами нужно иметь в виду, что Excel представляет каждую дату как ее порядковый номер в ряду дат, начиная с даты 1 января 1900 года, у которой первый порядковый номер. Такая особенность дат позволяет вычитать их друг из друга, для того чтобы найти количество прошедших дней, как это было сделано в формуле, введенной в ячейку D6 (рис. 1.26).
Время (Time) — эта категория позволяет вывести время в одном из 8 форматов (табл. 1.4).
Таблица 1.4. Форматы Дата и Время
Дата
Время
7.5
15:23
7.5.98
3:23 РМ
07.05.98
15:23:00
7 май
3:23:00 РМ
7 май 98
23:00.0
07 май 98
15:23:00
май 98
07.05.98 3:23 РМ
Май 98
07.05.98 15:23
7 Май, 1998
07.05.98 12:00 АМ
07.05.98 0:00
Май 7, 1998
Процентный (Percentage) — этот формат позволяет вывести число, умноженное на 100, со знаком процента и определить число выводимых зна-
ков после десятичной точки. Для того чтобы вывести число в этом формате без десятичных знаков после десятичной точки, просто нажмите кнопку | %|.
Дробный (Fraction) — эта категория позволяет вывести число в одном из 9 форматов. При вводе в ячейку чисел в этом формате отделяйте целую часть от дробной пробелом.
Экспоненциальный (Scientific) — в этом формате число отображается в виде аЕЬ, где а — мантисса, b — порядок. Запись аЕЬ используется в программировании для представления чисел с плавающей десятичной точкой вида пхЮ*. Например число 1.23х10~2 записывается как 1.23Е-2. В этом формате можно для мантиссы определить число выводимых знаков после десятичной точки.
Текстовый (Text) — применение этого формата к числовому значению позволяет Excel рассматривать его как текст.
Дополнительный (Special) — в эту категорию входят четыре дополнительных формата: Почтовый индекс (Zip Code), Индекс +4 (Zip Code+4), Номер телефона (Phone Number) и Табельный номер (Social security Number).
Все форматы (Custom) — эта категория позволяет создавать свои форматы.
Вернемся к нашему примеру — созданию отчетной таблицы расчета краткосрочной ссуды (рис. 1.21). Отформатируем данные, полученные на рис. 1.26 в ячейках от D2 до D6, так, чтобы они приняли презентабельный вид, показанный на рис. 1.21. Предварительно изучим способы улучшения внешнего вида документа.
Диапазон ячеек
Форматировать данные можно как в одной ячейке, так и в диапазоне ячеек или группе несмежных диапазонов ячеек. Диапазон (range) — это прямоугольная группа ячеек. Для его адресации необходимо указать адреса верхней левой и нижней правой ячеек диапазона, разделенные двоеточием, например А1:СЗ и С7:Е10 (рис. 1.29).
Выделить диапазон можно одним из следующих способов:
Щелкнув угловую ячейку диапазона и перетащив указатель мыши на диагонально противоположную ячейку диапазона
Последовательно щелкнув две диагонально противоположные ячейки диапазона, причем щелчок на второй ячейке нужно выполнять при нажатой клавише <Shift>
Рис. 1.29. Выделение диапазонов
Для выделения целого столбца (строки) необходимо выполнить щелчок на его (ее) заголовке
Нажатие клавиш <Ctrl>+< Пробел > и <Shift>+<Пробел > выделяет текущий столбец и строку, соответственно
Весь рабочий лист выделяется нажатием клавиш <Ctii>+<A>
Выделение группы несмежных диапазонов производится последовательно. Для того чтобы не произошла отмена предыдущего выделения, щелкайте угловую ячейку очередного выделяемого диапазона при нажатой клавише <Ctrl>. Далее диапазон выделяется одним из вышеописанных способов. В формулах несмежные диапазоны объединяются знаком ";", например А1:СЗ;С7:Е10.
Содержимое диапазона ячеек можно удалять, перемещать и копировать одним из стандартных способов Windows, описанных выше. Кроме того, Excel позволяет копировать содержимое ячейки или диапазона ячеек путем буксировки. Для этого выделите ячейку или диапазон, установите указатель мыши на одной из его сторон так, чтобы он превратился в стрелку, и перетащите выделенный диапазон на новое место при нажатой клавише <CtrI> Если клавиша <Ctrl> не нажата, диапазон перемещается на новое место без копирования.
Диапазон можно форматировать. В диапазон легко вводить повторяющиеся данные. Для этого достаточно его выделить, ввести данные и нажать клавиши <Ctrl>+<Enter>. Кроме того, как будет объяснено в последующих главах, диапазон удобно использовать в формулах.
При форматировании содержимого ячеек, кроме формата числа, можно определить способ выравнивания текста в ячейке, формат шрифта, наличие и
параметры рамки вокруг ячейки или диапазона, цвет фона ячейки. Рассмотрим подробнее способы их задания.
Выравнивание текста
По умолчанию текст, введенный в ячейку, выравнивается по ее левому краю, а числа — по правому краю (рис. 1.26). Изменить способ выравнивания в ячейке или диапазоне можно с помощью следующих кнопок панели инструментов Форматирование (Formatting):
левому краю — нлевому краю — нВыравнивание по
левому краю — н
левому краю — н
центру — wцентру — wВыравнивание по
центру — w
центру — w
правому краю — IS]правому краю — IS]Выравнивание по
правому краю — IS]
правому краю — IS]
При необходимостиПри необходимостиотцентрировать текст в нескольких столбцах следует
При необходимости
При необходимости
выделить нужный диапазон ячеек и нажать кнопку Объединить и поместить в центре (Merge and Center) |^|.
Кроме того, вкладка Выравнивание (Alignment) диалогового окна Формат ячеек (Format Cells), открываемого командой Формат, Ячейки (Format, Cells), позволяет дополнительно изменять ориентацию текста в ячейке, выравнивать текст по вертикали и разрешать перенос текста по словам внутри ячейки (рис. 1.30).
Рис. 1.30. Вкладка Выравнивание диалогового окна Формат ячеекРис. 1.30. Вкладка Выравнивание диалогового окна Формат ячеек
Рис. 1.30. Вкладка Выравнивание диалогового окна Формат ячеек
Рис. 1.30. Вкладка Выравнивание диалогового окна Формат ячеек
Шрифты
Изменить тип и размер шрифта можно с помощью раскрывающихся списков" Шрифт (Font) jAtial Суг и Размер шрифта (Font Size) |1O панели инструментов Форматирование (Formatting). Кнопки £ к ^] изменяют на
подчеркнутоеКНОПКИ У» .подчеркнутоеКНОПКИ У» .чертание текста на полужирное (Bold), курсивное (Italic) и (Underline), соответственно. Цвет текста выбирается с помощью
подчеркнутое
КНОПКИ У» .
подчеркнутое
КНОПКИ У» .
Кроме того, вкладка Шрифт (Font) диалогового окна Формат ячеек (Format Cells), открываемого командой Формат, Ячейки (Format, Cells), позволяет дополнительно создавать эффект зачеркнутого шрифта, придавать тексту или числам формат нижнего или верхнего индекса (рис. 1.31).
Рие. 1.31. Вкладка Шрифт диалогового окна Формат ячеекРие. 1.31. Вкладка Шрифт диалогового окна Формат ячеек
Рие. 1.31. Вкладка Шрифт диалогового окна Формат ячеек
Рие. 1.31. Вкладка Шрифт диалогового окна Формат ячеек
Рамки и цвет фона
Рамка вокруг выделенной ячейки или диапазона ячеек создается с помощью кнопки [Е -| панели инструментов Форматирование (Formatting). Изменение цвета фона производится кнопкой * .
Вкладка Рамка (Border) диалогового окна Формат ячеек (Format Cells), открываемого командой Формат, Ячейки (Format, Cells), позволяет дополнительно задавать тип и цвет линии обрамления.
Изменение ширины столбцов и высоты строк
Прежде всего столбцы необходимо выделить. После выделения можно воспользоваться одним из следующих способов:
Перетаскивайте мышью правую границу заголовка любого из выделенных столбцов до тех пор, пока они не достигнут требуемых размеров
В диалоговом окне Ширина столбца (Column Width), которое открывается командой Формат, Столбец, Ширина (Format, Column, Width), введите требуемую ширину
Воспользуйтесь командой Формат, Столбец, Автоподбор ширины (Format, Column, AutoFit Selection), которая устанавливает ширину столбцов в соответствии с содержимым их ячеек (такой же результат достигается двойным щелчком на правой границе заголовка столбца)
Аналогично настраивается высота строк.
Если при расчетах в ячейке вместо числа появляется ########, это означает, что результат не помещается в ячейку и ее ширину необходимо увеличить.
Теперь вновь вернемся к нашему примеру — созданию отчетной таблицы расчета ссуды. Используя приобретенные навыки, отформатируем документ (рис. 1.26) так, чтобы он принял вид, показанный на рис. 1.21. Для этого увеличим размер шрифта заголовка таблицы, зададим для него полужирное начертание и выровняем его по центру таблицы. Применим к ячейкам таблицы обрамление, а ячейку с окончательным результатом выделим фоном. Действия, необходимые для окончательного завершения отчета, обсудим в следующем разделе.
Специальные текстовые и графические эффекты
Для придания отчету большей наглядности и презентабельности в него рекомендуется добавлять различные графические объекты. В качестве эмблем можно использовать рисунки, созданные в любом графическом редакторе, или уже готовые рисунки из коллекции, например Microsoft ClipArt, которая вызывается командой Вставка, Объект, Картинка Microsoft ClipArt (Insert, Object, Microsoft ClipArt Gallery 2.0) (рис. 1.32).
Приложение Microsoft WordArt2.0 позволяет создавать такие специальные текстовые эффекты, как фигурная ориентация текста, текст с тенью и т. д (рис. 1.33).
Рис. 1.32. Окно Microsoft ClipArt Gallery 2.0
Рис. 1.33. Окно WordArt 2.0
Кроме того. Excel с помощью панели инструментов Рисование (Drawing) (рис. 1.34), вызываемой командой Вид, Панели инструментов (View, Toolbars) или нажатием кнопки |^@| панели инструментов Стандартная (Standard), позволяет непосредственно на рабочем листе создавать простые рисунки.
Рис. 1.34. Панель инструментов Рисование
Приведем несколько простых советов по созданию графических объектов с помощью панели инструментов Рисование (Drawing):
Для создания квадрата или круга рисуйте их при нажатой клавише
<Shift>'
Для того чтобы расположить стрелку или отрезок под углом, кратным 45 , во время рисования объекта нажимайте клавишу <Shift>
Для перемещения объекта строго по вертикали или горизонтали перетаскивайте его при нажатой клавише <Shift>
Для привязки объекта к линиям сетки рисуйте его при нажатой клавише <Alt>'
Для того чтобы перемещать объект с привязкой к линиям сетки, перетаскивайте его при нажатой клавише <Alt>
Параметры страницы, предварительный просмотр и печать документа
В полученной таблице расчета краткосрочной ссуды осталось отключить сетку, сбросив флажок Сетка (Gridlines) на вкладке Вид (View) диалогового окна Параметры (Options), открываемого командой Сервис, Параметры (Tools, Options).
С помощью команды Файл, Предварительный просмотр (File, Print Preview) или нажатия кнопки |Qi| панели инструментов Стандартная (Standard) можно проверить, как документ будет располагаться на листе бумаги при печати (рис. 1.35). Выход из режима Просмотр (Print Preview) производится нажатием кнопки Закрыть (Close).
Изменение параметров страницы осуществляется командой Файл, Параметры страницы (File, Page Setup). Диалоговое окно Параметры страницы (Page Setup) (рис. 1.36) позволяет задать ориентацию (книжная, альбомная), раз-
мер бумаги, качество печати, размеры полей и колонтитулов, нумерацию страниц и выводимый в колонтитулы текст. При нажатии кнопки Печать открывается диалоговое окно Печать (Print) (рис. 1.37), в котором можно задать печать не всего документа, а только выделенного диапазона ячеек.
Рис. 1.35. Окно Предварительного просмотра
Рис. 1.36. Диалоговое окно Параметры страницы
Команда Файл, Печать (File, Print) и кнопка Lal панели инструментов
Стандартная (Standard) управляют выводом документа на печать. С помощью диалогового окна Печать (Print) (рис. 1.37) можно задать принтер и выбрать вариант печати: Всю книгу (Entire Workbook), Выделенные листы (Selected Sheets) или Выделенный диапазон (Selection). Также можно задать диапазон страниц, выводимых на печать, и число печатаемых копий. Если нажать кнопку Свойства (Properties), открывается диалоговое окно, позволяющее скорректировать свойства выбранного принтера.
Рис. 1.37. Диалоговое окно ПечатьРис. 1.37. Диалоговое окно Печать
Рис. 1.37. Диалоговое окно Печать
Рис. 1.37. Диалоговое окно Печать
Итак, ваш отчет по расчету краткосрочной ссуды создан и напечатан. Теперь с высоко поднятой головой вы можете его отнести вашему руководителю.
Глава 2
Построение графиков и решение нелинейных уравнений
В этой главе рассказывается, как с помощью электронных таблиц решаются две типичные задачи: построение графиков и решение уравнений с одним неизвестным. Для построения графиков Excel предоставляет прекрасное средство — мастер диаграмм с большим набором графиков и диаграмм, позволяющий представить данные наглядно, в наиболее выгодном свете.
Удивительно часто мы сталкиваемся с необходимостью решить то или иное уравнение, например, определить процентную ставку, при которой предлагаемая сделка выгодна, или определить скорость оборота капиталовложений. Подбор параметра (Goal Seek) как раз и является тем средством Excel, которое позволяет очень просто решать такие задачи.
Построение графика. Работа с мастером функций и мастером диаграмм
В качестве примера рассмотрим процедуру построения графика функции
У = СО52(лх) При XG [О, 1].
Для построения графика функции необходимо сначала построить таблицу ее значений при различных значениях аргумента, причем обычно аргумент изменяется с фиксированным шагом. Шаг выбирают небольшим, чтобы таблица значений функции отражала ее поведение на интервале табуляции. В нашем случае будем считать, что шаг изменения аргумента равен 0,1. Необходимо найти: у(0)' J4O»1), Х0,2), . ., у(1). С этой целью в диапазон ячеек А1:А11 введем следующие значения переменной х: о, 0.1, 0.2, ..., 1. Отме-
тим, что выбранные нами значения переменной образуют арифметическую прогрессию. Заполнение ячеек членами арифметической прогрессии в Excel можно осуществить двумя способами:
Первый способ. В ячейки А1 и А2 вводим первый и второй члены арифметической прогрессии и выделяем эти ячейки. После этого устанавливаем указатель мыши на маркере заполнения выделенного диапазона (рис. 2.1) и
протаскиваем его вниз до тех пор, пока не получится числовой ряд нужной
длины (рис. 2.2).длины (рис. 2.2).Рис. 2.1. Указатель мыши на маркере заполненияРис. 2.1. Указатель мыши на маркере заполненияРис. 2.2. Построение последовательности с помощью маркера заполненияРис. 2.2. Построение последовательности с помощью маркера заполненияРис. 2.3. Диалоговое окно ПрогрессияРис. 2.3. Диалоговое окно ПрогрессияВторой способ. В ячейку Al вводим первый член арифметической прогрессии. Выбираем команду Правка, Заполнить, Прогрессия (Edit, Fill, Series) и в открывшемся диалоговом окне Прогрессия (Series) (рис. 2.3) в группе Расположение (Arrange) устанавливаем переключатель в положение По столбцам (Columns), а в группе Тип (Туре) — в положение Арифметическая (Linear). В поле Шаг (Step Value) вводим значение о. 1, а в поле Предельное значение (Stop Value) — 1. После нажатия кнопки ОК будет выполнено построение прогрессии.
длины (рис. 2.2).
длины (рис. 2.2).
Рис. 2.1. Указатель мыши на маркере заполнения
Рис. 2.1. Указатель мыши на маркере заполнения
Рис. 2.2. Построение последовательности с помощью маркера заполнения
Рис. 2.2. Построение последовательности с помощью маркера заполнения
Рис. 2.3. Диалоговое окно Прогрессия
Рис. 2.3. Диалоговое окно Прогрессия
С помощью команды Правка, Заполнить, Прогрессия (Edit, Fill, Series) можно создавать также геометрические прогрессии. На рис. 2.4 приведен при-
мер построения арифметической и геометрической прогрессий по столбцам. Начальное значение обеих прогрессий равно I, шаг— 1,2, а предельное значение — 4.
Рис. 2.4. Построение арифметической и геометрической прогрессий
Вернемся к нашему примеру построения графика. В ячейку В1 введем формулу
=COS(ПИ()*А1)Л2
Ввод формул в ячейку можно производить с клавиатуры или с помощью диалогового окна Мастер функций (Function Wizard), вызываемого командой Вставка, Функция (Insert, Function) или нажатием кнопки /J панели инструментов Стандартная (Standard). Мастер функций содержит список всех встроенных в Excel функций, а также справки по синтаксису функций и примеры их применения.
Рассмотрим приемы работы с мастером функций на примере ввода вышеупомянутой формулы. Выделим ячейку В1 и нажмем кнопку л| панели инструментов Стандартная (Standard). На экране появится первое диалоговое окно Мастер функций (Function Wizard) (рис. 2.5).
Рис. 2.5. Первое диалоговое окно Мастер функцийРис. 2.5. Первое диалоговое окно Мастер функций
Рис. 2.5. Первое диалоговое окно Мастер функций
Рис. 2.5. Первое диалоговое окно Мастер функций
Это окно содержит два списка: Категория (Function Category) — список, включающий 11 категорий функций, и Функция (Function Name) — список имен функций, входящих в выбранную категорию. Категория Полный алфавитный перечень (АП) содержит все встроенные функции Excel, имена которых упорядочены в алфавитном порядке. Категория 10 недавно использовавшихся (Most Recently Used) содержит имена десяти недавно использовавшихся функций. Она ускоряет вызов функций, постоянно используемых пользователем.
Функция cos относится к категории Математические (Malh&Trig). Выберем эту функцию и нажмем кнопку Далее (Next). На экране появится второе диалоговое окно Мастер функций (Function Wizard) (рис. 2.6).
Рис. 2.6. Второе диалоговое окно Мастер функций
В поле число (Number) второго диалогового окна Мастер функций (Function Wizard) вводится аргумент функции. В рассматриваемом примере это пи о *ai. Конечно, его можно ввести с клавиатуры. Однако этот аргумент содержит встроенную функцию пи (), поэтому лучше, нажав кнопку а], расположенную перед полем число (Number), еще раз вызвать мастер функций (эта кнопка предназначена для построения суперпозиции функций).
В первом диалоговом окне Мастер функций (Function Wizard) выберем функцию пи о из категории Математические (Math&Trig). Так как функция пи о не имеет аргументов, то нет необходимости переходить ко второму шагу мастера функций. Достаточно, нажав кнопку Готово (Finish), вернуться в диалоговое окно функции cos (рис. 2.7).
Появившееся окно отличается от окна, представленного на рис. 2.6, тем, что в поле число (Number) введена функция пи». С помощью клавиатуры введем в это поле * и, щелкнув ячейку А1 рабочего листа, введем А1 (рис. 2.8). Конечно, ссылку на ячейку можно ввести также с помощью клавиатуры, однако, такой способ ввода (щелчком на соответствующей ячейке) дает дополнительную проверку правильности ввода.
Рис. 2.7. Диалоговое окно Изменение функции для построения суперпозиции функций
Рис. 2.8. Второе диалоговое окно Мастер функций с заполненным полем число
После нажатия кнопки Готово (Finish) в ячейку В1 будет введена формула
=COS(ПИ()*А1)
Отметим, что при использовании мастера функций перед вводом формулы в ячейку не надо вводить знак "=", т. к. мастер функций введет его сам. Теперь
с помощью клавиатуры добавьте в эту формулу операцию возведения в квадрат. После всех описанных действий в ячейку В1 будет введена формула
=COS(ПИ о*А1)Л2
Для того чтобы завершить процесс табулирования функции, выделим ячейку BI, установим указатель мыши на маркере заполнения этой ячейки и протащим его вниз до ячейки В11.
Итак, таблица значений функции создана. Для построения графика функции выделим диапазон ячеек А1:ВП, содержащий таблицу значений функции и ее аргумента, и вызовем мастер диаграмм. Вызов мастера диаграмм производится либо с помощью команды Вставка, Диаграмма, На этом листе (Insert, Chart, On this Sheet) или команды Вставка, Диаграмма, На новом листе (Insert, Chart, As New Sheet), либо нажатием кнопки панели инструментов Стандартная (Standard).
Протаскивая указатель мыши на рабочем листе, выделяем прямоугольную область, где будет построен график (рис. 2.9).
Рис. 2.9. Выделение указателем мыши области построения диаграммы
Проверим, правильно ли введен в поле ввода Диапазон (Range) первого диалогового окна Мастер диаграмм (Chart Wizard) диапазон ячеек, по которому строится график (рис. 2.10).
Рис. 2.10. Первое диалоговое окно Мастер диаграммРис. 2.10. Первое диалоговое окно Мастер диаграмм
Рис. 2.10. Первое диалоговое окно Мастер диаграмм
Рис. 2.10. Первое диалоговое окно Мастер диаграмм
На втором шаге мастера диаграмм выбираем тип диаграммы — График (Line) (рис. 2.11).
Мастер диаграмм - шаг 2 из 5
i ыберитетипдиаграммьi ыберитетипдиаграммьЛинейчатаяЛинейчатаяЛепестковаяЛепестковаяОтмена I XНазад Далее > | отОтмена I XНазад Далее > | от
i ыберитетипдиаграммь
i ыберитетипдиаграммь
Линейчатая
Линейчатая
Лепестковая
Лепестковая
Отмена I XНазад Далее > | от
Отмена I XНазад Далее > | от
Рис. 2.11. Второе диалоговое окно Мастер диаграмм
На третьем шаге мастера диаграмм выбираем вид графика, например 10 — сглаженный график (рис. 2.12).
Рис. 2.12. Третье диалоговое окно Мастер диаграмм
На четвертом шаге мастера диаграмм заполняем диалоговое окно следующим образом. В группе Ряды данных находятся (Data Series in) устанавливаем переключатель в положение В столбцах (Columns). В поле Считать метками оси X введем 1 (номер столбца, из которого берутся метки оси X). а в поле Считать метками легенды — о (т. к. легенда — обозначение графиков различных функций разными цветами — нам не нужна) (рис. 2.13).
Рис. 2.13. Четвертое диалоговое окно Мастер диаграмм
На пятом шаге мастера диаграмм заполняем диалоговое окно следующим образом. В группе Добавить легенду? (Add a Legend?) установим переключа-
тель в положение Нет (No). В поле Название диаграммы (Chart Title) введем график функции, а в группе Название по оси (Axes Title) в поля Категорий (X) (Category (X)) и Значений (У) (Value(Y)) введем х и у, соответственно (рис. 2.14).
Рис. 2.14. Пятое диалоговое окно Мастер диаграмм
Нажатие кнопки Готово (Finish) завершает построение графика (рис. 2.15)
Рис. 2.15. Результат построения графика функции
Наиболее часто в Excel используются следующие стандартные математические функции:
ABS(аргумент)
Абсолютная величина
ACOS(аргумент)
Арккосинус
ASIN(аргумент)
Арксинус
ATAN(аргумент)
Арктангенс
COS(аргумент)
Косинус
ЕХР(аргумент)
Экспонента
LN(аргумент)
Натуральный логарифм
LOGIC(аргумент)
Десятичный логарифм
LOG(аргумент; основание)
Логарифм аргумента по данному основанию (если основание опущено, то оно полагается равным 10)
ПИ ()
л
SIN(аргумент)
Синус
TAN(аргумент)
Тангенс
Построение графика функции с одним условием
Рассмотрим пример построения графика функции
У =У =х < 0,5,х < 0,5,1 +10,2 — л-, 1 + х + л2 х1/3, л >0,5
У =
У =
х < 0,5,
х < 0,5,
при хе[0, 1].
Этот график строится так же, как в разделе 2.1, за одним исключением — в ячейку В1 вводится формула:
=ЕСЛИ(А1<0.5;(1+ABS(0.2-А1))/(1НА1ьА1а2);А1А(1/3) )
Синтаксис логической функции если (if):
ЕСЛИ(лог_выражение; значение_если истина; значение_если ложь)
ФУНКЦИЯ ЕСЛИ возвращает значение_если_истина, ССЛИ лог выражение ИМСбТ значение ИСТИНА (true), И значение если ложь — ССЛИ логвыражение Имеет
значение ложь (false). Функция если используется для проверки значений формул и организации переходов в зависимости от результатов этой проверки.
Другими логическими функциями являются:
И(логическое_значение1;
логическое_значение2; . . . ) (AND)
Возвращает значение истина, если все аргументы имеют значение ИСТИНА; возвращает значение ЛОЖЬ, если хотя бы один аргумент имеет значение ложь; например, и (2 + 2 = 4; 2 + 3 = 5) равняется истина; если ячейка В4 содержит число между 1 и 100, ТОИ(КВ4; В4 <10 0) равняется ИСТИНА
ИЛИ(логическое_значение1; логическое_значение2; ...) (OR)
Возвращает истина, если хотя бы один из аргументов имеет значение ИСТИНА; возвращает ЛОЖЬ, если все аргументы имеют значение ЛОЖЬ; например, И(2+2=4;2тЗ=6) возвращает истина; если ячейка В4 содержит число меньше 1 или больше 100, то или(В4<1; В4>100) возвращает ИСТИНА
НЕ(логическое_значение) (NOT)
Меняет на противоположное логическое значение своего аргумента; например не (2 4 2 = 5) возвращает истина; если ячейка В4 содержит число меньше 1 или больше 100, то НЕ(ИЛИ(В4<1,- В4>100)) возвращает ложь
2.3. Построение графика функции с двумя условиями
Рассмотрим пример построения графика функции
1 + 1п(1 + х), х < 0,2,
1 + х1/2
ТГ*’ хе[0,2, 0,8],
2е"2л, х>0,8
при хе[0, 1].
График строится так же, как в разделе 2.1, только в ячейку В1 вводится формула:
=ЕСЛИ(АК0.2;1+«|1+А1) ; ЕСЛИ (И (А1>=0.2; А1<=0.8) ; (1+А1А(1/2))/(1+А1);2*ЕХР(-2*А1)))
Заметим, что в ячейку В1 можно ввести и более простую формулу, которая приведет к тому же результату:
=ЕСЛИ (АКО . 2; 1+LN (1+А1) ;ЕСЛИ(А1<=0.8; (1+А1А (1/2) ) / (1+А1) ;
2*ЕХР(-2*А1)))
Построение двух графиков в одной системе координат
Рассмотрим пример построения в одной системе координат графиков следующих двух функций
у = 2sin(x) и
г = 3cos(2x) — sin(x)
при хе[-3, 0].
В диапазон ячеек А2:А17 вводим значения переменной х от -3 до 0 с шагом 0,2. В ячейки В1 и С1 вводим у и z, соответственно. В ячейки В2 и С2 вводим формулы
=2*SIN(А2)
=3*COS(2*A2)-SIN(А2)
Выделим диапазон В2:С2, установим указатель мыши на маркере заполнения этого диапазона и протащим его вниз так, чтобы заполнить диапазон В2:С17. Выделим диапазон ячеек А1:С17, в который внесены: таблица значений двух функций, их общий аргумент и заголовки столбцов В и С, и вызовем мастер диаграмм. С помощью мыши на рабочем листе выделим прямоугольную область, где будет построен график. Проверим, правильно ли введен в первом диалоговом окне Мастер диаграмм (Chart Wizard) диапазон ячеек, по которому строится график.
На втором шаге мастера диаграмм выбираем тип диаграммы — График (Line).
На третьем шаге мастера диаграмм выбираем тип графика, например 1 (разновидность точечного графика).
На четвертом шаге мастера диаграмм заполняем диалоговое окно следующим образом. В группе Ряды данных находятся (Data series in) устанавливаем переключатель в положение В столбцах (Columns). В поле Считать метками оси X введем 1 (номер столбца), а в поле Считать метками легенды — 1 (номер строки) (рис. 2.13).
На пятом шаге мастера диаграмм заполняем диалоговое окно следующим образом. В группе Добавить легенду? (Add a Legend?) установим переключатель в положение Да (Yes). В поле Название диаграммы (Chart Title) введем
графики функций, а в группе Название по оси (Axes Title) в поле Категорий (X) (Category (X)) введем к, а в поле Значений (Y) (Value (Y)) введем у и z. Нажатие кнопки Готово (Finish) завершает построение графика (рис. 2.16).
Рис. 2.16. Графики двух функций, построенные в одной системе координат
Как видно из рис. 2.16, графики функций у и г различаются, для наглядности, по типу линий. Как это делается?
График, внешний вид которого мы хотим изменить, выделяется и с помощью контекстного меню вызывается диалоговое окно Форматирование элемента данных (Format Data Entry) (рис. 2.17), которое позволяет изменять тип, толщину и цвет линии, а также тип, цвет и фон маркера.
Построение поверхности
Рассмотрим пример построения поверхности 22
Z = х - у
при х, уе[-1, 1].
В диапазон ячеек В1 :L1 введем последовательность значений: -1, -0.8, ..., 1 переменной у, а в диапазон ячеек А2:А12 — последовательность значений: -1, -0.8, ..., 1 переменной х. В ячейку В2 введем формулу
=$А2''2-В$1Л2
Рис. 2.17. Диалоговое окно Форматирование элемента данных
Выделим эту ячейку, установим указатель мыши на ее маркере заполнения и протащим его так, чтобы заполнить диапазон В2:Ы2.
Знак $, стоящий перед буквой в имени ячейки, дает абсолютную ссылку на столбец с данным именем, а знак $, стоящий перед цифрой — абсолютную ссылку на строку с этим именем. Поэтому при протаскивании формулы из ячейки В2 в ячейки диапазона B2:L12 в них будет найдено значение z при соответствующих значениях х и у.
Итак, таблица значений функции z при различных значениях переменных создана (рис. 2.18).
Перейдем к построению поверхности. Выделим диапазон ячеек A1:L12, содержащий таблицу значений функции и ее аргументов, и вызовем мастер диаграмм. С помощью мыши на рабочем листе выделим прямоугольную область, где будет построен график. Проверим, правильно ли введен в первом диалоговом окне Мастер диаграмм (Chart Wizard) диапазон ячеек, по которому будет строиться поверхность.
На втором шаге мастера диаграмм выбираем тип диаграммы — Поверхность (3D Surface).
На третьем шаге мастера диаграмм выбираем вид поверхности, например 1.
На четвертом шаге мастера диаграмм заполняем диалоговое окно следующим образом. В группе Ряды данных находятся (Data Series in) устанавливаем переключатель в положение В столбцах (Columns). В поле Считать мет-
ками оси X введем 1 (номер столбца), а в поле Считать метками оси Значений — 1 (номер строки) (рис. 2.13).
1.:1.:223344SS667788SS101011123141112314151516161 00 0.96 0 84 0.64 0.361 00 0.96 0 84 0.64 0.36О ОО; 0.28. 0 48 0 60О ОО; 0.28. 0 48 0 60-0 8 -0.36-0 8 -0.360 00 -0.04 -0.16 -0.36 -0.64: -1.000 00 -0.04 -0.16 -0.36 -0.64: -1.000 04. 0.00 -0.12:Д.32 -0 60 -0.960 04. 0.00 -0.12:Д.32 -0 60 -0.96-0.84 -0.48-0.84 -0.48> >f поверхность ;> >f поверхность ;-0.96 -0.60 -0.32 -0.12 0.00-0.96 -0.60 -0.32 -0.12 0.000.0 0.20.0 0.21 00 -0 64 -0 36 -0 16 0.04:1 00 -0 64 -0 36 -0 16 0.04:-0.4 -0.84Д 2 Д 96-0.4 -0.84Д 2 Д 96Д.20Г0 00' 0.12 0.16 0.12 6.00 -0.20 -0 48 -0.84 'Д.20Г0 00' 0.12 0.16 0.12 6.00 -0.20 -0 48 -0.84 '-0.48 -0.20: 0.00 0.12: 0.16^ 0.12 0.00--0.20,-0.48. -0.84-0.60 -0.32 -0 12 0 000.04 0.00 -0.12 -0.32 -0 60 -0.96-0.48 -0.20: 0.00 0.12: 0.16^ 0.12 0.00--0.20,-0.48. -0.84-0.60 -0.32 -0 12 0 000.04 0.00 -0.12 -0.32 -0 60 -0.960.4: 0.6 0.80.4: 0.6 0.80.64^0.60 0.48 0.28 0 000 36 0.32 0.20: 0 00 -0.280.64^0.60 0.48 0.28 0 000 36 0.32 0.20: 0 00 -0.28Д.6 -0.64 0.281 0 00^ 0.20 0.32Д.6 -0.64 0.281 0 00^ 0.20 0.320.200.32036:0.320.20:0.00-0.28-0.640.480 600640 600 48'0 28U 0U-0 360.84U 96Т00U 960 840 640 360 ОО0.200.32036:0.320.20:0.00-0.28-0.640.480 600640 600 48'0 28U 0U-0 360.84U 96Т00U 960 840 640 360 ОО1.0 6.00 -0 36 -0.641.0 6.00 -0 36 -0.64-1.0-0.8Д.6 -0.4Д.2-1 0 6 00 0 360.64 6 84 0.96-1.0-0.8Д.6 -0.4Д.2-1 0 6 00 0 360.64 6 84 0.96-0.64 -0.28 0.00-0 36 0 00 0.280 000 36 0 64-0.64 -0.28 0.00-0 36 0 00 0.280 000 36 0 646.00.2040.60.8ТО6.00.2040.60.8ТО
1.:
1.:
2
2
3
3
4
4
S
S
6
6
7
7
8
8
S
S
10
10
11
12
3
14
11
12
3
14
15
15
16
16
1 00 0.96 0 84 0.64 0.36
1 00 0.96 0 84 0.64 0.36
О ОО; 0.28. 0 48 0 60
О ОО; 0.28. 0 48 0 60
-0 8 -0.36
-0 8 -0.36
0 00 -0.04 -0.16 -0.36 -0.64: -1.00
0 00 -0.04 -0.16 -0.36 -0.64: -1.00
0 04. 0.00 -0.12:Д.32 -0 60 -0.96
0 04. 0.00 -0.12:Д.32 -0 60 -0.96
-0.84 -0.48
-0.84 -0.48
> >f поверхность ;
> >f поверхность ;
-0.96 -0.60 -0.32 -0.12 0.00
-0.96 -0.60 -0.32 -0.12 0.00
0.0 0.2
0.0 0.2
1 00 -0 64 -0 36 -0 16 0.04:
1 00 -0 64 -0 36 -0 16 0.04:
-0.4 -0.84
Д 2 Д 96
-0.4 -0.84
Д 2 Д 96
Д.20Г0 00' 0.12 0.16 0.12 6.00 -0.20 -0 48 -0.84 '
Д.20Г0 00' 0.12 0.16 0.12 6.00 -0.20 -0 48 -0.84 '
-0.48 -0.20: 0.00 0.12: 0.16^ 0.12 0.00--0.20,-0.48. -0.84
-0.60 -0.32 -0 12 0 000.04 0.00 -0.12 -0.32 -0 60 -0.96
-0.48 -0.20: 0.00 0.12: 0.16^ 0.12 0.00--0.20,-0.48. -0.84
-0.60 -0.32 -0 12 0 000.04 0.00 -0.12 -0.32 -0 60 -0.96
0.4: 0.6 0.8
0.4: 0.6 0.8
0.64^0.60 0.48 0.28 0 00
0 36 0.32 0.20: 0 00 -0.28
0.64^0.60 0.48 0.28 0 00
0 36 0.32 0.20: 0 00 -0.28
Д.6 -0.64 0.281 0 00^ 0.20 0.32
Д.6 -0.64 0.281 0 00^ 0.20 0.32
0.200.32036:0.320.20:0.00-0.28-0.64
0.480 600640 600 48'0 28U 0U-0 36
0.84U 96Т00U 960 840 640 360 ОО
0.200.32036:0.320.20:0.00-0.28-0.64
0.480 600640 600 48'0 28U 0U-0 36
0.84U 96Т00U 960 840 640 360 ОО
1.0 6.00 -0 36 -0.64
1.0 6.00 -0 36 -0.64
-1.0-0.8Д.6 -0.4Д.2
-1 0 6 00 0 360.64 6 84 0.96
-1.0-0.8Д.6 -0.4Д.2
-1 0 6 00 0 360.64 6 84 0.96
-0.64 -0.28 0.00
-0 36 0 00 0.28
0 000 36 0 64
-0.64 -0.28 0.00
-0 36 0 00 0.28
0 000 36 0 64
6.0
0.2
04
0.6
0.8
ТО
6.0
0.2
04
0.6
0.8
ТО
Рис. 2.18. Результат табуляции функции двух переменных z = х2 — у2
На пятом шаге мастера диаграмм заполним диалоговое окно следующим образом. В группе Добавить легенду? (Add a Legend?) установим переключатель в положение Нет (No). В поле Название диаграммы (Chart Title) введем поверхность, а в группе Название по оси (Axes Title) в поля Категорий (X) (Category(X)), Значений (Z) (Value (Z)) и Рядов (У) (Series(Y)) введем х, z и у, соответственно. Нажатие кнопки Готово (Finish) завершает построение графика (рис. 2.19).
Рис. 2.19. Поверхность z = х2 — у2Рис. 2.19. Поверхность z = х2 — у2
Рис. 2.19. Поверхность z = х2 — у2
Рис. 2.19. Поверхность z = х2 — у2
Нахождение корней уравнения
Рассмотрим пример нахождения всех корней уравнения
х3 - 0,01х2 - 0,7044х + 0,139104 = 0.
Отметим, что у полинома третьей степени имеется не более трех вещественных корней. Для нахождения корней их предварительно нужно локализовать. С этой целью необходимо построить график функции или ее протабу- лировать. Например, протабулируем наш полином на отрезке [-1, 1] с шагом 0,2. Результат табуляции приведен на рис. 2.20, где в ячейку В2 введена следующая формула:
=А2А3-0.01*А2А2—0.7044*А2+0.139104
Рис. 2.20. Локализация корней полинома.
Из рис. 2.20 видно, что полином меняет знак на интервалах: [—1,—0,8], [0,2, 0,4] и [0,6, 0,8]. Это означает, что на каждом из них имеется корень данного полинома. Поскольку полином третьей степени имеет не более трех действительных корней, значит мы локализовали все его корни.
Найдем корни полинома методом последовательных приближений с помощью команды Сервис, Подбор параметра (Tools, Goal Seek). Относительная погрешность вычислений и предельное число итераций задаются на вкладке Вычисления (Calculation) диалогового окна Параметры (Options), открываемого командой Сервис, Параметры (Tools, Options) (рис. 2.21).
Зададим относительную погрешность и предельное число итераций, равными 0.00001 и юоо, соответственно. В качестве начальных значений приближений к корням можно взять любые точки из отрезков локализации корней.
Рис. 2.21. Вкладка Вычисления диалогового окна Параметры
Возьмем, например, их средние точки: -0.9, о.з и 0.7 и введем их в диапазон ячеек С2:С4. В ячейку D2 введем формулу
=С2А3—0.01*С2Л2—0.7044*С2+0.139104
Выделим эту ячейку и с помощью маркера заполнения протащим введенную в нее формулу на диапазон D2:D4. Таким образом, в ячейках D2:D4 вычисляются значения полинома при значениях аргумента, введенного в ячейки С2:С4, соответственно.
Теперь выберем команду Сервис, Подбор параметра (Tools, Goal Seek) и заполним диалоговое окно Подбора параметра (Goal Seek) (рис. 2.22) следующим образом.
Рис. 2.22.Диалоговое окноПодбор параметраРис. 2.22.Диалоговое окноПодбор параметра
Рис. 2.22.
Диалоговое окно
Подбор параметра
Рис. 2.22.
Диалоговое окно
Подбор параметра
В поле Установить в ячейке (Set Cell) введем D2. Отметим, что в этом поле дается ссылка на ячейку, в которую введена формула, вычисляющая значение левой части уравнения. Для нахождения корня уравнения с помощью средства подбора параметров надо записать уравнение так, чтобы его правая часть не содержала переменную.
В поле Значение (То Value) вводим о (в этом поле указывается правая часть уравнения). В поле Изменяя значение ячейки (By Changing Cell) введем С2 (в этом поле дается ссылка на ячейку, отведенную под переменную).
Вводить ссылки на ячейки в поля диалогового окна Подбор параметра (Goal Seek) удобнее не с клавиатуры, а щелчком на соответствующей ячейке. При этом Excel автоматически будет превращать их в абсолютные ссылки (в нашем примере $d$2 и $с$2).
После нажатия кнопки ОК средство подбора параметров находит приближенное значение корня, которое помещает в ячейку С2. В данном случае оно равно -0.919999. Как выглядит диалоговое окно Результат подбор параметра (Goal Seek Status) после успешного завершения поиска решения, показано на рис. 2.23.
Рис. 2.23. Диалоговое окно Результат подбора параметраРис. 2.23. Диалоговое окно Результат подбора параметра
Рис. 2.23. Диалоговое окно Результат подбора параметра
Рис. 2.23. Диалоговое окно Результат подбора параметра
Аналогично в ячейках СЗ м С4 находим два оставшихся корня. Они равны 0.20999 И 0.71999.
Нахождение корней уравнения методом деления отрезка пополам
Хорошим упражнением по работе в Excel является программирование на рабочем листе алгоритма нахождения корня уравнения F(x) = 0 методом деления отрезка пополам. Пусть непрерывная функция F(x) имеет значения разных знаков на концах отрезка [а, Д, т. е.
Да) ДД < 0,
тогда уравнение Дх) = 0 имеет корень внутри этого отрезка, который называется отрезком локализации корня.
Пусть с = (а + Д/2 — середина отрезка [а, Д. Если Да) Дс) < 0, то корень находится на отрезке [а, с], который примем за новый отрезок локализации корня. Если Да) Дс) > 0, то за новый отрезок локализации корня возьмем [с, Д. Отметим, что новый отрезок локализации корня в два раза меньше первоначального.
Процесс деления отрезка локализации корня продолжаем до тех пор, пока его длина не станет меньше е — точности нахождения корня. В этом случае любая точка отрезка локализации отличается от корня не более чем на е/2.
На рис. 2.24 приведены результаты нахождения корня уравнения х2—2 = 0 с точностью до 0,001 методом деления отрезка пополам.
Рис. 2.24. Нахождение корня уравнения методом деления отрезка пополам
В ячейку Е7 введена погрешность нахождения корня. За первоначальный отрезок локализации корня выбран отрезок [0, 2]. В ячейки D10, ЕЮ, F9, G9, Н9 и 110 введены, соответственно, формулы
=ЕСЛИ(G9<=0; D9;F9)
=ЕСЛИ(G9<=0;F9;E9)
=(D9+E9)/2
=(D9A2-2)*(F9A2-2)
=F9A2—2
=ЕСЛИ(E9—D9<$E$7;"Корень найден и равен "&TEKCT(F9;"0.0000");"")
которые протаскиваем вниз по столбцам до тех пор, пока не будет найден корень. Из рис. 2.24 видно, что корнем уравнения с точностью до 0,001 является 1,414.
Функция текст (Text) преобразует число в текстовую строку по указанному формату и имеет следующий синтаксис:
ТЕКСТ(значение; формат)
Аргументы:
значение
Либо числовое значение, либо формула, вычисление которой дает числовое значение, либо ссылка на ячейку, содержащую числовое значение
формат
Числовой формат с вкладки Число (Number) диалогового окна Формат ячеек (Format Cells), открываемого командой Формат, Ячейки (Format, Cells). Формат не может содержать звездочку (*) и не может быть Общий (General)
Приведем два примера работы функции текст: ТЕКСТ(2.7153; "0.00р.") Возвращает 2.72р. ТЕКСТ (2.7153; "0.000'') ВОЗВращаеТ 2.715
Упражнения
Вариант 1
у = sin(x) е 2ху = sin(x) е 2хg =g =Построить в разных системах координат при хе [-2, 2] графики следующих функций:
у = sin(x) е 2х
у = sin(x) е 2х
g =
g =
„ sin2(x) „ 2хч, х > 0, .2 + х
z = ■ 21п(1 + х2) + *+cos ^; х G (-1, о), 2 + х
(1 + х)3/5, х>0.
Построить в одной системе координат при хе [-2, 2] графики следующих двух функций:
у = 2sin(x) cos (х), г = 3cos2(2x) sin(x).
Построить поверхность z = х2 — 2у2 при х, je[-l, 1].
Найти все корни уравнения х3 — 2,92х2 + 1,4355х + 0,791136 = 0.
Вариант 2
Построить в разных системах координат при хе [-2, 2] графики следующих функций:
1 + х23sin(x) - cos2(x), х < 0,
1 + 2х ^1 +, л > 0,
z = • - х + 2е 2л , х е (0, 1),
|2 - х||/3, х > 1.
Построить в одной системе координат при хе [-2, 2] графики следующих двух функций:
У = 2sin(nx) - 3cos (лх), г = cos2(2hx) — 2sin(nx).
Построить поверхность z = Зх2 — 2sin2(y)y2 при х, у еН. 1].
Найти все корни уравнения х3 — 2,5бх2 - 1,3251х + 4,395006 = 0.
Вариант 3
Построить в разных системах координат при хе[-2, 1,5] графики следующих функций:
2 + sin2(x)2 + sin2(x)1 + х21 + х2
2 + sin2(x)
2 + sin2(x)
1 + х2
1 + х2
X =X =Зх + -jl + х2 , х < 0, 2 cos(x)e~2x , х е [О, 1], 2 sin(3x), х > 1.
X =
X =
Построить в одной системе координат при х е [-2, 2] графики следующих двух функций:
у = 58щ(лл) — соб(Злх) sinfax), г = со5(2лх) — 251п3(лх).
Построить поверхность г = 5x2cos2(y) — 2^2^ при х, уе[-1, 1].
Найти все корни уравнения х3 + 2,84л2 — 5,6064л — 14,766336 = 0.
Вариант 4
Построить в разных системах координат при ле[-1,5, 1,5] графики следующих функций:
1 + cos(x)У = -8 =1 + cos(x)У = -8 =3 + sin 2 (2л)
1 + cos(x)
У = -8 =
1 + cos(x)
У = -8 =
1 + cos (х) 2^/1 + 2л, л > 0,
2cos2(x), хе[0,1],■J1 + [2 sin(3x)|1/3, х > 1.2cos2(x), хе[0,1],■J1 + [2 sin(3x)|1/3, х > 1.
2cos2(x), хе[0,1],
■J1 + [2 sin(3x)|1/3, х > 1.
2cos2(x), хе[0,1],
■J1 + [2 sin(3x)|1/3, х > 1.
Построить в одной системе координат при хе [-2, 2] графики следующих двух функций:
у = 3sin(2nx) cos(nx) — cos2(3nx), г = 2со52(2лх) — Збш(Злх).
Построить поверхность при х, je[-l, 1]
2х2 - еу2х2 - еу|х + j^< 0.5,|х + j^< 0.5,
2х2 - еу
2х2 - еу
|х + j^< 0.5,
|х + j^< 0.5,
хе2х - у, 0.5< |х + j| <1,
2e v - уеу, 1< |х + ^ .
Найти все корни уравнения х3 + 1,41л2 — 5,4724л — 7,380384 = 0.
Вариант 5
Построить в разных системах координат при хе[-1,8. 1,8] графики следующих функций:
У = ^/1 + е3х . g =У = ^/1 + е3х . g =3 + sin(x) „ , х <0,1 + х22x2cos2(x), x>0.3 + sin(x) „ , х <0,1 + х22x2cos2(x), x>0.
У = ^/1 + е3х . g =
У = ^/1 + е3х . g =
3 + sin(x) „ , х <0,
1 + х2
2x2cos2(x), x>0.
3 + sin(x) „ , х <0,
1 + х2
2x2cos2(x), x>0.
x < 0,x < 0,
x < 0,
x < 0,
2 +3х1 + х +х22 +3х1 + х +х2
2 +3х
1 + х +х2
2 +3х
1 + х +х2
, x e [0, 1),
Построить в одной системе координат при хе[0, 3] графики следующих двух функций:
у = 2sin(nx) cos(nx), z = cos(nx) sin(37tx).
Построить поверхность г = 2х2 cos2(x) — 2^ при х, je[-l, 1].
Найти все корни уравнения х3 + 0,85x2 — 0,4317х + 0,043911 = 0.
Вариант 6
Построить в разных системах координат при хе[-2, 1,8] графики следующих функций:
2jsin(3x)[, х > 1.2jsin(3x)[, х > 1.J1 + 2х2 - sin2(x), х < 0,2 + х . ., х >0,
2jsin(3x)[, х > 1.
2jsin(3x)[, х > 1.
Построить в одной системе координат при хе[-3, 0] графики следующих двух функций:
у = 3sin(3nx) со$(2лх), £ = со$3(4лх) sin(roc).
Построить поверхность z = 2е0,2х х2 — 2_у4 при х, j/ef-1. 1|.
Найти все корни уравнения х3 — 0Д2Х2 - 1,4775х + 0,191906 = 0.
Вариант 7
Построить в разных системах координат при хе [-1,7; 1,5] графики следующих функций:
1 + х + х2.
, х<0,
1 + х2
■ ,11 + —^, , хе[0,1), V 1 + X2 '
2j 0,5 + sin(x) |, х > 1.
Построить в одной системе координат при хе[-3, 0] графики следующих двух функций:
у = 2sin(27tx) cos(4nx), г = cos2(3nx) — cos(nx) sin(nx).
Построить поверхность г = х2 — Зе0’2^у1 при х, ^е[-1, 1].
Найти все корни уравнения х3 + 0.77Х2 — 0,2513х + 0,016995 = 0.
Вариант 8 * ^
Построить в разных системах координат при хе|-1,5, 1,8] графики следующих функций:
Vl"+ X2 , х < О,Vl"+ X2 , х < О,
Vl"+ X2 , х < О,
Vl"+ X2 , х < О,
2| 0.5 + sin(x) , х > 1.2| 0.5 + sin(x) , х > 1.
2| 0.5 + sin(x) , х > 1.
2| 0.5 + sin(x) , х > 1.
Построить в одной системе координат при хе[-3, 0] графики следующих двух функций:
у = 25ш(2лх) со5(4лх), г — cos2(3nx) - cos(nx) sin(nx).
Построить поверхность г = х2 - 2е0,2у у при х, ^е[—1, 1].
Найти все корни уравнения х3 + 0,77х2 - 0,2513х + 0,016995 = 0.
Вариант 8
Построить в разных системах координат при хе[-1,5, 1,8] графики следующих функций:
Z =Z =tJI + |х , х < 0,tJI + |х , х < 0,1 + хе~1 + -Jx2 + sin2(x)1 + хе~1 + -Jx2 + sin2(x)х < 0,х < 0,V1+0-X)2, хе[0,1),V1+0-X)2, хе[0,1),1 + Л1 + cos2(x)1 + Л1 + cos2(x)х>1.х>1.
Z =
Z =
tJI + |х , х < 0,
tJI + |х , х < 0,
1 + хе~
1 + -Jx2 + sin2(x)
1 + хе~
1 + -Jx2 + sin2(x)
х < 0,
х < 0,
V1+0-X)2, хе[0,1),
V1+0-X)2, хе[0,1),
1 + Л
1 + cos2(x)
1 + Л
1 + cos2(x)
х>1.
х>1.
Построить в одной системе координат при хе[0, 2] графики следующих двух функций:
у = 5ш(3лх) + 2sin(2nx) cos(3nx), г = cos(nx) — соб(Злх) 51п2(лх).
Построить поверхность при х, je[-l, 1]
Найти все корни уравнения х3 + 0,88л — 0,3999л + 0,037638 = 0.
Вариант 9
Построить в разных системах координат при ле[-1,4, 1,9] графики следующих функций:
— - sin
2 + л-
2 +cos3(x)
1 + 2л
- л < 0, 1 +л2
2 = *
sin2(v)-JTZ л , л е [0.1), sin2(x)e0'2v, л>1.
Построить в одной системе координат при ле[0, 2] графики следующих двух функций:
у = cos(3nx) 51п(лл) + 2sin(3nx) СО5(2лл), г — СО52(лл) — СО5(Злл).
Построить поверхность при л, у е[-1, 1]
л2 — 3 J-3, л2 + у2 < 1,
Зл2 - у3, л2 + у2 > 1.
(d) Найти все корни уравнения л3 + 0,78л2 — 0,8269л + 0,146718 = 0.
Вариант 10
^ + л2 , л <0,• 2 Z х 1 + Л sin (л) +-—1 + cos 2 (л)^ + л2 , л <0,• 2 Z х 1 + Л sin (л) +-—1 + cos 2 (л)л > 0,л > 0,Построить в разных системах координат при ле[-1,4, 1,4] графики следующих функций
^ + л2 , л <0,
• 2 Z х 1 + Л sin (л) +-—
1 + cos 2 (л)
^ + л2 , л <0,
• 2 Z х 1 + Л sin (л) +-—
1 + cos 2 (л)
л > 0,
л > 0,
хе [0,1),хе [0,1),z = ■z = ■1 + sin(x)1 + X1 + sin(x)1 + X+ Зх, х > 1.+ Зх, х > 1.
хе [0,1),
хе [0,1),
z = ■
z = ■
1 + sin(x)
1 + X
1 + sin(x)
1 + X
+ Зх, х > 1.
+ Зх, х > 1.
Построить в одной системе координат при хе[0, 2] графики следующих двух функций:
у = 2sin(2nx) cos(nx) + sin(3nx), г = со$(2лх) з1п2(лх) — со5(4лх).
Построить поверхность ^ = 3x2sin2(x) - 5e2jj/ при х, у е [—1, 1].
Найти все корни уравнения х3 + 2,28л2 — 1,9347х — 3,907574 = 0.
Глава 3
Работа с массивами
Часто при работе с таблицами возникает необходимость применить одну и ту же операцию к целому диапазону ячеек или произвести расчеты по формулам, зависящим от большого массива данных. Для решения подобных задач Excel предоставляет простые и удобные средства, которые будут описаны в данной главе.
Простейшие операции над массивами
В качестве первого примера простой операции над массивами рассмотрим умножение массива А1:В2 на число 5. Выделите на рабочем листе область, например D1:E2, такого же размера, как и массив-множимое (рис. 3.1).
Рис. 3.1. Выделение диапазона для ввода результирующего массива
Теперь введите формулу
=А1:В2*5
Для этого установите курсор в строке формул и закончите ввод не как обычно, нажатием клавиши <Enter>, а нажатием клавиш <Ctrl>+<Shift>+ <Enter>). Таким образом вы сообщите программе, что необходимо выпол-
нить операцию над массивом. При этом Excel заключит формулу в строке формул в фигурные скобки (рис.3.2):
(-А1:В2*5}(-А1:В2*5}Рис. 3.2. Произведение массива на числоРис. 3.2. Произведение массива на число
(-А1:В2*5}
(-А1:В2*5}
Рис. 3.2. Произведение массива на число
Рис. 3.2. Произведение массива на число
При работе с массивами формула действует на все ячейки диапазона. Нельзя изменять отдельные ячейки в операндах формулы. Аналогично можно вычислить:
Сумму (разность) массивов (рис. 3.3)
Рис. 3.3. Сумма двух массивов
□ Поэлементное произведение (деление) массивов (рис. 3.4)
Рис. 3.4. Поэлементное произведение двух массивов
Массив, каждый элемент которого связан посредством некоторой функции с соответствующим элементом первоначального массива (рис. 3.5)
Рис. 3.5. Вычисление функции от каждого элемента массиваРис. 3.5. Вычисление функции от каждого элемента массива
Рис. 3.5. Вычисление функции от каждого элемента массива
Рис. 3.5. Вычисление функции от каждого элемента массива
МОБР (MINVERSE)МОПРЕД (MDETERM)МУМНОЖ (MMULT)ТРАНСП (TRANSPOSE)МОБР (MINVERSE)МОПРЕД (MDETERM)МУМНОЖ (MMULT)ТРАНСП (TRANSPOSE)[=МУМН0Ж^10БР(П G2) I[=МУМН0Ж^10БР(П G2) IРис. 3.6. Решение системы линейных уравненийРис. 3.6. Решение системы линейных уравнений
МОБР (MINVERSE)
МОПРЕД (MDETERM)
МУМНОЖ (MMULT)
ТРАНСП (TRANSPOSE)
МОБР (MINVERSE)
МОПРЕД (MDETERM)
МУМНОЖ (MMULT)
ТРАНСП (TRANSPOSE)
[=МУМН0Ж^10БР(П G2) I
[=МУМН0Ж^10БР(П G2) I
Рис. 3.6. Решение системы линейных уравнений
Рис. 3.6. Решение системы линейных уравнений
Встроенные функции для работы с матрицами
В Excel имеются следующие специальные функции для работы с матрицами:
Обратная матрица
Определитель матрицы
Матричное произведение двух матриц
Транспонированная матрица
Во всех случаях при работе с матрицами перед вводом формулы надо выделить область на рабочем листе, куда будет выведен результат вычислений.
Решим в качестве примера систему линейных уравнений с двумя неизвестными, матрица коэффициентов которой записана в ячейки F1:G2, а свободные члены — в ячейки 11:12 (рис. 3.6).
Для решения этой задачи вспомним, что решение линейной системы АХ = В, где А — матрица коэффициентов, В — столбец (вектор) свободных членов, X — столбец (вектор) неизвестных, имеет вид Х= А-'В, где А-х — матрица, обратная по отношению к А. Поэтому для решения нашей системы уравнений выделим под вектор решений диапазон К1:К2 и введем в него формулу, как показано на рис. 3.6.
Решим также систему линейных уравнений У^Х=В, где
Для решения этой системы введем в диапазон ячеек А1:В2 элементы матрицы А, а в диапазон ячейки D1:D2 — элементы столбца свободных членов В. Выберем диапазон F1:F2, куда поместим элементы вектора решения, и введем следующую формулу:
(=МУМНОЖ(МОБР(МУМНОЖ(Al:В2;Al:В2));DI: D2) }
Рассмотрим пример вычисления квадратичной формулы г = Х^АХ, где А — квадратная матрица, введенная в диапазон А1:В2, X — вектор, введенный в диапазон D1:D2, а символ (т) обозначает операцию транспонирования Для вычисления г введем в ячейку F1 (рис. 3.7) формулу
(=МУМНОЖ(МУМНОЖ(ТРАНСП(DI:D2);А1:В2); DI:D2) }
Рис. 3.7. Нахождение квадратичной формы
Хотя результатом этой формулы является число, не забудьте для ее ввода нажать клавиши <Ctrl>+<Shift>+<Enter>. Если вы этого не сделаете, в ячейке F1 появится сообщение #зндч!.
Вычислим значение квадратичной формы г = УЪ^ЛУ, где
Для решения этой задачи введем в диапазон ячеек А1:В2 элементы матрицы Дав диапазон D1:D2 — элементы столбца У. Для вычисления квадратичной формы введем в ячейку F1 формулу
(=МУМНОЖ(ТРАНСП(Dl:D2);МУМНОЖ(ТРАНСП(Al:В2);МУМНОЖ(Al:В2;DI:D2) ) ) }
Пошаговое решение системы линейных уравнений методом Гаусса
Хорошим упражнением по работе с массивами является пошаговое программирование на рабочем листе решения системы линейных уравнений методом Гаусса.
На рис. 3.8 приведены результаты решения методом Гаусса следующей системы линейных уравнений:
2х| + Зх2 + 7хз + 6х4 = 1,
Зх| + 5х2 + ЗХ3 + х4 = 3,
5х| + Зх2 + х3 + Зх4 = 4 ,
Зх| + Зх2 + х3 + 6х4 = 5
Рис. 3.8. Пошаговое решение системы линейных уравнений методом Гаусса
В диапазоны ячеек A33:D36 и ЕЗЗ:ЕЗб введены матрица коэффициентов и столбец свободных членов, соответственно. Содержимое ячеек АЗЗ:ЕЗЗ скопировано в ячейки А38:Е38, А43:Е43 и А48:Е48. В диапазон ячеек А39:Е39 введена формула
(=А34:Е34-$А$33:$Е$33*(А34/$А$33)(
обращающая в нуль коэффициент при х, во втором уравнении системы. Выделим диапазон А39:Е39 и протащим маркер заполнения этого диапазона так, чтобы заполнить диапазон А39:Е41. Это обратит в нуль коэффициент при %! в третьем и четвертом уравнениях системы. Скопируем значения из диапазона ячеек А39:Е39 в диапазоны А44:Е44 и А49:Е49. Для копирования значений без формул воспользуйтесь командой Правка, Специальная вставка (Edit, Special Paste) и в открывшемся диалоговом окне Специальная вставка (Special Paste) в группе Вставить (Paste) установите переключатель в положение Значения (Value) (рис. 3.9).
Рис. 3.9.Диалоговое окно Специальная вставкаРис. 3.9.Диалоговое окно Специальная вставка
Рис. 3.9.
Диалоговое окно Специальная вставка
Рис. 3.9.
Диалоговое окно Специальная вставка
В диапазон ячеек А45:Е45 вводим формулу
{=А40:Е40-$А$39:$Е$39*(В40/$В$39)}
Выделим диапазон А45:Е45 и протащим маркер заполнения этого диапазона так, чтобы заполнить диапазон А45:Е46. Это обратит в нуль коэффициент при Х2 в третьем и четвертом уравнениях системы. Копируем значения из диапазона ячеек А45:Е45 в диапазон А50:Е50. В диапазон ячеек А51:Е51 вводим формулу
(=А46:Е46-$А$45:$Е$45*(С46/$С$45)}
которая обращает в нуль коэффициент при хз четвертого уравнения системы.
Прямая прогонка метода Гаусса завершена. Обратная прогонка заключается в вводе в диапазоны G36:K36, G35:K35, G34:K34 и G33:K33, соответственно, следующих формул:
(=А51:E51/D51}
{=(А50:E50-G36:K36*D50)/С50}
(=(А49:Е49-G36:K36*D49-G35:К35*С49)/В4 9}
{=(А48:E48-G36:K36*D48-G35:K35*C48-G34:К34*В48)/А48}
В диапазоне ячеек КЗЗ:К36 получено решение системы.
Упражнения
Вариант 1
Решить системы линейных уравнений АХ = В, А’Х = В и вычислить значение квадратичной формы г = У^^^ У, где
а =
'9 5 4 Т
4 6 8 7
5 8 7 6
к5 6 8 7,
, в =
Г (У
6
3
<7,
, У =
6 2 А
Вариант 2
Решить системы линейных уравнений АХ = В, ^"^ Х = В и вычислить значение квадратичной формы г = А1 У, где
Я =
г9 6 3 8>
4 6 7 4
2 3 5 3
4 8 3 7,
, в =
<3>
1
4
<2>
, У =
"3"
5
1
<3,
Вариант 3
Решить системы линейных уравнений АХ = В, АА'АХ = В и вычислить значение квадратичной формы г = УТАТА3 У, где
Вариант 4
Решить системы линейных уравнений АХ = В, А^А^ АХ = В и вычислить значение квадратичной формы z = Р1АтААТ У, где
А =
'14 2 5'
4 4 5 3
12 6 8
<3 7 3 2,
, в =
'з>
8 1 <7;
, У=
'1' 2 5
<L
Вариант 5
Решить системы линейных уравнений АХ = В, AAtAIX = B и вычислить значение квадратичной формы z = УТА3АТУ, где
'3'51Л'3'51Л'9 6 3 8'
'3'
5
1
Л
'3'
5
1
Л
4 6 7 4
2 3 5 3
<4 8 3 7,
Вариант 6
Решить системы линейных уравнений АХ = В, А3АТХ = В и вычислить значе-
Вариант7
Решить системы линейных уравнений АХ = В, АТА3Х = В и вычислить значение квадратичной формы z = УТААТА2 У, где
А =
'3 3 4 5'
2 6 4 6
3 4 5 5
J 9 3 6,
, в =
ГР
4 0 <3,
, У =
Т 2 1 Л
Вариант 8
Решить системы линейных уравнений АХ = В, ААТА2Х = В и вычислить значение квадратичной формы z = УТА2АТА У, где
А =
'2 15 2'
5 2 2 6
2 2 12
<13 3 1,
, в =
'Г
3
0
<2,
, У =
'3'
1
2
Вариант 9
Решить системы линейных уравнений АХ = В, АТААТХ = В и вычислить значение квадратичной формы z = У^ААТААТУ, где
А =
'7 6 2 7'
4 9 5 5
2 3 4 9
<1 5 6 9,
, В =
'3'
2 0
<2,
, У =
'Г
1
3
<3,
Вариант 10
Решить системы линейных уравнений АХ = В, А27^АХ = В и вычислить значение квадратичной формы z = УТААТААГУ, где
'2'ОIЛ'2'ОIЛ'3 6 5 2'
'2'
О
I
Л
'2'
О
I
Л
4 6 3 5
2 3 2 6
<2 4 3 6,
Рис. 4.1. Расчет ипотечной ссудыРис. 4.1. Расчет ипотечной ссуды
Рис. 4.1. Расчет ипотечной ссуды
Рис. 4.1. Расчет ипотечной ссуды
Глава 4
Финансовый анализ в Excel
Excel предоставляет большой спектр функций финансового анализа: от нахождения платы по процентам, амортизации оборудования, регулярных выплат по займу до оценки эффективности капиталовложений. В данной главе на большом количестве конкретных примеров рассмотрены функции финансового анализа Excel, а также приведены примеры составления финансовых отчетов: от расчета затрат на производство до оптимального планирования рекламной кампании.
Финансовая функция ОПЛАТ
Рассмотрим пример расчета 30-летней ипотечной ссуды со ставкой 8% годовых при начальном взносе 20% и ежемесячной (ежегодной) выплате с помощью функции пплат (рмт).
Для приведенного на рис. 4.1 ипотечного расчета в ячейки введены формулы, показанные на рис. 4.2.
Рис. 4.2. Формулы для расчета ипотечной ссуды
Функция пплат вычисляет величину постоянной периодической выплаты ренты (например, регулярных платежей по займу) при постоянной процентной ставке.
Синтаксис:
ППЛАТ(ставка;
кпер; нз; бз; тип)
Аргументы:
ставка
Процентная ставка за период
кпер
Общее число периодов выплат
нз
Текущее значение, т. е. общая сумма, которую составят будущие платежи
бз
Будущая стоимость или баланс наличности, который нужно достичь после последней выплаты. Если аргумент бз опущен, то он полагается равным 0 (например, будущая стоимость займа равна 0)
тип
Число 0 или 1, обозначающее, когда должна производиться выплата. Если тип равен 0 или опущен, то оплата производится в конце периода, если 1 — то в начале периода
Если бз = 0 и тип = 0, то функция пплат вычисляет по формуле:
р /а-му (1 + 0"-1’
Где Р — нз, i — ставка И П — кпер.
Отметим, что очень важно быть последовательным в выборе единиц измерения для задания аргументов ставка и кпер. Например, если вы делаете ежемесячные выплаты по четырехгодичному займу из расчета 12% годовых, то для задания аргумента ставка используйте 12V12, а для задания аргу-
мента кпер — 4*12. Если вы делаете ежегодные платежи по тому же займу, то для задания аргумента ставка используйте 12%, а для задания аргумента кпер — 4.
Для нахождения общей суммы, выплачиваемой на протяжении интервала выплат, умножьте возвращаемое функцией пплат значение на величину кпер. Интервал выплат — это последовательность постоянных денежных платежей, осуществляемых за непрерывный период. Например, заем под автомобиль или заклад являются интервалами выплат. В функциях, связанных с интервалами выплат, выплачиваемые вами деньги, такие как депозит на накопление, представляются отрицательным числом, а деньги, которые вы получаете, такие как чеки на дивиденды, представляются положительным числом. Например, депозит в банк на сумму 1 000 руб. представляется аргументом -1000, если вы вкладчик, и аргументом 1000, если вы — представитель банка.
Пример расчета эффективности неравномерных капиталовложений с помощью функций НПЗ, ВНДОХ
и Подбор параметра
Рассмотрим следующую задачу. Вас просят дать в долг 10000 руб. и обещают вернуть через год 2 000 руб., через два года — 4 000 руб., через три года — 7 000 руб. При какой годовой процентной ставке эта сделка выгодна?
В приводимом на рис. 4.3 расчете в ячейку В8 введена формула
=НПЗ(В7;ВЗ:В5)
Рис. 4.3. Расчет годовой процентной ставкиРис. 4.3. Расчет годовой процентной ставкиКроме того, для автоматизации составления таблицыКроме того, для автоматизации составления таблицыформулаформулав ячейку С6 введенав ячейку С6 введена
Рис. 4.3. Расчет годовой процентной ставки
Рис. 4.3. Расчет годовой процентной ставки
Кроме того, для автоматизации составления таблицы
Кроме того, для автоматизации составления таблицы
формула
формула
в ячейку С6 введена
в ячейку С6 введена
=ЕСЛИ(В6=1;"год";ЕСЛИ(И(В6>=2;В6<=4);"года";"лет"))
Первоначально в ячейку В7 вводится произвольный процент, например 3%. После этого выбираем команду Сервис, Подбор параметра (Tools, Goal Seek) и заполняем открывшееся диалоговое окно Подбор параметра (Goal Seek), как показано на рис. 4.4.
Рис. 4.4. Диалоговое окно Подбор параметра при расчете годовой процентной ставки
В поле Установить в ячейке (Set Cell) даем ссылку на ячейку В8, в которой вычисляется чистый текущий объем вклада по формуле
=НПЗ(В7;ВЗ:В5)
В поле Значение (То Value) указываем хоооо — размер ссуды. В поле Изменяя значение ячейки (By Changing Cell) даем ссылку на ячейку В7, в которой вычисляется годовая процентная ставка. После нажатия кнопки ОК средство подбора параметров определит, при какой годовой процентной ставке чистый текущий объем вклада равен 10000 руб. Результат вычисления выводится в ячейку В7. В нашем случае годовая учетная ставка равна 11,79%. Вывод: если банки предлагают большую годовую процентную ставку, то предлагаемая сделка не выгодна.
Функция нпз (npv) возвращает чистый текущий объем вклада, вычисляемый на основе ряда последовательных поступлений наличных и нормы амортизации. Чистый текущий объем вклада — это сегодняшний объем будущих платежей (отрицательные значения) и поступлений (положительные значения). Например, вам предлагают следующую сделку. У вас берут в долг некоторую сумму денег и предлагают через £| лет вернуть сумму, равную Ри, через ^2 лет — Рк2 и т- д- и> наконец, через кп лет — Ркп- Кроме данной сделки, у вас есть альтернативный способ использования ваших денег, например, положить их в банк под / процентов годовых. Тогда чистым текущим объемом вклада является та сумма денег, которой вам нужно располагать в начальный год, чтобы, положив их в банк под г процентов годовых, вы получили предлагаемую прибыль. В нашем случае чистый текущий объем вклада равен
Л р
j=\ (1 + о
Синтаксис:
НПЗ(ставка; 1-е значение; 2-е значение; ...)
Аргументы:
ставка1-е значение,2-е значение, ...ставка1-е значение,2-е значение, ...Процентная ставка за период
ставка
1-е значение,
2-е значение, ...
ставка
1-е значение,
2-е значение, ...
От 1 до 29 аргументов, представляющих расходы и доходы. 1-е значение, 2-е значение, . . . ДОЛЖНЫ быть равномерно распределены по времени и осуществляться в конце каждого периода. НПЗ использует порядок аргументов 1-е значение, 2-е значение, . . . для определения порядка поступлений и платежей
Считается, что инвестиция, значение которой вычисляет функция низ, начинается за один период до даты денежного взноса i-го значения и заканчивается с последним денежным взносом в списке. Вычисления функции нпз базируются на будущих денежных взносах. Если первый денежный взнос приходится на начало первого периода, то первое значение следует добавить к результату функции нпз, но не включать в список аргументов.
Если и — это количество денежных взносов в списке значений, Pj — j-e значение и / — ставка, то функция нпз вычисляется по формуле
Функция нпз связана с функцией вндох (внутренняя скорость оборота) вндох — это скорость оборота, для которой нпз равняется нулю:
НПЗ(ВНДОХ(...); ..,)=о.
Функция вндох (irr) возвращает внутреннюю скорость оборота для ряда последовательных операций с наличными, представленными числовыми значениями. Объемы операций не обязаны быть регулярными, как в случае ренты. Внутренняя скорость оборота —- это процентная ставка дохода, полученного от инвестиций, состоящих из выплат (отрицательные значения) и поступлений (положительные значения), которые происходят в регулярные периоды времени.
Синтаксис:
ВНДОХ(значения; прогноз)
значениязначенияАргументы:
значения
значения
Массив или ссылка на ячейки, содержащие числовые величины, для которых вычисляется внутренняя скорость оборота средств.
Значения должны включать по крайней мере одно положительное значение и одно отрицательное значение, для того чтобы можно было вычислить внутреннюю скорость оборота. Функция вндох использует порядок значений для интерпретации порядка денежных выплат или поступлений, поэтому нужно следить, чтобы значения выплат и поступлений вводились в правильном порядке
прогнозВеличина, о которой предполагается, что она близка к результату
вндох
Если л + 1 — количество значений в списке, Pj — j-e значение, то вндох является корнем относительно i (ставки) следующего уравнения ^ + tv " °"
Для вычисления вндох Excel использует метод итераций. Начиная со значения прогноз, функция вндох выполняет циклические вычисления, пока не получит результат с точностью 0,00001. Если функция вндох не может получить результат после 20 попыток, возвращается значение ошибки #число!
В большинстве случаев нет необходимости задавать прогноз для вычислений с помощью функции вндох. Если прогноз опушен, то он полагается равным 0,1 (10%).
Если вндох выдает значение ошибки #число! или результат далек от ожидаемого, можно попытаться выполнить вычисления еще раз, но уже с другом значением аргумента прогноз.
Таким образом, задачу, сформулированную в самом начале данного раздела, можно решить также с помощью функции вндох. Для этого в ячейку В2 вместо 10000р. надо ввести -юооор., а в ячейку В7 — функцию вндох (В2 :В5), которая и найдет минимальную годовую учетную ставку.
Пример расчета эффективности капиталовложений с помощью функции ПЗ
Рассмотрим следующую задачу. Допустим, что у вас просяг в долг 10000 руб. и обещают возвращать по 2000 руб в течение 6 лет. Будет ли выгодна эта сделка при годовой ставке 7%?
В приводимом на рис. 4.5 расчете в ячейку В5 введена формула
=ПЗ(В4;В2;-ВЗ)
Кроме того, для автоматизации составления таблицы в ячейки С2 и Вб введены формулы
1122з4з45566АРазмер ссудыСрокЕжегодно возвращаемые деньгиГодовая процентная ставкаЧистый текущий объем вкладаВыводIАРазмер ссудыСрокЕжегодно возвращаемые деньгиГодовая процентная ставкаЧистый текущий объем вкладаВыводIВВ10 ОООр10 ОООр662 ОООр 7%2 ОООр 7%9 533р9 533рлетлетССееВыгоднее деньги положить под процентыВыгоднее деньги положить под процентыН АН А>j м&ф^ц™ пз/Ы>j м&ф^ц™ пз/Ы
1
1
2
2
з
4
з
4
5
5
6
6
А
Размер ссуды
Срок
Ежегодно возвращаемые деньги
Годовая процентная ставка
Чистый текущий объем вклада
ВыводI
А
Размер ссуды
Срок
Ежегодно возвращаемые деньги
Годовая процентная ставка
Чистый текущий объем вклада
ВыводI
В
В
10 ОООр
10 ОООр
6
6
2 ОООр 7%
2 ОООр 7%
9 533р
9 533р
лет
лет
С
С
е
е
Выгоднее деньги положить под проценты
Выгоднее деньги положить под проценты
Н А
Н А
>j м&ф^ц™ пз/Ы
>j м&ф^ц™ пз/Ы
Рис. 4.5. Расчет эффективности капиталовложений
=ЕСЛИ(В2=1;
"год";ЕСЛИ(И(В2>=2;В2<=4);"года";"лет"))
=ЕСЛИ (ВКВ5; "Выгодно дать деньги в долг"; ЕСЛИ (В5-В1;
"Варианты равносильны"; "Выгоднее деньги положить под проценты"))
Функция пз (pv) возвращает текущий объем вклада на основе постоянных периодических платежей. Функция пз аналогична функции нпз. Основное различие между ними заключается в том, что функция пз допускает, чтобы денежные взносы происходили либо в конце, либо в начале периода. Кроме того, в отличие от функции нпз, денежные взносы в функции пз должны быть постоянными на весь период инвестиции.
Синтаксис:
ПЗ(ставка; кпер; выплата; бз; тип)
Аргументы:
ставка
Процентная ставка за период
кпер
Общее число периодов выплат
выплата
Величина постоянных периодических платежей
бз
Будущая стоимость или баланс наличности, который нужно достичь после последней выплаты. Если аргумент бз опущен, он полагается равным 0 (например, будущая стоимость займа равна 0)
тип
Число 0 или 1, обозначающее, когда должна производиться выплата. Если тип равен 0 или опущен, то оплата производится в конце периода, если 1 — то в начале периода
Если тип = 0 и бз = 0, то функция пз вычисляется по следующей формуле
/0 + 0” ’
где ?4 — выплата, / — ставка, П — кпер.
В данном разделе была рассмотрена задача с двумя результирующими функциями: числовой — чистым текущим объемом вклада и качественной, оценивающей, выгодна ли сделка. Эти функции зависят от нескольких параметров. Некоторыми из них вы можете управлять, например, сроком и суммой ежегодно возвращаемых денег. Часто бывает удобно проанализировать ситуацию для нескольких возможных вариантов параметров. Команда Сервис, Сценарии (Tools, Scenarios) предоставляет такую возможность с одновременным автоматизированным составлением отчета. Рассмотрим способ применения этой команды для следующих трех комбинаций срока и суммы ежегодно возвращаемых денег: 6, 2000; 12, 1500 и 7, 1500.
Выберем команду Сервис, Сценарии (Tools, Scenarios). В открывшемся диалоговом окне Диспетчер сценариев (Scenarios Manager) для создания первого сценария нажмите кнопку Добавить (Add) (рис. 4.6).
Рис. 4.6. Диалоговое окно Диспетчер сценариевРис. 4.6. Диалоговое окно Диспетчер сценариев
Рис. 4.6. Диалоговое окно Диспетчер сценариев
Рис. 4.6. Диалоговое окно Диспетчер сценариев
В диалоговом окне Добавление сценария (Add Scenario) в поле Название сценария (Scenario Name) введите, например пз 1, а в поле Изменяемые ячейки (Changing Cells) — ссылку на ячейки В2 и ВЗ, в которые вводятся значения параметров задачи (срок и сумма ежегодно возвращаемых денег) (рис. 4.7).
После нажатия кнопки ОК появится диалоговое окно Значения ячеек сценария (Scenario Values), в поля которого введите значения параметров для первого сценария (рис. 4.8).
С помощью кнопки Добавить (Add) последовательно создайте нужное число сценариев. После этого диалоговое окно Диспетчер сценариев (Scenarios Manager) будет иметь вид, показанный на рис. 4.9.
Рис. 4.7. Диалоговое окно
Добавление сценария
Рис. 4.8. Диалоговое окно Значения ячеек сценария
Рис. 4.9. Вывод сценариев на рабочий лист с помощью диалогового окна Диспетчер сценариев
С помощью кнопки Вывести (Show) можно вывести результаты, соответствующие выбранному сценарию. Нажатие кнопки Отчет (Summary) открывает диалоговое окно Отчет по сценарию (Scenario Summary) (рис. 4.10).
Рис. 4.10. Диалоговое окноОтчет по сценариюРис. 4.10. Диалоговое окноОтчет по сценарию
Рис. 4.10. Диалоговое окно
Отчет по сценарию
Рис. 4.10. Диалоговое окно
Отчет по сценарию
В этом окне в группе Тип отчета (Scenario Туре) необходимо установить переключатель в положение Структура (Scenario Summary) или Сводная таблица (Scenario Pivot Table), а в поле Ячейки результата (Result Cells) дать ссылку на ячейки, где вычисляются значения результирующих функций. После нажатия кнопки ОК создается отчет. На рис. 4.11 показан отчет по сценариям типа Структура (Scenario Summary).
<£айл Правка Вне Ведай /уормаг Сервис Дайны» Йкйо 2
Рис. 4.11. Отчет по сценарию типа Структура
Финансовые функции ПЛ ПРОЦ и ОСН ПЛАТ
Рассмотрим пример вычисления основных платежей, платы по процентам, общей ежегодной платы и остатка долга на примере ссуды 100000 руб. на срок 5 лет при годовой ставке 2% (рис. 4.12).
Рис. 4.12. Вычисление основных платежей и платы по процентам
Ежегодная плата вычисляется в ячейке ВЗ по формуле
=ППЛАТ(процент; срок; -размер_ссуды),
где ячейки Bl, В2 и В4 имеют имена: процент, срок и размер_ссуды, соответственно. Присвоение имени ячейке осуществляется с помощью команды Вставка, Имя, Присвоить (Insert, Name, Define). За первый год плата по процентам в ячейке В7 вычисляется по формуле
=06*процент
Основная плата в ячейке С7 вычисляется по формуле
=ежегодная_плата-В7
где ежегодная_плата — имя ячейки ВЗ. Остаток долга в ячейке D7 вычисляется по формуле
=D6-C7
В оставшиеся годы эти платы определяются с помощью протаскивания маркера заполнения выделенного диапазона B7:D7 вниз по столбцам. Отметим, что основную плату и плату по процентам можно было непосредственно найти с помощью функций оснплат (ррмт) и плпроц (грмт), соответственно.
Функция плпроц возвращает платежи по процентам за данный период на основе периодических постоянных выплат и постоянной процентной ставки.
Синтаксис:
ПЛПРОЦ(ставка; период; кпер; нз; бз; тип)
Функция оснплат возвращает величину выплаты за данный период на основе периодических постоянных платежей и постоянной процентной ставки.
Синтаксис:
ОСНПЛАТ(ставка; период; кпер; нз; бз; тип)
Аргументы функций плпроц: и оснплат:
период
Период, за который требуется найти прибыль (должен находиться в интервале от 1 до кпер)
ставка
Процентная ставка за период
кпер
Общее число периодов выплат
нз
Текущее значение, т. е. общая сумма, которую составят будущие платежи
бз
Будущая стоимость или баланс наличности, который нужно достичь после последней выплаты. Если аргумент бз опущен, он полагается равным 0 (например, будущая стоимость займа равна 0)
тип
Число 0 или 1, обозначающее, когда должна производиться выплата. Если тип равен 0 или опущен, то оплата производится в конце периода, если 1 — то в начале периода
Функции плпроц и оснплат тесно связаны между собой, а именно
ПЛПу = i Bj-\, ОСНПу = А — ПЛПу, Bj = Bj-y — ОСИП, при у е [0, л],
где j — номер периода, п — кпер, ПЛПу, ОСНПу и Bj — это плпроц, оснплат и остаток долга, соответственно, за j -й период, ПЛП0 = О, ОСНП0 = О, Во — нз, А — величина выплаты за один период годовой ренты на основе постоянных выплат и постоянной процентной ставки, вычисляемая с помощью функции ППЛАТ.
Финансовые функции
БЗ, КПЕР и НОРМА
Функция бз (fv) вычисляет будущее значение вклада на основе периодических постоянных платежей и постоянной процентной ставки. Функция бз
подходит для расчета итогов накоплений при ежемесячных банковских взносах.
Синтаксис:
БЗ(ставка; кпер; выплата; нз; тип)
Аргументы:
ставка
Процентная ставка за период
кпер
Общее число периодов выплат
выплата
Величина постоянных периодических платежей
нз
Текущее значение, т. е. общая сумма, которую составят будущие платежи
тип
Число 0 или 1, обозначающее, когда должна производиться выплата. Если тип равен 0 или опущен, то оплата производится в конце периода, если 1 — в начале периода
Если тип = 0 и нз = 0, то функция бз вычисляется по следующей формуле
^<*±0^1,
где Л — выплата, i — ставка, П — кпер.
Приведем пример использования функции вз. Предположим, вы хотите зарезервировать деньги для специального проекта, который будет осуществлен через год. Предположим, вы собираетесь вложить 1000 руб. при годовой ставке 6%. Вы собираетесь вкладывать по 100 руб. в начале каждого месяца в течение года. Сколько денег будет на счете в конце 12 месяцев?
С помощью формулы
-БЗ(б%/12; 12; -100; -1000; 1)
получаем ответ: 2 301.40р.
Функция кпер (nper) вычисляет общее количество периодов выплаты для данного вклада на основе периодических постоянных выплат и постоянной процентной ставки.
Синтаксис:
КПЕР(ставка; выплата; нз; бз; тип)
Аргументы:
ставкаПроцентная ставка за период
выплатаВеличина постоянных периодических платежей
НЗ
Текущее значение, т. е. общая сумма, которую составят будущие платежи
бз
Будущая стоимость или баланс наличности, который нужно достичь после последней выплаты. Если аргумент бз опущен, он полагается равным 0 (например, будущая стоимость займа равна 0)
типЧисло 0 или 1, обозначающее, когда должна производиться вы
плата. Если тип равен 0 или опущен, то оплата производится в конце периода, если 1 — то в начале периода
Если тип = 0 и бз = О функция кпер вычисляется по следующей формуле
(Pi )
l0g|+'\T + 1J’
где Р — нз, i — ставка, А — выплата.
Например, если вы берете в долг 1000 руб. при годовой ставке 1% и собираетесь выплачивать по 100 руб. в год, то число выплат вычисляется следующим образом:
=КПЕР(1%; -100; 1000)
В результате получаем ответ: 11.
Функция норма (rate) вычисляет процентную ставку за один период, необходимую для получения определенной суммы в течение заданного срока путем постоянных взносов. Следует отметить, что функция норма вычисляет процентную ставку методом итераций, поэтому решение может быть и не найдено. Если после 20 итераций погрешность определения ставки превышает 0,000 0001, то функция норма возвращает значение ошибки #чис.по!.
Синтаксис:
НОРМА(кпер; выплата; нз; бз; тип; нач_прибл)
Аргументы:
кперОбщее число периодов выплат
выплатаВеличина постоянных периодических платежей
нзТекущее значение, т. е. общая сумма, которую составят будущие
платежи
бзБудущая стоимость или баланс наличности, который нужно достичь
после последней выплаты. Если аргумент бз опущен, он полагается равным 0 (например, будущая стоимость займа равна 0)
типЧисло 0 или 1, обозначающее, когда должна производиться выпла
та. Если тип равен 0 или опущен, то оплата производится в конце периода, если 1 — то в начете периода
нач_прибл Предполагаемая величина нормы. Если нач_прибл опущено, то оно полагается равным 10%. Если функция норма не сходится, следует попытаться использовать различные значения нач прибл. Обычно функция норма сходится, если нач_прибл имеет значение между 0 и 1
Если бз = 0 и тип = 0, функция норма является корнем следующего уравнения
/(1 + Y
ГДе А — выплата, i — НОРМА, И — кпер, Р — нз.
Рассмотрим пример использования функции норма. Чтобы определить процентную ставку для четырехлетнего займа размером в 8 000 руб. с ежемесячной выплатой 200 руб., можно использовать формулу
=НОРМА(48; -200; 8000)
В результате получаем: месячная (т. к. период равен месяцу) процентная ставка равна 0,77%.
Функции для расчета амортизации АМР, АМГД, ДОБ и ДДОБ
Под амортизацией подразумевается уменьшение (обычно — на единицу времени) стоимости имущества в процессе эксплуатации.
Функция amp (sln) возвращает величину амортизации имущества за один период времени, используя метод равномерной амортизации.
Синтаксис:
АМР(стоимость; остаток; время_эксплуатации)
Аргументы:
стоимостьНачальная стоимость имущества
остатокОстаточная стоимость в конце амортизации (иногда
называется ликвидной стоимостью имущества)
время эксплуатации Количество периодов, за которые собственность амортизируется (иногда называется периодом амортизации)
Рассмотрим на конкретном примере применение всех функций, описываемых в данном разделе.
Предположим вы купили за 6000 руб. компьютер, который имеет срок эксплуатации 5 лет, после чего оценивается в 1 000 руб.
Снижение стоимости компьютера для каждого года эксплуатации вычисляется по формуле
=АМР(6000; 1000; 5)
В результате получаем: 1 000р.
Функция дмгд (syd) возвращает годовую амортизацию имущества для указанного периода.
Синтаксис:
АМГД(стоимость; остаток; время_эксплуатации; период)
Аргументы:
СТОИМОСТЬ
Начальная стоимость имущества
остаток
Остаточная стоимость в конце амортизации (иногда называется ликвидной стоимостью имущества)
времЯ—Эксплуатации
Количество периодов, за которые собственность амортизируется (иногда называется периодом амортизации)
период
Номер периода для вычисления амортизации (должен быть измерен в тех же единицах, что и время_эксплу- атации)
Возвращаясь к предыдущему примеру, можно рассчитать амортизацию, например, за первый год эксплуатации компьютера по формуле
=АМГД^6000; 1000; 5; 1)
и за последний год по формуле
=АМГД(6000;1000;5;5)
В результате получим: 1666.67р. и ззз.ззр., соответственно.
Функция доб (ов) возвращает амортизацию имущества за заданный период, используя метод постоянного учета амортизации.
Синтаксис:
ДОБ(стоимость; остаток; время_эксплуатации; период; месяц)
Аргументы:
СТОИМОСТЬ
Начальная стоимость имущества
остаток
Остаточная стоимость в конце амортизации (иногда называется ликвидной стоимостью имущества)
времЯ—Зксштуатации
Количество периодов, за которые собственность амортизируется (иногда называется периодом амортизации)
период
Номер периода для вычисления амортизации (измеряется в тех же единицах, что и время эксплуатации)
месяц
Количество месяцев в первом году. Если аргумент месяц опущен, то предполагается, что он равен 12
Метод постоянного учета амортизации вычисляет амортизацию, используя фиксированную процентную ставку.
При расчете нашего примера получим амортизацию за время эксплуатации компьютера:
=ДОБ(6000;1000; 5; 1)
вычисляет 1806.00р.
=ДОБ(6000;1000;5; 2)
вычисляет 1262.394р.
=ДОБ(6000;1000;5;3)
вычисляет 882.41р.
=ДОБ(6000;1000;5;4)
вычисляет 616.81р.
-ДОБ(6000;1000; 5; 5)
вычисляет 4 31.15р.
Функция ддоб (ddb) возвращает величину амортизации имущества для указанного периода, используя метод двукратного (или ^-кратного) учета амортизации.
Синтаксис:
ДДОБ(стоимость; остаток; время_эксплуатации; период; коэффициент)
Аргументы:
СТОИМОСТЬ
Начальная стоимость имущества
остаток
Остаточная стоимость в конце амортизации (иногда называется ликвидной стоимостью имущества)
время эксплуатации
Количество периодов, за которые собственность амортизируется (иногда называется периодом амортизации)
период
Номер периода для вычисления амортизации (должен быть измерен в тех же единицах, что и время_эксплу- атации)
коэффициенткоэффициентНорма снижения балансовой стоимости (амортизации) Если коэффициент опущен, то предполагается, что он равен 2 (метод двукратного учета амортизации)
коэффициент
коэффициент
Метод двукратного учета амортизации предполагает ускоренную амортизацию имущества При этом амортизация максимальна в первый период, а в последующие периоды снижается.
В примере с компьютером по методу двукратной амортизации она составит
=ДДОБ(6000;1000;5;1)
Ответ: 2 4 00.00р.
=ДДОБ(6000;1000;5;2)
Ответ: 1 440.00р.
-ДДОБ(6000;1000;5;3)
Ответ: 864.00р.
-ДДОБ(6000;1000;5;4)
Ответ: 296.00р.
=ДДОБ(6000;1000;5;5)
Ответ: 0.00р.
Примеры простейших отчетных ведомостей
Прежде чем обратиться к примерам составления отчетных ведомостей, рассмотрим удивительное средство создания списков, которое очень ускоряет и облегчает создание таблиц в Excel. На рис. 4.13 приведены примеры допустимых списков.
А
В
Г С
D
1 Е
F
G | Н
.... ।“
1
Май
Пн
Янв
Понедельник
1 -й квартал
ЭКСПО 87
ЭКСПО 87 1 Мая
01 03 98“
2
Июнь
Вт
Фев
Вторник
2-й квартал
ЭКСПО 88
ЭКСПО 89 2 Мая
02 03 98 J
3
Июль
Ср
Мар
Среда
3-й квартал
ЭКСПО 89
ЭКСПО 91 3 Мая
03 03 98 ;
4
Август
Чт
Апр
Четверг
4-й квартал
ЭКСПО 90
ЭКСПО 93 4 Мая
04 03 98 i
5
Сентябрь
Пт
Май
Пятница
1 -й квартал
ЭКСПО 91
ЭКСПО 95 5 Мая
05 03 98 .
6
Октябрь
Сб
Июн
Суббота
2-й квартал
ЭКСПО 92
ЭКСПО 97 6 Мая
06.03 98_J
7
Ноябрь
Вс
Июл
Воскресенье
3-й квартал
7 Мая
07 03 98
8
Декабрь
Пн
Авг
6
Вт
10
11
► | М^Примеры
СПИСКОВ
/ Лист11 X Лист!2/ Гист!3 J N |
1 иг
Рис. 4.13. Примеры списков
Для создания любого из приведенных списков, за исключением столбца G, достаточно ввести в ячейку первый элемент списка, выделить ячейку, установить указатель мыши на маркер заполнения ячейки и протащить ею
вдоль столбца (строки) до тех пор, пока не будет создан требуемый ряд. На вкладке Списки (Custom Lists) диалогового окна Параметры (Options) (рис. 4.14), открываемого командой Сервис, Параметры (Tools, Options), приведены встроенные в Excel списки, которые представляют собой последовательности названий месяцев и дней недели.
Рис. 4.14. Вкладка Списки диалогового окна Параметры
Используя вкладку Списки (Custom Lists), можно создавать пользовательские списки. Элементы списка пользователя надо ввести в поле Элементы списка (List Entries), причем каждый элемент вводится с новой строки. Если нажать кнопку Добавить (Add), то созданный список будет занесен в библиотеку списков. Список можно также добавить и непосредственно с рабочего листа, указав в поле Импорт списка из ячеек (Import List from Cells) диапазон, из которого импортируется список.
Кроме стандартных списков, занесенных в библиотеку, Excel позволяет легко создавать по приведенному выше алгоритму последовательности с текстом и порядковыми номерами (рис. 4.13, столбцы Е, F и Н). Если номера меняются с шагом, отличным от единицы, необходимо в две соседние ячейки ввести первые два члена последовательности, например, экспо 87 в G1 и экспо 89в G2, затем выделить диапазон GLG2, установить указатель мыши на маркер заполнения диапазона и протащить его вдоль столбца до тех пор, пока не будет создан требуемый ряд.
Перед началом создания первой отчетной ведомости пополним наши знания, рассмотрев синтаксис трех функций, наиболее часто встречающихся при расчетах в таблицах: сумм, срзнач и ранг.
Функция сумм (sum) находит сумму чисел из указанного диапазона ячеек.
Синтаксис:
СУММ(число!; число2; ...)
где число!, число2, ... — числа, которые суммируются.
Функция срзнач (average) находит среднее значение чисел из указанного диапазона ячеек.
Синтаксис:
СРЗНАЧ(число!; число2; ...)
Аргументы — те же, что и у функции сумм.
Функция ранг (rank) возвращает ранг числа в списке чисел. Ранг числа — это его величина относительно других значений в списке. (Если список отсортировать, то ранг числа будет его позицией).
Синтаксис:
РАНГ(число;
ссылка; порядок)
Аргументы:
ЧИСЛО
Число, для которого определяется ранг
ссылка
Массив или ссылка на список чисел. Нечисловые значения в ссылке игнорируются
порядок
Число, определяющее способ упорядочения. Если порядок равен 0 или опущен, то Excel определяет ранг числа так, как если бы ссылка была списком, отсортированным в порядке убывания. Если порядок — любое ненулевое число, то Excel определяет ранг числа так, как если бы ссылка была списком, отсортированным в порядке возрастания
Отметим, что функция ранг присваивает повторяющимся числам одинаковый ранг.
Вооружившись навыками работы со списками и знаниями о функциях сумм, срзнач и ранг перейдем к созданию двух отчетных таблиц.
Первый пример. Сначала обсудим, как создать отчетную ведомость о результатах работы сети магазинов, приведенную на рис. 4.15.
Рис. 4.15. Отчетная ведомость о работе сети магазинов за июнь — август
В ячейку Е4 введем формулу
=СУММ(В4:О4)
которую с помощью маркера заполнения протащим на диапазон Е4:Е9.
В ячейку ВЮ введем формулу
=СУММ(В4:В9)
которую протащим на диапазон В10:Е10.
В ячейку G4 введем формулу
=СРЗНАЧ(В4:D4)
которую протащим на диапазон G4:G9.
В ячейку Н4 введем формулу
=Е4/$Е$10
которую протащим на диапазон Н4:Н9. После чего диапазону ячеек Н4:Н9 назначим формат с помощью кнопки %].
Заметим, что знак $, стоящий перед буквой в имени ячейки, дает абсолютную ссылку на столбец с данным именем, а знак $, стоящий перед цифрой в имени ячейки, дает абсолютную ссылку на строку с этим именем. Поэтому если в формуле буква, входящая в имя ячейки, окружена с двух сторон знаками $, это означает, что в формуле дается не относительный, а абсолютный адрес ячейки, т. е. адрес, не подлежащий изменению при протаскивании формулы.
Для ввода в формулу абсолютного адреса ячейки достаточно после ввода ее относительного адреса нажать клавишу <F4>. Если бы в ячейку Н4 была введена формула =Е4/ею, то ее протаскивание на ячейки Н5:Н9 привело бы к неверному результату. Присвоение ячейке имени с помощью команды Вставка, Имя, Присвоить (Inset, Name, Define) дает другой способ абсолютной адресации ячейки. Например, если бы ячейке ЕЮ было присвоено имя итого, то в ячейку Н4 можно было бы ввести формулу
=Е4/Итого
которую затем протаскиваем на диапазон Н4:Н9.
Для нахождения места магазина по объему продаж введем в ячейку F4 формулу
=РАНГ(Е4;$Е$4:$Е$9)
которую протаскиваем на диапазон F4:F9.
С помощью функции частота (frequency) подсчитаем для данного множества суммарных выручек магазинов, сколько значений попадает в интервалы от 0 до 1000, от 1001 до 1100, от 1101 до 1200 и свыше 1201 млн. руб. С этой целью в диапазон ячеек 14:16 введем верхние границы этих интервалов юоо, 1100 и 1200, соответственно, а в диапазон ячеек J4J7 введем формулу
(=ЧАСТОТА(Е4:Е9; 14 :16)}
Данная формула выведет в ячейку J4, сколько значений находится в интервале от 0 до 1000, в ячейку J5 — от 1001 до 1 100, в ячейку J6 — от 1101 до 1200, в ячейку J7 — сколько значений будет не меньше 1201.
Функция частота возвращает распределение частот в виде вертикального массива. Для данного множества значений и данного множества карманов (интервалов, в математическом смысле) частотное распределение подсчитывает, сколько исходных значений попадает в каждый интервал.
Синтаксис:
ЧАСТОТА(массив_данных; массив_карманов)
Аргументы:
массив_кармановмассив_кармановмассив_данных Массив или ссылка на множество данных, для которых вычисляются частоты; если массив_данных не содержит значений, то функция частота возвращает массив нулей
массив_карманов
массив_карманов
Массив или ссылка на множество интервалов, в которые группируются значения аргумента массив_данных; если массив_карманов не содержит значений, то функция ЧАСТОТА возвращает количество элементов в аргументе массив данных
Частоты можно также вычислить, воспользовавшись диалоговым окном Анализ данных (Data Analysis), которое открывается командой Сервис, Анализ данных (Tools, Data Analysis). Средство анализа данных является одной из надстроек Excel. Если в меню Сервис (Tools) отсутствует команда Анализ данных (Data Analysis), то для ее установки нужно выполнить команду Сервис, Надстройки, Analysis ToolPak (Tools, Add-ins, Analysis ToolPak).
После выбора пункта Гистограмма (Histogram) в диалоговом окне Анализ данных (Data Analysis) откроется диалоговое окно Гистограмма (Histogram) (рис. 4.16).
Рис. 4.16.Диалоговое окноГистограммаРис. 4.16.Диалоговое окноГистограмма
Рис. 4.16.
Диалоговое окно
Гистограмма
Рис. 4.16.
Диалоговое окно
Гистограмма
В поле Входной интервал (Input Range) введем диапазон Е4:Е9, по которому строим гистограмму. В поле Интервал карманов (Bin Range) введем диапазон 14:16 со значениями верхних границ интервалов. Гистограмма строится на новом рабочем листе или на текущем листе с указанием диапазона ячеек для результата. В данном случае в поле ввода Выходной интервал (Output Range) введем диапазон L4:L7. На рис. 4.17 приведен результат построения гистограммы.
Рис. 4.17. Результат построения гистограммы
Второй пример. Рассмотрим еще один пример составления отчетной ведомости, в которой по объему реализованных товаров рассчитывается итоговая выручка (рис. 4.18).
Рис. 4.18. Расчет итоговой выручки по объему реализации
В ячейки А24:С24 введены стоимости трех различных товаров, а в ячейки B27:D29 — объемы их реализации по месяцам. Для того чтобы вычислить суммарную стоимость реализованных товаров по месяцам, введем в ячейки Е27:Е29 формулу
(=МУМНОЖ(В2 7:D29;TРАНСП(А24:С24) }
Отметим, что данную таблицу можно было заполнить и без привлечения матричных формул. Можно ввести в ячейку Е27 формулу
=СУММПР0ИЗВ(В27:D27;$А$24:$С$24)
и протащить ее на диапазон Е27:Е29. Функция суммпроизв (sumproduct) вычисляет сумму произведений элементов указанных диапазонов ячеек.
При построении гистограммы (рис. 4.18) в поле ввода первого диалогового окна Мастер диаграмм (Cart Wizard) введите диапазоны А27 :А29; е27:Е29. Напоминаем, что для одновременного выделения диапазонов, которые не примыкают друг к другу, сначала необходимо выделить первый диапазон, а потом при нажатой клавише <Ctrl> — второй.
Пример отчетной ведомости по расчету просроченных платежей
Рассмотрим пример составления отчетной ведомости фирмы, продающей компьютеры, позволяющей определить количество и сумму просроченных клиентами платежей (рис. 4.19).
Рис. 4.19. Расчет просроченных платежей
Дата переучета введена в ячейку F2 с помощью формулы
=ДАТА(98;7;31)
Функция дата (date) возвращает дату в числовом формате.
Синтаксис:
ДАТА(год; месяц; день)
Аргументы:
годЧисло от 1900 до 2078
месяцЧисло, представляющее номер месяца в году. Если оно больше 12,
то прибавляется к первому месяцу указанного года. Например, дата(96; 14;2) возвращает числовой формат даты 2 февраля 1997 года
деньЧисло, представляющее номер дня в месяце. Если оно больше
числа дней в указанном месяце, то прибавляется к первому дню указанного месяца
В ячейку Е2 введена формула, определяющая срок просрочки
=ЕСЛИ(D2=0;$F$2-C2; ""),
которая протаскивается на диапазон ЕЗ:Е20.
В ячейки G8, G9 и G10 введены следующие формулы:
(=СУММ((Е2:Е20>0)*(Е2:Е20<=29)* (В2:В20))}
(=СУММ((Е2:Е20>=30)*(Е2:Е20<=39)*(В2:В20))}
(=СУММ((Е2:Е20>=40)*(В2:В20))}
вычисляющие суммарные стоимости просроченных оплат сроком до 29 дней, от 30 до 39 дней и свыше 40 дней.
Дадим пояснения к третьей из этих формул. Excel в формуле массива возвращает условие (Е2:Е20>=40) в виде массива, состоящего из о и 1, где о стоит на месте ячейки со значением меньше 40 и 1 — на месте ячейки со значением не меньше 40. Следовательно, данная формула вычисляет сумму произведений элементов массива (Е2:Е20>=40) (с единицами в случае просрочки на указанный срок и нулями — в противном случае) и массива В2:В20 (с ценами процессоров). Таким образом, третья формула возвращает суммарную стоимость заказов, просроченных не менее чем на 40 дней.
В ячейки G2, G3 и G4 введены формулы:
(=СУММ((Е2:Е20>0)*(Е2:Е20<=29))}
(=СУММ( (Е2:Е20>=30) * (Е2:Е20<40).) }
=СЧЁТЕСЛИ(Е2 : Е2 0 ; " >=4 0 ")
вычисляющие количество просроченных оплат сроком до 29 дней, от 30 до 39 дней и свыше 40 дней.
Функция счётесли (countif) возвращает количество ячеек внутри указанного интервала, удовлетворяющих заданному критерию.
Синтаксис:
СЧЁТЕСЛИ(интервал; критерий)
Аргументы:
интервалИнтервал, в котором нужно подсчитать ячейки
критерийКритерий в форме числа, выражения или текста, который оп
ределяет, какие ячейки надо подсчитывать (например, критерий может быть выражен следующим образом: 17, "17", ">17", "Компьютер")
Пример отчетной ведомости по расчету затрат на производство
Рассмотрим пример составления отчетной ведомости по расчету затрат на производство товара (рис. 4.20).
Рис. 4.20. Расчет затрат на производство товара
Предположим, что фирма производит CD-диски. Упаковка диска обходится фирме в 1 руб./шт., стоимость материалов — 4 руб./шт. Готовые диски фирма продает по цене 10 руб./шт. Технические возможности фирмы позволяют выпускать до 5 тысяч дисков в день. Оплата труда рабочих является сдельной и зависит от количества выпущенных дисков. За первую тысячу дисков оплата труда рабочих составляет 0,3 руб./шт., за вторую тысячу дисков — 0,4 руб./шт., за третью тысячу дисков — 0,5 руб./шт., за четвертую тысячу дисков — 0,6 руб./шт. и свыше 4000 дисков — 0.7 руб./шт.
Фирме поступил заказ на изготовление 4500 CD-дисков. Необходимо подсчитать суммарные издержки и прибыль от выполнения данного заказа.
Для упрощения чтения формул присвоим с помощью команды Вставка, Имя, Присвоить (Insert, Name, Define) диапазонам D2:D7, Е2:Е7, F2:F7 и ячейке Bl, соответственно, имена:
ДискиШт
ОплатаРубШт
ОплатаРуб
ЗаказШт
Зарплата рабочих, в зависимости от объема выпущенных дисков, находится в диапазоне F2:F7 по формуле
(=ЕСЛИ (ЗаказШт-ЮООДискиШт; Ю00*ОплатаРубШт;
ЕСЛИ(ЗаказШт>ДискиШт;(ЗаказШт-ДискиШт)*ОплатаРубШт;0)))
Заметим, что имя диапазона или ячейки удобнее вводить в формулу из диалогового окна Вставка имени (Paste Name), которое открывается командой Вставка, Имя, Вставить (Insert, Name, Paste), что помогает избегать ошибок при вводе с клавиатуры (рис. 4.21).
Стоимость упаковки и материалов вычисляются в ячейках Вб и В7 по формулам
=В1*ВЗ
=В1*В4
Зарплата, общие издержки и прибыль вычисляются в ячейках В8, В9 и В10 по формулам
=СУММ(ОплатаРуб)
=СУММ(В6:В8)
=В1*В2-В9
Расчет прибыли и затрат на производство закончен.
Рис. 4.21. Ввод имени в ячейку из диалогового окна Вставка имениРис. 4.21. Ввод имени в ячейку из диалогового окна Вставка имени
Рис. 4.21. Ввод имени в ячейку из диалогового окна Вставка имени
Рис. 4.21. Ввод имени в ячейку из диалогового окна Вставка имени
Планирование рекламной кампании
Прежде всего опишем функции макс (мах) и поискпоз (match), которые используются в дальнейшем при рассмотрении примера составления оптимального плана рекламной кампании.
Функция макс возвращает максимальный элемент массива. Функция поискпоз возвращает относительную позицию элемента массива, который соответствует указанному значению. Функция поискпоз используется вместо функций типа просмотр, если нужна позиция элемента, а не сам элемент.
Синтаксис:
ПОИСКПОЗ(искомое_значение; проематриваемый_массив; тип_сопоставления)
искомое значениеискомое значениеАргументы:
искомое значение
искомое значение
Значение, для которого ищется соответствие в аргументе просматриваемый_массив. Например, когда вы ищете номер телефона в телефонной книге, вы используете фамилию человека как искомое_значение.
Оно может быть значением (числом, текстом или логическим значением) или ссылкой на ячейку, содержащую число, текст или логическое значение
просматриваемый_массив Непрерывный интервал ячеек, который возможно содержит искомые значения. Просматриваемый_мас- сив может быть массивом или ссылкой на массив
тип_сопоставленияЧисло: — 1, 0 или 1. Тип_сопоставления указывает,
как Excel сопоставляет искомое_значение со значениями В аргументе просматриваемый_массив
Рассмотрим подробнее возможные варианты:
Если тип сопоставления равен 1, то функция поискпоз находит наибольшее значение, которое равно или меньше, чем искомое значение (просматриваемый_массив должен быть упорядочен по возрастанию: ..., -2, -1, 0, 1, 2, ..., A-Z, ЛОЖЬ, ИСТИНА).
Если тип_сопоставления равен 0, то функция поискпоз находит первое значение, которое в точности равно аргументу искомое_значение (просматриваемый_массив может быть расположен в любом порядке).
Если тип_сопоставления равен -1, то функция поискпоз находит наименьшее значение, которое равно или больше, чем искомоезначение (просматриваемый_массив должен быть упорядочен по убыванию).
Если тип_сопоставления опущен, то предполагается, что он равен 1.
Теперь рассмотрим следующий пример. Фирма еженедельно анализирует, как обстоят дела со сбытом одного из видов своей продукции и дает оценку: отличную ("о" — состояние 1), хорошую ("х" — состояние 2) или удовлетворительную ("у" — состояние 3). Необходимо принять решение о целесообразности рекламирования этой продукции с целью расширения ее сбыта.
Приведенные на рис. 4.22 в диапазонах B3:D5 и B6:D8 матрицы f^ и 1^ определяют переходные вероятности без рекламы и при ее наличии в течение любой недели.
Так, Р122 = 0,5 и Р12з = 0,5 означает, что если в предыдущую неделю сбыт был хорошим, то и без рекламы на текущей неделе с равной вероятностью он останется хорошим или станет удовлетворительным. Соответствующие доходы заданы матрицами Я1 и /?2 в диапазонах E3:G5 и E6:G8. Отметим, что элементы матрицы Я2 учитывают затраты на рекламу. Необходимо спланировать оптимальную рекламную кампанию на последующие три недели.
Для общности предположим, что план составляется на N недель, а число состояний для каждого этапа равно т. Пусть 7^(0 — оптимальный ожидаемый
А
В 1
С
в
Е
F
н
к
1
2
Варианты
Р (Вероятности)
оху
R (Прибыль)
оху
Ожидаемая прибыль
Неделя 3 Неделя 2Неделя 1
3
0
0.2
0.5
0.3
7000
6000
3000
5300
8030
10381
4'
1 X
0
0 5
0 5
0
5000
1000
3000
4750
6868
5 .
У
0
0
1
0
0
-1000
-1000
-600
1125
6
0
0.3
0.6
0.1
6000
5000
-1000
4700
8190
10736
7
Ге,
2 х
У
0.1
0.05
0.6
0 4
0.3
0.55
7000
6000
4000
3000
0 -2000
3100
400
5610
2125
7923
4222
6
Варианты
10
। (Состояние)
F(3,i)
К
F(2,i)
К
Fd.i)
к
1
5300
8030
10381
11
1
5300
1
8190
2
10736
2
2
4700
8190
10736
12
2
3100
2
5610
2
7923
2
1
3000
4750
6868
13
3
400
2
2125
2
4222
2
2
3100
5610
7923
14
1
-1000
-600
1125
15
2
400
2125
4222
Eli
>1 JkPs!tS5MajC 4
V.-^l
.._?._«
НГ
Рис. 4.22. Планирование рекламной кампании
доход за этапы л, л+1, ..., N при условии, что система находится в состоя
нии / в начале л-й недели.
Тогда:
= max к= max кILPi^ +/п+\^ILPi^ +/п+\^л е [1, ^]л е [1, ^]
= max к
= max к
ILPi^ +/п+\^
ILPi^ +/п+\^
л е [1, ^]
л е [1, ^]
где/лч|(/) = 0 при всех/ Пусть
т
j=l
тогда
/л (О = max(il
Л(') = maxЛ(') = maxv? + ^Pyfn+iU)7=|.v? + ^Pyfn+iU)7=|.n g [1, N- 1]n g [1, N- 1]
Л(') = max
Л(') = max
v? + ^Pyfn+iU)
7=|.
v? + ^Pyfn+iU)
7=|.
n g [1, N- 1]
n g [1, N- 1]
В ячейку 13 введена формула
=СУММПР0ИЗВ(ВЗ:D3;ЕЗ:G3)
вычисляющая ^, которая протаскивается на диапазон 14:18 для вычисления
В ячейки диапазона 110:115 последовательно введены формулы
=13
=16
=14
=17
=15
=18
упорядочивающие ожидаемые доходы по следующим парам: первое состояние без рекламы и при ее наличии, второе состояние без рекламы и при ее наличии и третье состояние без рекламы и при ее наличии.
В ячейки диапазона В11:В13 введены формулы
=МАКС (ИО : Ill)
=МАКС (112: ИЗ)
=МАКС(114:115)
определяющие максимальную ожидаемую прибыль на третьей неделе, если на предыдущей неделе система находилась в первом, втором или третьем состоянии, соответственно. В ячейках диапазона С11:С13 по формулам
=П0ИСКП03 (ВИ; 110:111; 0)
=П0ИСКП03 (В12; 112 : ИЗ; 0)
=П0ИСКП03(В13;И4:115; 0)
определяется оптимальный вариант действий. Если 1, то деньги на рекламу не тратить, а если 2 — то тратить.
Перейдем ко второй неделе рекламной кампании. В ячейку J3 введена формула
=13+МУМНОЖ (ВЗ : D3; $В$И : $В$13)
вычисляющая
з
l'i + ^p\j /зк^'
./=1
которая протаскивается на диапазон J4: J8 для вычисления
з
i'2 + ^Pi j /3(7) ’ ./=1
з
>'з + ХЛ/зО)-
j=x
В ячейки диапазона J10: J15 введены последовательно формулы
=J3
=J6
=J4
=J7
=J5
=J8
упорядочивающие ожидаемые доходы по следующим парам: первое состояние без рекламы и при ее наличии, второе состояние без рекламы и при ее наличии и третье состояние без рекламы и при ее наличии.
В ячейки диапазона D1ED13 введены формулы
=МАКС(Л0:Л1)
=МАКС(Л2: ЛЗ)
=МАКС(Л4: Л5)
определяющие максимальную ожидаемую прибыль на второй неделе, если на предыдущей неделе система находилась в первом, втором или третьем состоянии, соответственно. В ячейках диапазона Е11:Е13 по формулам
=П0ИСКП03(Л1; ЛО: Л1;0)
=П0ИСКП03(D12;Л2:Л3;0)
=П0ИСКП03(D13;Л4:Л5;0)
определяется оптимальный вариант действий. Аналогично проводятся расчеты для первой недели.
Из рис. 4.22 видно, что на первой и второй неделях необходимо использовать рекламу, не считаясь с состоянием системы, однако, на третьей неделе рекламу следует использовать только тогда, когда система находится во втором или третьем состояниях. Суммарный ожидаемый доход фирмы составит 10 736 при отличной оценке, 7 923 — при хорошей и 4 222 — при удовлетворительной оценке.
Упражнения
Вычислить и-годичную ипотечную ссуду покупки квартиры за Рруб. с годовой ставкой 1% и начальным взносом А%. Сделать расчет для ежемесячных и ежегодных выплат.
Вариант
л
Р
/
А
1
7
170000
5
10
2
8
200000
6
10
3
9
220000
7
20
4
10
300000
8
20
5
11
350000
9
15
6
7
210000
10
15
7
8
250000
11
30
8
9
310000
12
30
9
10
320000
13
25
10
11
360000
14
25
Вас просят дать в долг /’руб. и обещают вернуть Р\ руб. через год, /*2 руб. — через два года и т. д., наконец, Р„ руб — через п лет. При какой годовой процентной ставке эта сделка имеет смысл?
Вариант
л
Р
Рл
Рг
Рз
Р»
Ps
1
3
17000
5000
7000
8000
2
4
20000
6000
6000
9000
7000
3
5
22000
5000
8000
8000
7000
5000
4
3
30000
5000
10000
18000
5
4
35000
5000
9000
10000
18000
6
5
21000
4000
5000
8000
10000
11000
7
3
25000
8000
9000
10000
8
4
31000
9000
10000
10000
15000
9
5
32000
8000
10000
10000
10000
11000
10
3
36000
10000
15000
21000
Вас просят дать в долг Р руб. и обещают возвращать по А руб. в течение п лет. При какой годовой процентной ставке эта сделка имеет смысл?
Вариантл
РА
17
17000030000
28
20000031000
39
22000033000
410
30000034000
511
35000041000
67
21000032000
78
25000037000
89
31000040000
910
32000035000
1011
36000041000
Вычислить основные платежи, плату по процентам, общую ежегодную выплату и остаток долга на примере ссуды Р руб. под годовую ставку /% на срок п лет.
Вариантл
Р1
17
1700005
28
2000006
39
2200007
410
3000008
511
3500009
67
21000010
78
25000011
89
31000012
910
32000013
1011
36000014
Вы берете в долг Рруб. под годовую ставку i% и собираетесь выплачивать по А руб. в год. Сколько лет займут эти выплаты?
Вариант
РAi
1
170000310003
2
200000320004
3
220000330005
4
300000340006
5
370000410007
6
210000320008
7
260000370009
8
3100004000010
9
320000350004
10
360000410005
Вас просят дать в долг Р руб. в день D и обещают вернуть Р\ руб. в день D\, Pl РУб. — в день D^ и т. д., наконец, Рп руб. — в день Dn. Имеет ли смысл эта сделка при годовой ставке /%? (/, Р, п, Р\,..., Рп взять из задания (Ь)).
ВариантD
DiD2D3D4D5
112.02.98
22.10.9811.05.9925.12.99
213.02.98
23.10.9812.05.9926.12.9912.07.01
314.02.98
24.10.9813.05.9927.12.9913.07.0111.05.02
415.02.98
25.10.9814.05.9928.12.99
516.02.98
26.10.9815.05.9929.12.9912.07.01
617.02.98
27.10.9816.05.9930.12.9913.07.0111.05.02
718.02.98
28.10.9817.05.9931.12.99
819.02.98
29.10.9818.05.9901.01.0012.07.01
920.02.98
30.10.9819.05.9902.01.0013.07.0111.05.02
1021.02.98
31.10.9820.05.9903.01.00
Составить отчетную ведомость реализации товаров п магазинами с месяца А по месяц В, приведенную на рис. 4.15.
Вариант
А
В
л
1
май
декабрь
3
2
июнь
январь
4
3
июль
октябрь
5
4
август
январь
6
5
сентябрь
декабрь
7
6
октябрь
март
8
7
ноябрь
март
9
8
декабрь
июль
10
9
январь
июль
4
10
февраль
август
5
В качестве стоимостей товаров введите произвольные трехзначные числа, а в качестве объемов их реализации — произвольные двузначные числа.
Вы берете в долг Р руб. под годовую ставку i% и собираетесь отдавать по А руб. в год. Сколько лет займут выплаты?
Вариант
1
2
3
4
5
6
7
8
9
10
А
200
190
178
164
146
243
320
423
521
711
Р
1000
1700
3100
5900
6190
6509
6860
7246
7670
8138
i
2
3
4
2
2
3
4
5
6
7
Вы собираетесь вкладывать по А руб. в течение п лет при годовой ставке i%. Сколько денег будет на счете через п лет?
Вариант 1
2
3
4
5
6
7
8
9
10
А
200
190
178
164
146
243
320
423
521
711
л
10
11
12
13
14
8
9
10
11
12
/
2
3
4
2
2
3
4
5
6
7
Определить процентную ставку для л-легнего займа в Рруб. с ежегодной выплатой в А руб.
Вариант
1
2
3
4
5
6
7
8
9
10
А
200
190
178
164
146
243
320
423
521
711
Р
1000
1700
3100
5900
6190
6509
6860
7246
7670
8138
i
2
3
4
2
2
3
4
5
6
7
Глава 5
Поиск решения
Просто удивительно, насколько часто в повседневной жизни мы сталкиваемся с необходимостью решать оптимизационные задачи. Так, каждый раз, когда мы заходим в магазин, перед нами встает одна и та же проблема: как максимально удовлетворить потребности, соизмеряясь с возможностями кошелька. Что же говорить о менеджерах, экономистах, которые постоянно сталкиваются с разнообразными проблемами, начиная с планирования штата сотрудников, фонда зарплаты и заканчивая составлением оптимального плана производства, планированием рекламной кампании по продвижению продукции на рынок и оптимизацией капиталовложений.
Несмотря на все многообразие таких задач, встречающихся в жизни и экономике на каждом шагу, Excel предлагает единый мощный инструмент их решения — средство поиска решений. От вас требуется только грамотно сформулировать для Excel вашу задачу, а оптимальное решение будет найдено быстро и точно. Данная глава на большом количестве конкретных примеров научит вас правильно решать все вышеперечисленные задачи.
Линейная оптимизационная задача
В данном разделе рассмотрим, как с помошью средства поиска решений решаются линейные оптимизационные задачи на примере трех типичных ситуаций." планирование производства, составление сплавов или смесей и планирование штатного расписания.
Планирование производства красок
Рассмотрим следующую задачу планирования производства. Небольшая фабрика выпускает два типа красок: для внутренних (I) и наружных (Е) работ.
Продукция обоих видов поступает в оптовую продажу. Для производства красок используются два исходных продукта А и В. Максимально возможные суточные запасы этих продуктов составляют б и 8 тонн, соответственно. Расходы продуктов А и В на 1 т соответствующих красок приведены в табл. 5.1.
Таблица 5.1. Исходные данные задачи о планировании производства красок
Исходный продукт
Расход исходных продуктов на тонну краски, т
Максимально возможный запас, т
краскаЕ
краска 1
А
1
2
6
В
2
1
8
Изучение рынка сбыта показало, что суточный спрос на краску I никогда не превышает спроса на краску Е более чем на I т. Кроме того, установлено, что спрос на краску I никогда не превышает 2 т в сутки. Оптовые цены одной тонны красок равны: 3 000 руб. для краски Е и 2 000 руб. для краски I. Какое количество краски каждого вида должна производить фабрика, чтобы доход от реализации продукции был максимальным?
Для решения этой задачи необходимо построить математическую модель. Процесс построения модели можно начать с ответа на следующие три вопроса:
Для определения каких величин строится модель (т. е. каковы переменные модели)?
В чем состоит цель, для достижения которой из множества всех допустимых значений переменных выбираются оптимальные?
Каким ограничениям должны удовлетворять неизвестные?
В нашем случае фабрике необходимо спланировать объем производства красок так, чтобы максимизировать прибыль. Поэтому переменными являются: Х[ — суточный объем производства краски I и хЕ — суточный объем производства краски Е.
Суммарная суточная прибыль от производства xj краски I и хЕ краски Е равна г = 3 000 хЕ + 2 000 xj . Целью фабрики является определение среди всех допустимых значений хЕ и xj таких, которые максимизируют суммарную прибыль, т. е. целевую функцию £.
Перейдем к ограничениям, которые налагаются на хЕ и xj. Объем производства красок не может быть отрицательным, следовательно:
хЕ, xj > 0.
Расход исходного продукта для производства обоих видов красок не может превосходить максимально возможный запас данного исходного продукта, следовательно: хЕ + 2xj ^ 6, 2хЕ + X] < 8 .
Кроме того, ограничения на величину спроса на краски таковы:
X, - ХЕ < 1, х, < 2
Таким образом, математическая модель данной задачи имеет следующий вид: максимизировать 2=3 000 хЕ + 2 000 xj
при следующих ограничениях:
х Е + 2 х [ < 6 , 2хЕ + Xj ^ 8 , *1 - -^Е - 1 > х, < 2 , х J, X Е 5 0 .
Заметим, что данная модель является линейной, т. к. целевая функция и ограничения линейно зависят от переменных.
Решим данную задачу с помощью команды Сервис, Поиск решения (Tools, Solver). Средство поиска решений является одной из надстроек Excel. Если в меню Сервис (Tools) отсутствует команда Поиск решения (Solver), то для ее установки необходимо выполнить команду Сервис, Надстройки, Поиск решения (Tools, Add-ins, Solver).
Отведем ячейки АЗ и ВЗ под значения переменных хЕ и Х[ (рис. 5.1).
Рис. 5.1. Диапазоны, отведенные под переменные, целевую функцию и ограничения
В ячейку С4 введем функцию цели
=ЗООО*АЗ+2ООО*ВЗ
в ячейки А7:А10 введем левые части ограничений
=АЗ+2*ВЗ
=2*АЗ+ВЗ
=ВЗ-АЗ =ВЗ
а в ячейки В7:В10 — правые части ограничений.
После этого выберем команду Сервис, Поиск решения (Tools, Solver) и заполним открывшееся диалоговое окно Поиск решения (Solver), как показано на рис. 5.2 (подробно о работе с этим окном будет рассказано в следующем разделе).
Рис. 5.2. Диалоговое окно Поиск решения задачи о планировании производства красок
После нажатия кнопки Выполнить (Solve) открывается окно Результаты поиска решения (Solver Results), которое сообщает, что решение найдено (рис. 5.3).
Рис. 5.3. Диалоговое окно Результаты поиска решенияРис. 5.3. Диалоговое окно Результаты поиска решения
Рис. 5.3. Диалоговое окно Результаты поиска решения
Рис. 5.3. Диалоговое окно Результаты поиска решения
Результаты расчета нашей задачи (оптимальный план производства и соответствующая ему прибыль) представлены на рис. 5.4. Как видно из рисунка, оптимальным является производство З'/з т краски Ей 1'/з т краски I в сутки. Этот объем производства принесет фабрике 122/з тыс. руб. прибыли.
Рис. 5.4. Результаты расчета с помощью средства поиска решений для задачи планирования производства красок
Элементы диалогового окна Поиск решения
Рассмотрим более подробно элементы диалогового окна Поиск решения (Solver) (рис. 5.2).
В поле Установить целевую ячейку (Set Target Cell) диалогового окна Поиск решения (Solver) дается ссылка на ячейку с функцией, для которой будет находиться максимум, минимум или заданное значение. В задаче о производстве красок в поле Установить целевую ячейку (Set Target Cell) вводится $с$4 (рис. 5.2).
Тип взаимосвязи между решением и целевой ячейкой задается путем установки переключателя в группе Равной (Equal То) Для нахождения максимального или минимального значения целевой функции этот переключатель ставится в положение Максимальному значению (Мах) или Минимальному значению (Min), соответственно. Для нахождения значения целевой функции, заданного в поле группы Равной (Equal То), переключатель ставится в положение Значению (Value of). В нашей задаче о красках установим-переключатель в положение Максимальному значению (Мах), т. к. планируем производство, обеспечивающее максимальную прибыль.
В поле Изменяя ячейки (By Changing Cells) указываются ячейки, которые должны изменяться в процессе поиска решения задачи, т. е. ячейки отведенные под переменные задачи. В нашем случае введем в поле Изменяя ячейки (By Changing Cells) диапазон $a$3:$b$3.
Ограничения, налагаемые на переменные задачи, отображаются в поле Ограничения (Subject to the Constraints) (рис. 5.2). Средство поиска решений допускает ограничения в виде равенств, неравенств, а также позволяет ввести требование целочисленности переменных. Ограничения добавляются по одному. Для ввода ограничений нажмите кнопку Добавить (Add) в диалоговом окне Поиск решения (Solver) (рис. 5.2) и в открывшемся диалоговом окне Добавление ограничения (Add Constraint) (рис. 5.5) заполните поля.
Рис. 5.5. Диалоговое окно
Добавление ограничения.
Ввод двух групп ограничений
В поле Ссылка на ячейку (Cell Reference) введите левую часть ограничения — $а$3:$в$з, а в поле Ограничение (Constraints) — правую часть, в нашем примере — 0. С помощью раскрывающегося списка ]<= jj вводится тип соотношения между левой и правой частями ограничения. В нашем примере это >=. Таким образом, требование неотрицательности переменных задано.
Нажмите кнопку Добавить (Add) в диалоговом окне Добавление ограничения (Add Constraint) (рис. 5.5) и введите вторую группу ограничений, налагаемых на переменные. Нажатие кнопки ОК завершает ввод ограничений. Обратите внимание на то, что ограничения удобнее задавать в виде диапазонов, как это сделано в рассматриваемом примере.
Теперь нажмите кнопку Параметры (Options) в диалоговом окне Поиск решения (Solver) (рис. 5.2), для того чтобы проверить, какие параметры заданы для поиска решений.
В открывшемся диалоговом окне Параметры поиска решения (Solver Options) (рис. 5.6) можно изменять условия и варианты поиска решения исследуемой задачи, а также загружать и сохранять оптимизируемые модели. Значения и состояния элементов управления, используемые по умолчанию, подходят для решения большинства задач.
Рис. 5.6. Диалоговое окно Параметры поиска решения
Рассмотрим элементы этого окна:
Поле Максимальное время (Max Time) служит для ограничения времени, отпускаемого на поиск решения задачи
Поле Предельное число итераций (Iteration) служит для ограничения числа промежуточных вычислений
Поля Относительная погрешность (Precision) и Допустимое отклонение (Tolerance) служат для задания точности, с которой ищется решение. Рекомендуется после нахождения решения с величинами данных параметров, заданными по умолчанию, повторить вычисления с большей точностью и меньшим допустимым отклонением и сравнить с первоначальным решением. Использование подобной проверки особенно рекомендуется для задач с требованием целочисленности переменных
Флажок Линейная модель (Assume Linear model) служит для поиска решения линейной задачи оптимизации или линейной аппроксимации нелинейной задачи. В случае нелинейной задачи этот флажок должен быть сброшен, в случае линейной задачи — установлен, т. к. в противном случае возможно получение неверного результата
Флажок Показывать результаты итераций (Show Iteration Results) служит для приостановки поиска решения и просмотра результатов отдельных итераций
Флажок Автоматическое масштабирование (Use Automatic Scaling) служит для включения автоматической нормализации входных и выходных значений, качественно различающихся по величине, например, при максимизации прибыли в процентах по отношению к вложениям, исчисляемым в миллионах рублей
Группа Оценка (Estimates) служит для выбора метода экстраполяции
Группа Производные (Derivatives) служит для выбора метода численного дифференцирования
Группа Метод (Search) служит для выбора алгоритма оптимизации
Для того чтобы вывести отчет о результатах решения задачи выберите в диалоговом окне Результаты поиска решения (Solver Results) (рис. 5.3) требуемый тип отчета: Результаты, Устойчивость, Пределы (Answer, Sensitivity, Limit). Соответствующие отчеты приведены на рис. 5.7—5.9.
Рис. 5.7. Отчет по пределам
Рис. 5.8. Отчет по устойчивости
Рис. 5.9. Отчет по результатам
Определение состава сплавов
Рассмотрим задачу: для получения сплавов А и В используются четыре металла I, II, III и IV, требования к содержанию которых в сплавах А и В приведены в табл. 5.2.
Таблица 5.2. Требования к содержанию металлов в задаче определения состава сплавов
Сплав
Требования к содержанию металла
А
Не более 80% металла I
Не более 30% металла II
В
От 40 до 60% металла II
Не менее 30% металла III
Не более 70% металла IV
Характеристики и запасы руд, используемых для производства металлов I, И, III и IV, указаны в табл. 5.3.
Таблица 5.3. Характеристики и запасы руд в задаче об определении состава сплавов
Руда
Максимальный запас, т
Состав, %
Цена, $/т
1
II
III
IV
Другие компоненты
1
1000
20
10
30
30
10
30
2
2000
10
20
30
30
10
40
3
3000
5
5
70
20
0
50
Пусть цена 1 т сплава А равна 200 долларов, а 1 т сплава В — 210 долларов. Необходимо максимизировать прибыль от продажи сплавов А и В.
Обозначим через х^, х2А, хз^, хАА и Х[д, х2в, хзв, хАВ количество I, И, Ш и IV металлов, используемых для получения сплавов А и В, соответственно Количество использованной /-й руды обозначим у,, /еЩ 3] Тогда математическая модель данной задачи имеет вид: максимизировать:
г = 200 (хм + х2л + хзл + х4/1) + 210(х1В + х2В + хзв + х4В) -
- 30 у, - 40 у2 - 50 у3
при ограничениях на состав сплавов (на основании данных из табл. 5 2)
Х1Л- 0.8 (хм+ х2А+ хзл+ х4у|),
х2/(< 0,з(х1л+ х2А+ хЗА+ х4Д
х2в - 0,б(х|6 + х2В + хзв + х4В), х2в> 0,4 (х|В+ х2В+ хзв+ хАВ\
хзв- 0,з(х15+ х2В+ хзв+ х4В ),
х4В< 0,7 (х1В+ х2В+ хзв+ х4В),
на характеристики и состав руды (на основании данных из табл. 5.3): х\л+ х1В<0,2у,+0,1у2+0,05уз,
х2+"*" х2В—0,1 у,+ 0,2 у2+ 0,05 уз ,
ХЗД+ хзв<0,3у,+ 0,3 у2+ о,7Уз,
Х4А+ ХдВ<0,3 у,+ 0,3 у2+ о,2 у3,
а также на диапазоны использования переменных:
хм 0, xiB > О, /е[1, 4],
О < у, < 1ООО,
О < у2 < 2000,
О < уз < 3000.
Отведем под переменные х,д, xiBl /е[1, 4] диапазон ячеек C3:D6, а под переменные yu Zg [1, 3] — диапазон ячеек F3:F5 (рис. 5.10).
Рис. 5.10. Результат расчета в задаче определения состава сплавов
В ячейку G9 введем функцию цели
=200*СУММ(СЗ:С6)+210*СУММ(D3:D6)-30*F3-40*F4-50*F5
В диапазон ячеек С8:С17 введем левые части ограничений, причем преобразуем их к виду, когда все переменные находятся слева, а все знаки неравенств — меньше или равно:
=СЗ-0.8*СУММ(СЗ : С6) =С4-О.З*СУММ(СЗ:С6) =D4-0.6*СУММ(03:Об) =0.4*СУММ(ОЗ:Об)-D4 =0.3*СУММ(ОЗ:Об)-D5
=D6-0.7*СУММ(D3:D6)
=СУММ(СЗ:D3)-0.2*$F$3-0.l*$F$4-0.05*$F$5
=СУММ(С4:D4)-0.l*$F$3-0.2*$F$4-0.05*$F$5
=СУММ(С5:D5)-О.3*$F$3-0.3*$F$4-0.7*$F$5
=СУММ(С6:D6)-О.3*$F$3-0.3*$F$4-0.2*$F$5
В диапазон ячеек НЗ:Н5 введем количество имеющихся запасов руд. Выберем команду Сервис, Поиск решения (Tools, Solver) и заполним диалоговое окно Поиск решения (Solver), как показано на рис. 5.11.
Рис. 5.11. Диалоговое окно Поиск решения в задаче определения состава сплавов
Результаты работы средства поиска решений представлены на рис. 5.10.
Планирование штатного расписания
Авиакомпании требуется определить, сколько стюардесс следует принять на работу в течение шести месяцев при условии, что любая из них должка пройти предварительную подготовку. Потребности в количестве человекочасов летного времени для стюардесс известны: в январе — 8000 , в феврале — 9 000, в марте — 8 000, в апреле — 10 000, в мае — 90 000 и в июне — 12000.
Подготовка стюардессы к выполнению своих обязанностей занимает один месяц. Следовательно, прием на работу должен, по крайней мере, на один месяц опережать ввод стюардессы в строй. Кроме того, каждая стюардесса должна в течение месяца, отведенного на ее подготовку, пройти 100-часо-
вую практику непосредственно во время полетов. Такйм образом, за счет каждой обучаемой стюардессы в течение месяца освобождается 100 человеко-часов летного времени, отведенного для уже обученных стюардесс.
Каждая полностью обученная стюардесса в течение месяца может иметь налет до 150 часов. Авиакомпания в начале января уже имеет 60 опытных стюардесс. При этом ни одну из них не снимают с работы. Установлено также, что приблизительно 10% обучаемых стюардесс по окончании обучения увольняются по каким-либо обстоятельствам. Опытная стюардесса обходится авиакомпании в $800, а обучаемая — в $400 в месяц. Необходимо спланировать штат авиакомпании таким образом, чтобы минимизировать издержки за отчетные шесть месяцев.
Для данной задачи также можно разработать математическую модель, но ее удобнее проанализировать в более развернутой форме. Отведем диапазон ячеек ВЗ:В8 под число новых стюардесс, принимаемых на работу с января по июнь (рис. 5.12).
Рис. 5.12. Исходные данные задачи о планировании штатного расписания
В ячейку В2 введем число стюардесс, работающих в декабре. В диапазоне ячеек D3:D8 вычислим число стюардесс, постоянно работающих в текущем месяце, введя в ячейки D3 и D4 формулы
=В2
=D3+0.9*вз
и протаскивая последнюю из них на диапазон D5:D8. В диапазоне ЕЗ:Е8 вычислим налет по месяцам, введя в ячейку ЕЗ формулу
=D3*$G$12+B3*$F$12
и протаскивая ее на диапазон Е4:Е8, где в ячейки F12 и G12 введены допустимый налет обучаемой и работающей стюардесс. В диапазоне F3:F8 вычислим затраты по месяцам, введя в ячейку F3 формулу
=D3*$E$12+B3*$D$12
и протаскивая ее на диапазон F3:F8, где в ячейки D12 и Е12 введены затраты на обучение и работу стюардессы. Вычислим суммарные затраты за планируемый период в ячейке F9 по формуле
=CYMM(F3:F8)
Теперь все готово, чтобы перейти к выбору команды Сервис, Поиск решения (Tools, Solver). Заполним открывшееся диалоговое окно Поиск решения (Solver), как показано на рис. 5.13.
Рис. 5.13. Диалоговое окно Поиск решения задачи о планировании штатного расписания
Результаты расчета оптимального штата стюардесс приведены на рис. 5.14.
Согласно этим расчетам фирма в последний месяц планового периода должна взять на обучение 17 новых стюардесс.
Предположим, что авиакомпания по какой-то причине решила не брать в июне на обучение новых стюардесс. Тогда в поле Ограничения (Subject to the
Constraints) диалогового окна Поиск решения (Solver) надо добавить В8=о. Оптимальное решение при таком дополнительном ограничении представлено на рис. 5.15, из которого видно, что оно приведет к временному повышению текущих затрат.
А
. в
С
0
Е
f I
G
н
Месяц
Число новых
Требуемое
Число
Фактическое
Затраты
И
стюардесс
число, ч
ПОСТОЯННО работающих стюардесс
число, ч
К 2
Декабрь
60
3
Январь
й
8000
60
9000
48000
1
4
Февраль
0
9000
60
9000
48000
5
Март
0
8000
60
9000
48000
51 7
Апрель Май
10
0
10000
9000
60
69
10000
10350
52000
55200
8
Июнь
17
12000
69
12050
62000
9
Итоговые затраты
313200
1
10
Затраты на одну стюардессу
Разрешенный налет, ч
11
Обучение
Работа
Обучение
Работа
12
400
800
100
150
13
нН
Л 5 мЬхСгюавдессьуj«|
^ _d
ЯГ
Рис. 5.14. Результаты расчета с помощью средства поиска решений в задаче о планировании штатного расписания
А
8 I С
0
Е
F Т 6
1 н Д
1
Месяц
Число новых Требуемое стюардесс : число, ч
Число постоянно работающих стюардесс
Фактическое число, ч
Затраты
2
Декабрь
60
3
Январь
08000
60
9000
48000
4
Февраль
Й9000
60
9000
48000
5
Март
08000
60
9000
48000
6
Апрель
1010000
60
10000
52000
7
Май
139000
69
11650
60400
8
Июнь
012000
81
12105
64560
9
Итоговые затраты
1
320960]
10
Затраты на одну стюардессу
Разрешенный налет, ч
—2
11
Обучение
Работа
Обучение Работа
12
400
800
100150
13
>JF
м£<
► j ‘'IKCTMapfleccu/jijJ _- '
————-——
Рис. 5.15. Решение задачи о планировании штатного расписания в том случае, если набор стюардесс на обучение в июне не производится
5.2. Транспортная задача
Рассмотрим еще один пример, где используется средство поиска решений. Предположим, что фирма имеет 4 фабрики и 5 центров распределения ее товаров. Фабрики фирмы располагаются в Денвере, Бостоне, Новом Орлеане и Далласе с производственными возможностями 200, 150, 225 и 175 единиц продукции ежедневно, соответственно. Центры распределения товаров фирмы располагаются в Лос-Анджелесе, Далласе, Сент-Луисе, Вашингтоне и Атланте с потребностями в 100, 200, 50, 250 и 150 единиц продукции ежедневно, соответственно. Хранение на фабрике единицы продукции, не поставленной в центр распределения, обходится в $0,75 в день, а штраф за просроченную поставку единицы продукции, заказанной потребителем в центре распределения, но там не находящейся, равен $2,5 в день. Стоимость перевозки единицы продукции с фабрик в пункты распределения приведена в табл. 5.4.
Таблица 5.4. Транспортные расходы 12345
Лос-Анджелес Даллас Сент-Луис Вашингтон Атланта
1
Денвер
1.5
2
1.75
2.25
2.25
2
Бостон
2.5
2
1.75
1
1.5
3
Новый Орлеан
2
1.5
1.5
1.75
1.75
4
Даллас
2
0.5
1.75
1.75
1.75
Необходимо так спланировать перевозки, чтобы минимизировать суммарные транспортные расходы.
Поскольку данная модель сбалансирована (суммарный объем произведенной продукции равен суммарному объему потребностей в ней), то в этой модели не надо учитывать издержки, связанные как со складированием, так и с недопоставками продукции. В противном случае в модель нужно было бы ввести:
В случае перепроизводства — фиктивный пункт распределения, стоимость перевозок единицы продукции в который полагается равной стоимости складирования, а объемы перевозок — объемам складирования излишков продукции на фабриках
В случае дефицита — фиктивную фабрику, стоимость перевозок единицы продукции с которой полагается равной стоимости штрафов за недопоставку продукции, а объемы перевозок — объемам недопоставок продукции в пункты распределения
Для решения данной задачи построим ее математическую модель Неизвестными в данной задаче являются объемы перевозок. Пусть Ху — объем перевозок с z-й фабрики в у-й центр распределения. Функция цели — это суммарные транспортные расходы, т. е.
4 5
Z = СЧ ХУ ’
-=1 /=1
где Су — стоимость перевозки единицы продукции с z-й фабрики в у-й центр распределения.
Неизвестные в данной задаче должны удовлетворять следующим ограничениям:
Объемы перевозок не могут быть отрицательными
Так как модель сбалансирована, то вся продукция должна быть вывезена с фабрик, а потребности всех центров распределения должны быть полностью удовлетворены
В результате имеем следующую модель:
минимизировать:
4 5
z = су хи *
-=i /=|
при ограничениях:
4
^ху^Ь#,7 6 [1,5],
1=1
5
^Ху=а,, ze[l, 4],
7=1
х,у>0, ze[l, 4], уе[1, 5].
где а; — объем производства на z-й фабрике, bj — спрос в у-м центре распределения.
Для решения этой задачи с помощью средства поиска решений введем данные, как показано на рис. 5.16.
В ячейки А1:Е4 введены стоимости перевозок. Ячейки А6:Е9 отведены под значения неизвестных (объемы перевозок). В ячейки G6:G9 введены объемы
производства на фабриках, а в ячейки A1LE11 введена потребность в продукции в пунктах распределения. В ячейку F10 введена целевая функция
=СУММПРОИЗВ(Al:Е 4;Аб:Е 9)=СУММПРОИЗВ(Al:Е 4;Аб:Е 9)В ячейки А10:Е10 введены формулыВ ячейки А10:Е10 введены формулыРис. 5.16. Исходные данные транспортной задачи
=СУММПРОИЗВ(Al:Е 4;Аб:Е 9)
=СУММПРОИЗВ(Al:Е 4;Аб:Е 9)
В ячейки А10:Е10 введены формулы
В ячейки А10:Е10 введены формулы
=СУММ(Аб:А9)
=СУММ(В6:В9)
=СУММ(С6:С9)
=СУММ(В6:В9)
=СУММ(Е6:Е9)
определяющие объем продукции, ввозимой в центры распределения.
В ячейки F6:F9 введены формулы
=СУММ(Аб:Е6)
=СУММ(А7:Е7)
=СУММ(А8:Е8)
=СУММ(А9:Е9)
вычисляющие объем продукции, вывозимой с фабрик.
Теперь выберем команду Сервис, Поиск решения (Tools, Solver) и заполним открывшееся диалоговое окно Поиск решения (Solver), как показано на рис. 5.17.
Не забудьте в диалоговом окне Параметры поиска решения (Solver Options) (рис. 5.6) установить флажок Линейная модель (Assume Linear Model). После нажатия кнопки Выполнить (Solve) средство поиска решений находит оптимальный план поставок продукции и соответствующие ему транспортные расходы (рис. 5.18).
Рис. 5.17. Диалоговое окно Поиск решения для транспортной задачиРис. 5.17. Диалоговое окно Поиск решения для транспортной задачиРис. 5.18 Оптимальное решение транспортной задачи
Рис. 5.17. Диалоговое окно Поиск решения для транспортной задачи
Рис. 5.17. Диалоговое окно Поиск решения для транспортной задачи
Решение системы нелинейных уравнений
Кроме оптимизационных задач, средство поиска решений позволяет находить решения систем нелинейных уравнений. Рассмотрим, как это делается, на примере решения следующей системы уравнений:
(5-1)(5-1)х2 + у2 = 3, 2х + Зу = I.
(5-1)
(5-1)
Напомним, что пара (х, у) является решением системы (5.1) тогда и только тогда, когда она является решением следующего уравнения с двумя неизвестными:
(5.2)(5.2)(х2 + у2 - З)2 + (2х + Зу - I)2 = 0.
(5.2)
(5.2)
С помощью средства поиска решений вместо системы (5.1) будем решать равносильное ей уравнение (5.2). Отметим, что решением системы уравнений (5.1) являются точки пересечения окружности с радиусом, равным 3, и прямой. Следовательно, уравнение (5.2) имеет не более двух различных решений.
Определяемое решение нелинейной задачи зависит от начального приближения, удачный подбор которого очень важен. В данном случае локализовать корни можно, например, протабулировав левую часть уравнения (5.2) по переменным х и у на отрезке [-3, 3] с шагом 1,5. Результат табуляции приведен на рис. 5.19.
А
В I
с
О I
Е I
f Iti
1
-3.0
-1.5
0 0
1.5:
3.0 |
2
-3.0
481.0
200 3
85 0
743
229 0
3
-1.5
237 1
74 5
16 6
2.5
93 1
4
0 0
136.0
30.8
10.0
12.8:
1000
5
15
1171
8.5
4 6
44.5.
189 1
6
3.0
241.0
68.3
61 0
158 3
421 0 Д
М1_<
Н «КТабонирование
Функции (5 2J/J «I _
f
Л11 л
Рис. 5.19. Результат табуляции левой части уравнения (5.2)
В ячейки А2:А6 и Bl:Fl введены значения х и у, соответственно. В ячейку В2 введена формула
=($А2"2+В$1А2-3)"2+(2*$А2+3*В$1-1)л2
вычисляющая правую часть уравнения (5.2) при значениях х и у из ячеек А2 и В1, соответственно. Протащим эту формулу на диапазон B2:F6. Из рис. 5.19 видно, что за начальное приближение к корню разумно выбрать следующие пары значений (-1,5; 1,5), (1,5; 0) и (1,5; -1,5). Можно убедиться, что две последние пары начальных приближений с помощью средства поиска решений будут приводить к нахождению одного и того же решения.
Для нахождения первого корня отведем под переменные х и у ячейки АЮ и В10, соответственно, и введем в них начальные приближения -1.5 и 1.5. В ячейку СЮ введем формулу
=(А10л2+В10л2-3)л2+(2*А10+3*В10-1)л2
вычисляющую значение правой части уравнения (5.2) для этих значений неизвестных. Затем вызовем команду Сервис, Поиск решения (Tools, Solver).
В открывшемся диалоговом окне Поиск решения (Solver) в поле Установить целевую ячейку (Set Target Cell) вводим сю. В поле Изменяя ячейки (By Changing Cells) вводим диапазон ячеек аЮ:ВЮ. В группе Равной (Equal То) установим переключатель в положение Значению (Value of), в поле ввода которого вводим о Не забудьте убедиться, что в диалоговом окне Парамет-
ры поиска решения (Solver Options) (рис. 5.6) снят флажок Линейная модель (Assume Linear Model).
После нажатия на кнопку Выполнить (Solve) средство поиска решений находит решение, которое помешает в ячейки АЮ и В10. В данном случае это будут значения -1.268 и 1.17 9. В ячейке СЮ вычисляется значение правой части уравнения (5.2) при этих значениях неизвестных. Так как средство поиска решений находит решение приближенно, то в ячейке СЮ в общем случае будет число отличное от нуля, но достаточно близкое к нему. В нашем примере это 8.89Е—09, т. е. 8.89хЮ~9. Если в ячейке СЮ будет большое число, то решение найдено не верно.
Аналогично находится второе решение, используя начальное приближение (1,5;-1,5). Решением будут значения 1.576 и -0.717. Убедитесь, что начальное приближение (1,5; 0) приводит к тому же решению.
Задача о назначениях
Рассмотрим пример решения задачи о назначениях. Четверо рабочих могут выполнять четыре вида работ. Стоимости Су выполнения i-м рабочим j-й работы приведены в ячейках диапазона A1:D4 (рис. 5.20).
Рис. 5.20. Стоимости работ в задаче о назначениях
В этой таблице строки соответствуют рабочим, а столбцы — работам. Необходимо составить план выполнения работ так, чтобы все работы были выполнены, каждый рабочий был загружен только на одной работе, а суммарная стоимость выполнения всех работ была минимальной. Отметим, что данная задача является сбалансированной, т. е. число работ совпадает с числом рабочих. Если задача не сбалансирована, то перед началом решения ее необходимо сбалансировать, введя недостающее число фиктивных строчек или столбцов с достаточно большими штрафными стоимостями работ.
Для решения данной задачи построим ее математическую модель. Пусть переменная ху = 1, если z-м рабочим выполняется /-я работа, и Ху = 0, если z-m рабочим не выполняется /-я работа. Тогда модель имеет следующий вид:
минимизировать:
4 4
— XX см хч ’ i=l /=1
при ограничениях:
X х^к уе[1, 4],
1=1
X л//=к ie[l, 4], 7=1
л-elO, 1}, ie[l, 4]. Уе[1,4].
Для решения этой задачи с помощью средства поиска решений отведем под неизвестные диапазон ячеек F2:I5. В ячейку Л введем целевую функцию
-СУММПРОИЗВ(F2:I5;A1:D4)
вычисляющую стоимость работ. Введем формулы, задающие левые части ограничений (рис. 5.21).
F
G -I.
ИII
4
1
Стоимость работ
=СУММПРОИЗВ(Р215;А1 D4) "Г
2
1
00
0
=СУММ(Р2:12)
3
0
01
0
=СУММ(Р313)
4
0
10
0
=СУММ(Р4:14)
5
0
00
1
=СУММ(Р5:15)
6
=СУММ(Р2:Р5)
=СУММ(С2:С5) =
СУММ(Н2:Н5) =СУММ(1215)
в] <
* | >ЧХ Назначение Д '4 |
.. . иг
Рис. 5.21. Левые части ограничений в задаче о назначениях
Затем выберем команду Сервис, Поиск решения (Tools, Solver) и заполним открывшееся диалоговое окно Поиск решения (Solver), как показано на рис. 5.22.
Не забудьте в диалоговом окне Параметры поиска решения (Solver) устано- вить флажок Линейная модель (Assume Linear Model). После нажатия кнопки Выполнить (Solve) средство поиска решений найдет оптимальное решение (рис. 5.23).
Заметим, что флажок Формулы диалогового окна Параметры (Options), открываемого командой Сервис, Параметры (Tools, Options), обеспечивает отображение формул в ячейках, если они там находятся (рис. 5.21).
Рис. 5.22. Диалоговое окно Поиск решения задачи о назначениях
Рис. 5.23. Оптимальный план работ в задаче о назначениях
Уравнение регрессии
В данном разделе будет рассмотрена задача построения регрессионной модели. В разделе 5.5.1 с помощью средства поиска решений будет решена задача нахождения уравнения регрессии для одной зависимой и одной независимой переменных. Хотя рассмотренная модель имеет очень специфический вид, описанный подход позволяет исследовать любое уравнение регрессии. В разделе 5.5.2 приведены функции рабочего листа, непосредственно вычисляющие различные характеристики линейного уравнения регрессии, а в разделе 5.5.3 — экспоненциального уравнения регрессии, которые позволяют значительно упростить процедуру регрессионного анализа для этих наиболее часто встречающихся на практике моделей.
Общий подход к построению уравнения регрессии на примере линейной модели
Рассмотрим, как решается задача нелинейной оптимизации с помощью средства поиска решений на примере построения линейного уравнения регрессии. Имеются две наблюдаемые величины х и у, например, объем реализации фирмы, торгующей подержанными автомобилями, за шесть недель ее работы. Значения этих наблюдаемых величин приведены на рис. 5.24, где х,— отчетная неделя, ay — объем реализации за эту неделю.
А
В
с
D
: е | f .
1
X
У
Теор значе ние у
m
ь
2
1
7
7
1.885714
5 4
3
2
9
9
1.885714
5.4 1 77143
4
3
12
11
5
4
13
13
6
5
14
15
7
6
17
17
Н11; У1У. Не л инейная регрессия/)4 |
Рис. 5.24. Исходные данные для построения линейной модели
Необходимо построить линейную модель у = тх + Ь, наилучшим образом описывающую наблюдаемые значения. Обычно т и b подбираются так, чтобы минимизировать сумму квадратов разностей между наблюдаемыми и теоретическими значениями зависимой переменной у, т. е. минимизировать
z = ^У1-тх1-ь^ -
1=1
где п — число наблюдений (в данном случае п = 6).
Для решения этой задачи отведем под переменные т и h ячейки D3 и ЕЗ, соответственно, а в ячейку F3 введем минимизируемую функцию
{=СУММКВРАЗН(В2:В7;ЕЗ+D3*А2:А7)}
Функция суммквразн (sumsq) вычисляет сумму квадратов разностей для элементов указанных массивов.
Теперь выберем команду Сервис, Поиск решения (Tools, Solver) и заполним открывшееся диалоговое окно Поиск решения (Solver), как показано на рис. 5.25.
Отметим, что на переменные т и b ограничения не налагаются. В результате вычислений средство поиска решений найдет: т = 1,88571 и b = 5,400.
Рис. 5.25. Диалоговое окно Поиск решения для расчета уравнения регрессии
Функции рабочего листа для уравнения линейной регрессии
Параметры т и b линейной модели у = тх + b из предыдущего раздела можно определить с помощью функций наклон (slope) и отрезок (intercept).
Функция наклон (slope) определяет коэффициент наклона линейного тренда.
Синтаксис:
НАКЛОН(известные_значения_у; известные_значения_х)
Функция отрезок (intercept) определяет точку пересечения линии линейного тренда с осью ординат.
Синтаксис:
ОТРЕЗОК(известные_значения_х;.известные_вначения_у)
Аргументы функций наклон (slope) и отрезок (intercept):
известные_значения_у Массив известных значений зависимой наблюдаемой величины
известные_значения_х Массив известных значений независимой наблюдаемой величины. Если аргумент известные_значения х опущен, то предполагается, что это массив {1;2;3;...} такого же размера, как и аргумент известные_зна- чения_у
Функции наклон и отрезок вычисляются по следующим формулам:
ппп
n^Xj У.-^х, ^yi
1=1 1=11=1
и Xх-2 - Iх-
i=i i=i 7
b = у-тх ,
пп
где х= ——, у = —— пп
В ячейках D2 и Е2 (рис. 5.24) найдены т и Ь, соответственно, по формулам:
=НАКЛОН(В2:В7;А2:А7)
=ОТРЕЗОК(В2:В7;А2:А7)
Коэффициенты т и b можно найти и другим способом. Постройте точечный график по диапазону ячеек А2:В7, выделите точки графика двойным щелчком, а затем щелкните их правой кнопкой мыши. В раскрывшемся контекстном меню выберите команду Линии тренда (Trendline) (рис. 5.26).
Рис. 5.26. Начало построения линии тренда
В диалоговом окне Линия тренда (Trendline) на вкладке Тип (Туре) в группе Построение линии тренда (аппроксимация и сглаживание) (Trend/Regression
type) выберите параметр Линейная (Linear) (рис. 5.27), а на вкладке Параметры (Options) установите флажки Показывать уравнение на диаграмме (Display Equation on Chart) и Поместить на диаграмму величину достоверности аппроксимации (RA2) (Display R-squared) (т. е. на диаграмму необходимо поместить значение квадрата коэффициента корреляции) (рис. 5.28).
•■■■■■■■■■■■■■■tew
Линия тренда
L - ДИДJI ПараметрыL - ДИДJI ПараметрыПостроение линии тренда (аппроксимация и сглаживание)Построение линии тренда (аппроксимация и сглаживание)Динеина яЛогарифмическая ПолиномиальнаяДинеина яЛогарифмическая Полиномиальная
L - ДИДJI Параметры
L - ДИДJI Параметры
Построение линии тренда (аппроксимация и сглаживание)
Построение линии тренда (аппроксимация и сглаживание)
Динеина яЛогарифмическая Полиномиальная
Динеина яЛогарифмическая Полиномиальная
Назад наг^ единицНазад наг^ единиц
Назад наг^ единиц
Назад наг^ единиц
Рис. 5.27. Вкладка Тип диалогового окна Линия тренда
Линия тренда
ТипТипПараметры.
Тип
Тип
Название аппроксимирующей (сглаженной) кривей
i _
: Автоматическое Линейный (Ряд1) Г" -- ' '. — -———— 1Л
Другое. .
Прогноз-
Вперед на:|6"^ единиц
Рис. 5.28. Вкладка Параметры диалогового окна Линия тренда
По коэффициенту корреляции можно судить о правомерности использования линейного уравнения регрессии. Если он лежит в диапазоне от 0,9 до 1, то данную зависимость можно использовать для предсказания результата. Чем ближе к единице коэффициент корреляции, тем более обоснованно это указывает на линейную зависимость между наблюдаемыми величинами. Если коэффициент корреляции близок к -1, то это говорит об обратной зависимости между наблюдаемыми величинами.
Флажок Пересечение кривой с осью Y в точке (Set Intercept) (рис. 5.28) устанавливается только в случае, если эта точка известна. Например, если этот флажок установлен и в его поле введен о, это означает, что ищется модель у = тх.
Результат выполнения команды Линии тревда (Trendline) приведен на рис. 5.29.
Рис. 5.29. Г рафик линии тренда
Как видно из рисунка, квадрат коэффициента корреляции равен 0.9723, следовательно, линейная модель может быть использована для предсказания результатов.
На основе найденных коэффициентов уравнения регрессии можно определить теоретическое значение наблюдаемой величины у. Вычислим теоретическое значение у в ячейке С2 (рис. 5.24) при х из А2 по формуле
=$D$2*A2+$E$2
Однако теоретическое значение у в фиксированной точке можно вычислить и без предварительного определения коэффициентов линейной модели с помощью функции ПРЕДСКАЗ (forecast).
Синтаксис:
ПРЕДСКАЗ(t; известные_значения_у; известные_значения_х)
Аргументы:
ttТочка данных, для которой предсказывается значение
t
t
известные_значения_у
Массив известных значений зависимой наблюдаемой величины
известные_значения_х
Массив известных значений независимой наблюдаемой величины. Если аргумент известные_значения_х опущен, то предполагается, что это массив {1; 2; 3;...} такого же размера, как и массив известные_значения_у
Например, теоретическое значение в ячейке С2 (рис. 5.24) можно также определить по формуле
=ПРЕДСКАЗ(А2;$В$2:$В$7;$А$2:$А$7)
Функция тенденция (trend) вычисляет значения уравнения линейной регрессии для целого диапазона значений независимой переменной как для одномерного, так и для многомерного уравнения регрессии. Многомерная линейная модель регрессии имеет вид:
у - т\Х\ + ... + т,рсп + Ь.
Синтаксис:
ТЕНДЕНЦИЯ(известные_значения_у; известные_значения_х; новые_значения_х; конст)
Аргументы:
известные_значения_у
Массив известных значений зависимой наблюдаемой величины
известные_значения_х
Массив известных значений независимой наблюдаемой величины. Если аргумент известные_значения_х опущен, то предполагается, что это массив {1; 2; 3;...} такого же размера, как и массив известные_значения_у
новые_значения_х
Новые значения х, для которых функция тенденция возвращает соответствующие значения у
конст
Логическое значение, которое указывает, требуется ли, чтобы константа Ь была равна 0 Если аргумент конст имеет значение ИСТИНА или опущен, то b вычисляется обычным образом. Если конст имеет значение ложь, то b полагается равным 0
Если строится многомерная линейная модель, то аргументы известные_зна- чения_х и новые значения х должны содержать столбец (или строку) для каждой независимой переменной. Если аргумент новые_значения х опушен, то предполагается, что он совпадает с аргументом известные значения х.
Функция линейн (linest) возвращает массив {/ип, ...,ть Ь^ значений параметров уравнения многомерной линейной регрессии.
Синтаксис:
ЛИНЕЙН(известмые_значемия_у; известмые_значения_х;
комет; статистика)
Аргументы:
известные_значения_у
Массив известных значений зависимой наблюдаемой величины
известные_значения_х
Массив известных значений независимой наблюдаемой величины. Если аргумент известные _значения_х опущен, то предполагается, что это массив {1;2;3;...} такого же размера, как и известные_значения_у
конст
Логическое значение, которое указывает, требуется ли, чтобы константа Ь была равна 0. Если аргумент конст имеет значение ИСТИНА или опущен, то Ь вычисляется обычным образом. Если конст имеет значение ЛОЖЬ, то Ь полагается равным 0
статистика
Логическое значение, которое указывает, требуется ли вывести дополнительную статистику по регрессии, например, коэффициент корреляции. Если статистика имеет значение ИСТИНА, то функция ЛИНЕЙН возвращает дополнительную регрессионную статистику. Если аргумент статистика имеет значение ЛОЖЬ или опущен, то функция ЛИНЕЙН возвращает только значения коэффициентов
Экспоненциальная модель
Другой часто встречающейся на практике регрессионной моделью является экспоненциальная модель, которая описывается уравнением
у = Ьтх
Значения Экспоненциального тренда можно предсказывать с помощью функции рост (growth).
Синтаксис:
РОСТ(известные змачения_у; известные_значения_х; новые_значения_х; комет)
Аргументы:
известные_значения_у Массив известных значений зависимой наблюдаемой величины
известные_значения_х Массив известных значений независимой наблюдаемой величины. Если аргумент известныезначениях опущен, то предполагается, что это массив {1; 2 ;3; ...} такого же размера, как и известные_значения_у
новые_значения_х Новые значения х, для которых ТЕНДЕНЦИЯ возвращает соответствующие значения у
констЛогическое значение, которое указывает, требуется ли,
чтобы константа b была равна 0. Если аргумент конст имеет значение ИСТИНА или опущен, то b вычисляется обычным образом. Если конст имеет значение ЛОЖЬ, то b полагается равным 0
Значения параметров экспоненциальной модели определяются с помощью функции ЛГРФПРИБЛ (logest).
Синтаксис:
ЛГРФПРИБЛ (известные_значения_у; известные_значения_х; конст; статистика)
Аргументы:
известные_значения_у Массив известных значений зависимой наблюдаемой величины
известные_значения_х Массив известных значений независимой наблюдаемой величины. Если аргумент известные_значения х опущен, то предполагается, что это массив {1; 2; 3;...} такого же размера, как и известные_значения_у
констЛогическое значение, которое указывает, требуется ли,
чтобы константа b была равна 0. Если аргумент конст имеет значение ИСТИНА или опущен, то b вычисляется обычным образом. Если конст имеет значение ЛОЖЬ, то b полагается равным 0
статистикаЛогическое значение, которое указывает, требуется ли
вывести дополнительную статистику по регрессии, например, коэффициент корреляции. Если статистика имеет значение ИСТИНА, то функция ЛИНЕЙН возвращает дополнительную регрессионную статистику. Если статистика имеет значение ЛОЖЬ или опущена, то функция ЛИНЕЙН возвращает только значения коэффициентов
Кроме того, одномерную экспоненциальную модель можно построить графически (рис. 5.27). На рис. 5.30 приведены результаты построения экспоненциального уравнения тренда продажи подержанных автомобилей за 7, 8 и 9-ю недели торговли (задача из рис. 5.24).
Рис. 5.30. Экспоненциальная линия тренда
В диапазоне ячеек В8:В10 введена формула построения линейного тренда
{ТЕНДЕНЦИЯ(В2:В7;А2:А7;А8:А10)}
В диапазоне ячеек С2:С10 введена формула построения экспоненциального тренда
(=РОСТ (В2 : В7; А2 : А7 ; А2 : АЮ) }
Линейный и экспоненциальный тренды тесно связаны между собой. В диапазон ячеек D2:D10 введена формула
(=ЕХР( ТЕНДЕНЦИЯ (LN(B2:B7) ; А2 : А7 ; А2 : АЮ) ) }
Как видно из рисунка, значения в диапазонах С2:С10 и D2 D10 совпадают.
В диапазоны ячеек F2:G2 и F3:G3 введены формулы
(=ЛИНЕЙН(В2:В7;А2:А7)}
(=ЛГРФПРИБЛ(В2:В7;А2:А7)}
для определения параметров линейной и экспоненциальной моделей.
Квадрат коэффициента корреляции экспоненциальной модели равен 0,947 (рис. 5.30) и меньше квадрата коэффициента корреляции линейной модели (= 0,9923) (рис. 5.29). Таким образом, в данном примере линейная модель более достоверно описывает зависимость между наблюдаемыми величинами.
Транспортная задача с фиксированными доплатами
Рассмотрим пример нелинейной задачи, которая после введения вспомогательных переменных становится линейной. Пусть, как обычно в транспортной задаче, имеется т пунктов производства некоторого товара с объемом производства а, в z-м пункте и п пунктов его потребления с объемом потребления bj в у-м пункте. Требуется найти величины Ху — объемы перевозок из пункта z в пункт j, удовлетворяющие естественным транспортным ограничениям
У Ху = by, je [1, л], i=i‘
(5.3)(5.3)^ху = ан ze[l,/и], Я
(5.3)
(5.3)
Ху > 0, ze[l, zn], уе[1, л] и минимизирующие функцию
г=1 /=1г=1 /=1
г=1 /=1
г=1 /=1
где
О, Ху = 0,
CyXy + dy, Ху >0
(су — затраты на перевозку единицы товара из пункта i в пункт у).
Под dy можно понимать, например, плату за аренду транспортных средств, не зависящую от загрузки. Очевидно, что если все dy равны нулю, то данная задача превращается в обычную транспортную задачу. В противном случае эта задача в силу разрывности функции цели вообще выпадает из рамок линейного программирования. Однако путем введения дополнительных целочисленных переменных ее удается свести к частично целочисленной задаче линейного программирования. Пусть
М = max{zz„ bj, ze|l, mj,ye[l, л]}
Рассмотрим задачу минимизации функции
т и
2 = XXfW + ^уУу
1=1 7=1
при ограничениях (5.3) и дополнительных условиях
У/МО, 1},
Ху - Муу < 0(5.4)
при /е[1, /и],уе[1, п\.
Легко видеть, что частично целочисленная задача эквивалентна исходной задаче.
Рассмотрим пример решения частично целочисленной задачи. Пусть имеется два пункта производства с объемами производства по 200 единиц товара и три пункта потребления с объемами потребления 100, 200 и 100 единиц.
Затраты на перевозку единицы груза Су находятся в ячейках А1:С2, а плата за аренду транспортных средств dy — в ячейках ELG2. Значения объемов производства введем в ячейки D1:D2. Значения объемов потребления введем в ячейки ALC3. Под объемы перевозок Ху отведем ячейки А5:С6, а под дополнительные целочисленные переменные уу — ячейки E5:G6. Под функцию цели отведем ячейку D7, в которую введем формулу
=СУММПР0ИЗВ(А1:С2;А5:С6)+СУММПР0ИЗВ(El:G2;E5:G6)
В ячейки А7:С7 введем формулы
=СУММ(А5:Аб)
=СУММ(В5:В6)
=СУММ(С5:С6)
а в ячейки D5:D6 — формулы
=СУММ(А5:С5)
=СУММ(А6:С6)
которые представляют собой левые части формул транспортных ограничений. В диапазон ячеек А9:С10 введем формулу
(=А5:С6-200*Е5:G6}
которая представляет собой левую часть ограничений (5.4) при М = 200.
Заполним диалоговое окно Поиск решения (Solver), как показано на рис. 5.31. Заметим, что в этом окне в поле Ограничения (Subject to the Constraints) не поместилось еще одно ограничение: $e$5:$g$6 >= о.
В диалоговом окне Параметры поиска решения (Solver Options) (рис. 5.6) не забудьте установить флажок Линейная модель (Assume Linear Model). После нажатия на кнопку Выполнить (Solve) средство поиска решений найдет оптимальное решение (рис. 5.32).
Рис. 5.31. Диалоговое окно Поиск решения для транспортной задачи с фиксированными доплатами
Рис. 5.32. Решение транспортной задачи с фиксированными доплатами
Упражнения
Транспортная задача Имеются п пунктов производства и т пунктов распределения продукции. Стоимость перевозки единицы продукции с z-ro пункта производства в j-й центр распределения Су приведена в таблице, где под строкой понимается пункт производства, а под столбцом — пункт распределения. Кроме того, в этой таблице в z-й строке указан объем производства в i-м пункте производства, а в у-м столбце указан спрос в у-м центре распределения. Необходимо составить план перевозок по доставке требуемой продукции в пункты распределения, минимизирующий суммарные транспортные расходы.
Задача о назначениях. Имеются п рабочих и т видов работ. Стоимость Су выполнения z-м рабочим j-й работы приведена в таблице, где рабочему соответствует строка, а работе — столбец. Необходимо составить план работ так, чтобы все работы были выполнены, каждый рабочий был занят только на одной работе, а суммарная стоимость выполнения всех работ была бы минимальной.
Линейная оптимизационная задача.
Система нелинейных уравнений. Найти все решения системы нелинейных уравнений.
Уравнение регрессии. Построить линейную модель для двух наблюдаемых величин (например, объем реализованных фирмой подержанных автомобилей за указанное число недель).
Вариант 1
Транспортная задача:
Стоимость перевозки единицы продукции
Объемы производства
20
30
50
20
1
3
4
5
5
2
10
3
3
2
1
4
6
4
2
6
Объемы
30
20
60
15
потребления
Задача о назначениях:
3
6
2
5
11
1
2
7
11
3
5
12
11
9
1
2
4
2
10
5
Рабочие
Стоимость выполнения рвбот
Виды работ
Линейная оптимизационная задача:
Предприятие электронной промышленности выпускает две модели радиоприемников, причем каждая модель производится на отдельной технологической линии. Суточный объем производства первой линии — 60 изделий, второй линии — 75 изделий. На радиоприемник первой модели расходуется 10 однотипных элементов электронных схем, на радиоприемник второй модели — 8 таких же элементов. Максимальный суточный запас используемых элементов равен 800 единицам. Прибыль от реализации одного радиоприемника первой и второй моделей равна 30 и 20 долларов, соответственно. Определить оптимальный суточный объем производства первой и второй моделей.
Система нелинейных уравнений:
2х2 + 5у2 = 3, 5х + 9у = 3.
Уравнение регрессии:
Неделя
1
2
3
4
5
6
7
8
Количество машин
13
19
26
30
37
44
49
55
Вариант 2
Транспортная задача:
Стоимость перевозки единицы продукции
Объемы производства
2
7
7
6
20
1
1
1
2
50
5
5
3
1
10
2
8
1
4
20
3
2
1
5
17
Объемы потребления
40
30
20
20
Задача о назначениях:
Стоимость выполнения работ
Рабочие
1
3
6
5
7
5
2
7
8
3
3
5
1
9
2
6
4
2
10
5
Виды работ
Линейная оптимизационная задача:
Процесс изготовления двух видов промышленных изделий состоит в последовательной обработке каждого из них на трех станках. Время использования этих станков для производства данных изделий ограничено 10-ю часами в сутки. Время обработки и прибыль от продажи одного изделия каждого вида приведены в табл. 5.5. Найти оптимальный объем производства изделий каждого вида.
Таблица 5.5. Время обработки и прибыль от продажи одного изделия
Изделие
Время обработки одного изделия, мин
Удельная прибыль, $
Станок 1
Станок 2
Станок 3
1
10
6
8
2
2
5
20
15
3
Система нелинейных уравнений: Зх2 + 4у2 = 4, Зх + 4j = 2.
Уравнение регрессии:
Неделя
1
2
3
4
5
6
7
8
9
10
Количество машин
9
16
20
27
34
39
44
52
58
64
Вариант 3
Транспортная задача:
Объемы потребленияОбъемы потребленияОбъемы производстваОбъемы производства6345205233703424505627301530802063452052337034245056273015308020Стоимость перевозки единицы продукцииСтоимость перевозки единицы продукции
Объемы потребления
Объемы потребления
Объемы производства
Объемы производства
6
3
4
5
20
5
2
3
3
70
3
4
2
4
50
5
6
2
7
30
15
30
80
20
6
3
4
5
20
5
2
3
3
70
3
4
2
4
50
5
6
2
7
30
15
30
80
20
Стоимость перевозки единицы продукции
Стоимость перевозки единицы продукции
Задача о назначениях:
Стоимость выполнения работ
Рабочие
9
4
8
5
7
1
2
9
8
3
3
8
1
9
2
3
4
2
4
5
Виды работ
Линейная оптимизационная задача:
Фирма имеет возможность рекламировать свою продукцию, используя местные радио и телевизионную сеть. Затраты на рекламу в бюджете фирмы ограничены суммой $1000 в месяц. Каждая минута радиорекламы обходится в $5, а каждая минута телерекламы — в $100. Фирма хотела бы использовать радиосеть, по крайней мере, в два раза чаще, чем телевидение. Опыт прошлых лет показал, что объем сбыта, который обеспечивает каждая минута телерекламы, в 25 раз больше объема сбыта, обеспечиваемого одной минутой радиорекламы. Определить оптимальное распределение ежемесячно отпускаемых средств между радио- и телерекламой.
Система нелинейных уравнений: 5х2 + 2у2 = 4, 2х + 7у = 1.
(е) Уравнение регрессии:
Неделя
1
2
3
4
5
6
7
8
9
Количество машин
7
17
19
28
35
42
41
52
57
Вариант 4
Транспортная задача:
Объемы потребленияОбъемы потребленияОбъемы производстваОбъемы производства5176301581405633102514183791102040302051763015814056331025141837911020403020Стоимость перевозки единицы продукцииСтоимость перевозки единицы продукции
Объемы потребления
Объемы потребления
Объемы производства
Объемы производства
5
1
7
6
30
1
5
8
1
40
5
6
3
3
10
2
5
1
4
18
3
7
9
1
10
20
40
30
20
5
1
7
6
30
1
5
8
1
40
5
6
3
3
10
2
5
1
4
18
3
7
9
1
10
20
40
30
20
Стоимость перевозки единицы продукции
Стоимость перевозки единицы продукции
Задача о назначениях:
РабочиеРабочие862552983819142337105862552983819142337105Стоимость выполнения работСтоимость выполнения работВиды работВиды работ
Рабочие
Рабочие
8
6
2
5
5
2
9
8
3
8
1
9
1
4
2
3
3
7
10
5
8
6
2
5
5
2
9
8
3
8
1
9
1
4
2
3
3
7
10
5
Стоимость выполнения работ
Стоимость выполнения работ
Виды работ
Виды работ
Линейная оптимизационная задача:
Фирма производит два вида продукции — А и В. Объем сбыта продукции А составляет не менее 60% обшего объема реализации продукции обоих видов. Для изготовления продукции А и В используется одно и то же сырье, суточный запас которого ограничен величиной 100 кг. Расход сырья на единицу продукции А составляет 2 кг, а на единицу продукции В — 4 кг. Цены про-
дукции А и В равны 20 и 40 долларов, соответственно. Определить оптимальное распределение сырья для изготовления продукции А и В.
Система нелинейных уравнений:
4х2 + 5у2 = 3,
5х + Зу = 1.
Уравнение регрессии:
Неделя
1
2
3
4
5
6
7
8
9
Количество машин
12
21
30
36
44
54
61
70
78
Вариант 5
Транспортная задача:
Объемы производстваОбъемы производстваОбъемы потребленияОбъемы потребления394540185310721430241062050103510394540185310721430241062050103510Стоимость перевозки единицы продукцииСтоимость перевозки единицы продукции
Объемы производства
Объемы производства
Объемы потребления
Объемы потребления
3
9
4
5
40
1
8
5
3
10
7
2
1
4
30
2
4
10
6
20
50
10
35
10
3
9
4
5
40
1
8
5
3
10
7
2
1
4
30
2
4
10
6
20
50
10
35
10
Стоимость перевозки единицы продукции
Стоимость перевозки единицы продукции
Задача о назначениях:
10
8
6
2
7
6
2
9
8
3
3
7
1
10
5
9
10
2
3
4
Рабочие
Стоимость выполнения работ
Виды работ
Линейная оптимизационная задача:
Фирма выпускает ковбойские шляпы двух фасонов (А и В). Трудоемкость
изготовления шляпы фасона А вдвое выше трудоемкости изготовления шляпы фасона В. Если бы фирма выпускала только шляпы фасона А, суточный объем производства мог бы составить 500 шляп. Суточный объем сбыта
шляп обоих фасонов ограничен диапазоном от 150 до 200 штук. Прибыль от продажи шляпы фасона А равна $8, а фасона В — $5. Определить, какое количество шляп каждого фасона следует изготовить, чтобы максимизировать прибыль.
Система нелинейных уравнений:
5х2 + бу2 = 3,
7х + Зу = 1.
Уравнение регрессии:
Неделя
1
2
3
4
5
6
7
8
9
10
11
Количество машин
12
17
23
30
35
40
48
54
59
65
72
Вариант 6
Объемы производстваОбъемы производстваОбъемы потребленияОбъемы потребленияТранспортная задача:
Объемы производства
Объемы производства
Объемы потребления
Объемы потребления
6
1
3
1
20
3
4
5
8
30
5
9
3
2
20
2
4
8
4
20
3
2
1
5
17
Стоимость перевозки единицы продукции
50302020
Задача о назначениях:
9
3
2
7
5
4
9
8
7
8
1
10
1
9
10
3
2
7
8
5
Рабочие
Стоимость выполнения работ
Виды работ
Линейная оптимизационная задача:
Изделия четырех типов проходят последовательную обработку на двух станках. Время обработки одного изделия каждого типа на каждом из станков приведено в табл. 5.6.
Таблица 5.6. Время обработки одного изделия
Станок
Время обработки одного изделия, ч
Тип 1
Тип 2
Тип 3
Тип 4
1
2
3
4
2
2
3
2
1
2
Затраты на производство одного изделия каждого типа определяются как величины, прямо пропорциональные времени использования станков (в машино-часах). Стоимость машино-часа составляет 10 и 15 долларов для станков 1 и 2, соответственно. Допустимое время использования станков для обработки изделий всех типов ограничено следующими значениями: 500 машино-часов для станка 1 и 380 машино-часов для станка 2. Цены изделий типов 1, 2, 3 и 4 равны 65, 70, 55 и 45 долларов, соответственно. Составить план производства, максимизирующий чистую прибыль.
Система нелинейных уравнений:
Зх2 + 5у2 = 3,
5х + 2у = 2.
(е) Уравнение регрессии:
Неделя
1
2
3
4
5
6
7
8
9
Количество машин
10
18
22
28
34
39
46
51
54
Вариант 7
(а) Транспортная задача:
Стоимость перевозки единицы продукции
Объемы производства
30
20
30
40
5
9
4
5
1
5
5
6
2
2
10
4
3
7
2
6
Объемы
20
50
20
35
потребления
(Ь) Задача о назначениях:
Стоимость выполнения работ
Рабочие
9
4
6
2
10
6
2
10
8
4
3
7
1
10
5
7
10
5
3
9
Виды работ
Линейная оптимизационная задача:
Завод выпускает изделия трех моделей (I, II и III). Для их изготовления используются два вида ресурсов (А и В), запасы которых составляют 4000 и 6000 единиц Расходы ресурсов на одно изделие каждой модели приведены в табл. 5.7.
Таблица 5.7. Расходы ресурсов
Ресурс
Расход ресурса на одно изделие данной модели
1
II
III
А
2
3
5
В
4
2
7
Трудоемкость изготовления изделия модели I вдвое больше, чем изделия модели II, и втрое больше, чем изделия модели III. Численность рабочих завода позволяет выпускать 1 500 изделий модели 1. Анализ условий сбыта показывает, что минимальный спрос на продукцию завода составляет 200, 200 и 150 изделий моделей I, II и III, соответственно. Однако соотношение выпуска изделий моделей I, II и III должно быть равно 3:2:5. Удельная прибыль от реализации изделий моделей I, II и III составляет 30, 20 и 50 долларов, соответственно. Определить выпуск изделий, максимизирующий прибыль.
Система нелинейных уравнений:
7х2 + бу2 = 3,
5х + Зу = 2.
(е) Уравнение регрессии:
Неделя
1
2
3
4
5
6
7
8
Количество машин
12
18
25
32
40
46
53
60
Вариант 8
Транспортная задача:
Объемы производстваОбъемы производстваОбъемы потребленияОбъемы потребления7132308458205237105584271975303040501071323084582052371055842719753030405010Стоимость перевозки единицы продукцииСтоимость перевозки единицы продукции
Объемы производства
Объемы производства
Объемы потребления
Объемы потребления
7
1
3
2
30
8
4
5
8
20
5
2
3
7
10
5
5
8
4
27
1
9
7
5
30
30
40
50
10
7
1
3
2
30
8
4
5
8
20
5
2
3
7
10
5
5
8
4
27
1
9
7
5
30
30
40
50
10
Стоимость перевозки единицы продукции
Стоимость перевозки единицы продукции
Задача о назначениях:
10
3
2
4
5
9
10
8
7
8
1
9
11
10
9
12
2
7
8
10
Рабочие
Стоимость выполнения работ
Виды работ
Линейная оптимизационная задача:
Требуется распределить имеющиеся денежные средства по четырем альтернативным вариантам. Игра имеет три исхода. В табл. 5.8 приведены размеры выигрыша (или проигрыша) на каждый доллар, вложенный в соответствующий альтернативный вариант, для каждого из трех исходов. У игрока имеется $500, причем использовать их в игре можно только один раз. Точный исход игры заранее неизвестен. Учитывая эту неопределенность, распределить деньги так, чтобы максимизировать минимальную отдачу от этой суммы.
Таблица 5.8. Возможные выигрыши и проигрыши
Исход
Выигрыш или проигрыш на каждый доллар, вложенный в данный вариант
1
2
3
4
1
-3
4
-7
15
2
5
-3
9
4
3
3
-9
10
-10
Система нелинейных уравнений: 5х2 + бу2 = 3, Зх + 2у = 2.
Уравнение регрессии:
Неделя
1
2
3
4
5
6
7
8
9
Количество машин
14
23
30
39
45
54
63
70
78
Вариант 9
Объемы производстваОбъемы производстваОбъемы 40 потребленияОбъемы 40 потребленияТранспортная задача:
Объемы производства
Объемы производства
Объемы 40 потребления
Объемы 40 потребления
7
9
1
5
2
7
5
6
3
5
10
8
3
7
4
5
Стоимость перевозки единицы продукции
20
30
40
30
30
30
42
Задача о назначениях:
5
4
12
2
10
6
5
10
8
4
3
7
11
10
8
10
1
5
11
9
Рабочие
Стоимость выполнения работ
Виды работ
Линейная оптимизационная задача:
Небольшая фирма выпускает два типа автомобильных деталей (А и В). Для этого она закупает литье, подвергаемое токарной обработке, сверловке и
шлифовке. Данные, характеризующие производительность станочного парка фирмы, приведены в табл. 5.9.
Таблица 5.9. Производительность станков
Станки
Деталь А, шт./чДеталь В, шт./ч
Токарный
Сверлильный
Шлифовальный
2540
2835
3525
Каждая отливка, из которой изготавливают деталь А, стоит $2. Стоимость отливки для детали В — $3. Продажная цена деталей равна, соответственно, 5 и 6 долларов. Стоимость часа станочного времени составляет по трем типам используемых станков 20,-14 и 17,5 долларов, соответственно. Предполагая, что можно выпускать для продажи любую комбинацию деталей А и В, нужно найти план выпуска продукции, максимизирующий прибыль.
Система нелинейных уравнений:
Зх2 + 2у2 = 2,
2х + 7у = 3.
Уравнение регрессии:
Неделя
1
2
3
4
5
6
7
8
9
10
11
Количество машин
15
22
26
33
40
45
51
58
63
69
78
Вариант 10
Объемы производстваОбъемы производстваОбъемы потребленияОбъемы потребленияТранспортная задача:
Объемы производства
Объемы производства
Объемы потребления
Объемы потребления
5
9
3
10
10
3
10
5
9
30
7
2
3
8
20
8
5
11
2
32
5
9
10
5
20
Стоимость перевозки единицы продукции
50103010
Задача о назначениях:
5
12
2
7
10
9
7
12
7
8
11
9
2
10
9
13
12
7
8
3
Рабочие
Стоимость выполнения работ
Виды работ
Линейная оптимизационная задача:
Бройлерное хозяйство птицеводческой фермы насчитывает 20000 цыплят, которые выращиваются до 8-недельного возраста и после соответствующей обработки поступают в продажу. Хотя недельный рацион цыплят зависит от их возраста, в дальнейшем будем считать, что в среднем (за 8 недель) он составляет 1 фунт.
Для того чтобы цыплята достигли к восьмой неделе необходимого веса, кормовой рацион должен удовлетворять определенным требованиям по питательности. Этим требованиям могут соответствовать смеси различных видов кормов или ингредиентов. Ограничим наше рассмотрение только тремя ингредиентами: известняком, зерном и соевыми бобами. В табл. 5.10 приведены данные, характеризующие содержание (по весу) питательных веществ в каждом из ингредиентов и удельную стоимость каждого ингредиента.
Таблица 5.10. Содержание (по весу) питательных веществ
Ингредиент
Содержание питательных веществ, фунт/фунт ингредиента
Стоимость, S/фунт
Кальций
Белок
Клетчатка
Известняк
0,38
—
—
0,04
Зерно
0,001
0,09
0,02
0,15
Соевые бобы
0,002
0,5
0,08
0,4
Смесь должна содержать:
Не менее 0,8%, но и не более 1,2% кальция
Не менее 22% белка
Не более 5% клетчатки
Необходимо определить количество каждого из трех ингредиентов, образующих смесь минимальной стоимости, при соблюдении требований к общему расходу кормовой смеси и ее питательности.
Система нелинейных уравнений:
5х2 + у2 = 3,
Зх + 5у = 2.
Уравнение регрессии:
Неделя
1
2
3
4
5
6
7
8
Количество машин
9
15
24
29
38
46
52
58
Глава 6
Сводные таблицы
Одним из наиболее мощных средств Excel по работе с базами данных являются сводные таблицы. Они полезны как для анализа, так и для обобщения информации, хранящейся в базе данных, на рабочих листах, во внешних файлах. Сводные таблицы являются динамическими объектами, позволяющими выводить информацию с различной степенью детализации.
Проанализируем базу данных, представленную на рис. 6.1.
АВ
сi0
i г е . ' ,
1
Фамилия Тип вклада
Размер вкладаОтделение банка
Примечание
2
Сидоров Текущий
23100000 Северное
Временно выехал
3
Фролов Депозит
4159000 Центральное
:4
Сидорчук Текущий
123 Западное
.5/
Вагнер. Текущий
388800С Северное
Сменил адрес
6
Петров Текущий
21758 Северное
7
Иванов Депозит
559000: Центральное
8
ГригорьевТекущии
5000500 Центральное
—J
9
Чернов Текущий
73000000 Северное
10
Кравцов Текущий
1760300 Северное
Перевел в другое отделение
11
Рябов Текущий
77200000 Западное
12
Степанов Депозит
45300000 Центральное
13
Иванов Депозит
50959000 Центральное
14
Круглов Депозит
12859000 Центральное
1S
Федоров Текущий Тара каков Текущий
34500000 Северное
16
4760000 Северное
17
Сидоров Депозит
29800000 Западное
18
Козлов Депозит
67300000 Западное
НГ
йТ
* I t^k^asa данных/ j" nJ
• ' - -~~..- .
Рис. 6.1. База данных
Эта база данных создана на рабочем листе с именем База данных с помощью сводной таблицы для нахождения суммы вкладов, хранящихся в различных отделениях банка.
Выполним команду Данные, Сводная таблица (Data, Pivot Table). В первом диалоговом окне Мастер сводных таблиц (PivotTable Wizard) (рис. 6.2) установим переключатель в положение, показывающее, откуда берутся данные для сводной таблицы:
□ В списке или базе данных Microsoft Excel — если данные берутся с одного рабочего листа
Во внешнем источнике данных — если данные берутся из внешней базы данных
□ В нескольких диапазонах консолидации — если данные берутся с нескольких рабочих листов
В другой сводной таблице — если сводная таблица создается на основе данных другой сводной таблицы
Рис. 6.2. Первое диалоговое окно Мастер сводных таблиц
В рассматриваемом примере нужно установить переключатель в положение
В списке или базе данных Microsoft Excel.
В поле Диапазон (Range) второго диалогового окна Мастер сводных таблиц (PivotTable Wizard) укажите, на основе какого диапазона строится сводная таблица (рис. 6.3). В рассматриваемом примере необходимо указать диапазон:
'База данных'!$А$1:$Е$18
В третьем диалоговом окне Мастер сводных таблиц (PivotTable Wizard) необходимо указать структуру сводной таблицы (рис. 6.4).
Рис. 6.3. Второе диалоговое окно Мастер сводных таблиц
Рис. 6.4. Третье диалоговое окно Мастер сводных таблиц
Поля базы данных, на основе которой строится сводная таблица, представлены в этом окне в виде кнопок с названиями этих полей. Надо так перетащить их в соответствующие области, чтобы сводная таблица приобрела необходимую структуру. В окне имеются четыре области:
Строка (Row) — для использования данных поля, расположенного в этой области, в качестве заголовков строк
Столбец (Column) — для использования данных поля, расположенного в этой области, в качестве заголовков столбцов
Данные (Data Area) — для суммирования значений поля, расположенного в этой области, в ячейках сводной таблицы
Страница (Page) — для обеспечения возможности вывода данных сводной таблицы, относящихся только к полю, расположенному в этой области
В рассматриваемом примере создадим рабочую таблицу, состоящую из строк с названиями отделений с выводом суммы вкладов, находящихся в них (рис. 6.5).
Рис. 6.5. Третье диалоговое окно Мастер сводных таблиц после перетаскивания кнопок полей в области сводной таблицыРис. 6.5. Третье диалоговое окно Мастер сводных таблиц после перетаскивания кнопок полей в области сводной таблицы
Рис. 6.5. Третье диалоговое окно Мастер сводных таблиц после перетаскивания кнопок полей в области сводной таблицы
Рис. 6.5. Третье диалоговое окно Мастер сводных таблиц после перетаскивания кнопок полей в области сводной таблицы
ОКОКОтменаОтменаУдалитьФормат...Дололадтельнр >.УдалитьФормат...Дололадтельнр >.
ОК
ОК
Отмена
Отмена
Удалить
Формат...
Дололадтельнр >.
Удалить
Формат...
Дололадтельнр >.
Двойной щелчок на кнопке, перемещенной в область Данные (Data), открывает диалоговое окно Вычисление поля сводной таблицы (PivotTable Field), позволяющее выбрать правило, по которому подводятся итоги в сводной таблице (рис. 6.6).
Вычисление поля сводной таблицы
Исконное поле' Размер вклада Имя |Сумма по полю Размер вклада
Операция;
С.4 Tia
Кол-во значений Среднее Максимум Минимум Произведение Кол-во чисел
Рис. 6.6. Диалоговое окно Вычисление поля сводной таблицы
Допустимыми операциями подведения итогов являются: сумма, количество значений, среднее арифметическое, максимальное и минимальное значение,
произведение, количество чисел, несмешанное и смешанное отклонение, несмешанная и смешанная дисперсия. В нашем примере выберем в качестве допустимой операции сумму.
В четвертом диалоговом окне Мастер сводных таблиц (PivotTable Wizard) можно задать некоторые параметры, определяющие вид сводной таблицы (рис. 6.7).
Рис. 6.7. Четвертое диалоговое окно Мастер сводных таблиц
В поле ввода Поместить таблицу в (PivotTable Starting Cell) указывается адрес верхней левой ячейки таблицы. Если это поле оставить пустым, то в текущую рабочую книгу будет вставлен новый рабочий лист со сводной таблицей, левый верхний угол которой расположен в ячейке А1
О В поле ввода Название таблицы (PivotTable Name) указывается название сводной таблицы. По умолчанию сводные таблицы называются: Свод- наяТаблица! (PivotTablel), СводнаяТаблица2 (pivotTable2) И Т. д.
Устанавливая флажок Общие итоги по столбцам (Grand Totals for Columns) или флажок Общие итоги по строкам (Grand Totals for Rows), можно подвести итоги по столбцам или строкам в сводной таблице
Установка флажка Сохранить данные с макетом таблицы (Save Data With Table Layout) создает дополнительную копию данных, позволяющую быстрее пересчитывать сводную таблицу при ее изменении
Установка флажка Автоматически форматировать таблицу (AutoFormat Table) позволяет использовать средства автоформата Excel
После щелчка на кнопке Готово (Finish) на рабочем листе будет создана сводная таблица, представленная на рис. 6.8.
GН т17Сумма по полю Размер вкладаВсего18Отделение банка19Западное17430012320Северное18387005821Центральное11883650022Общий итог47700668123242,5 «Lt»| ^Ь.Слза данныхhi J>jrGН т17Сумма по полю Размер вкладаВсего18Отделение банка19Западное17430012320Северное18387005821Центральное11883650022Общий итог47700668123242,5 «Lt»| ^Ь.Слза данныхhi J>jrРис. 6.8. Пример сводной таблицыРис. 6.8. Пример сводной таблицы
G
Н т
17
Сумма по полю Размер вклада
Всего
18
Отделение банка
19
Западное
174300123
20
Северное
183870058
21
Центральное
118836500
22
Общий итог
477006681
23
24
2,5 «Lt
»| ^Ь.Слза данныхhi J
>jr
G
Н т
17
Сумма по полю Размер вклада
Всего
18
Отделение банка
19
Западное
174300123
20
Северное
183870058
21
Центральное
118836500
22
Общий итог
477006681
23
24
2,5 «Lt
»| ^Ь.Слза данныхhi J
>jr
Рис. 6.8. Пример сводной таблицы
Рис. 6.8. Пример сводной таблицы
ОтменаОтменаДля детализации итогов сводной таблицы необходимо дважды щелкнуть на названии поля (например, западное) и в открывшемся диалоговом окне Показать детали (Show Detail) (рис. 6.9) указать, по каким признакам необходимо выполнить детализацию.
Отмена
Отмена
Показать детали
Выберите поле, содержащей
детали, которые нужно показать:
Фамилия
Тип вклада Размер вклада Примечание
Рис. 6.9. Диалоговое окно
Показать детали
В рассматриваемом примере детализируем сводную таблицу по типу вклада Результат представлен на рис. 6.10. Теперь двойным щелчком на названии поля отделение банка можно скрывать или показывать его детализацию.
G
н
1
17
Сумма по полю Размер вклада
18
Отделение банка
Тип екл да
Всего
19
Западное
Депозит
97100000
20
Текущий
77200123
21
Западное Всего
174300123
22
Северное
Текущий
183870058
23
Северное Всего
183870058
24
Центральное
Депозит
113836000
25 j
Текущий
5000500
26
Центральное Всего
118836500
27
Общий итог
477006681
*]?^.Ба?а ланных^ | < |
J
НГ
Рис. 6.10.
Детализированная сводная таблица
При изменении данных в базе данных, на основе которой была построена сводная таблица, не происходит автоматического пересчета итогов в сводной таблице. Для ее обновления необходимо выполнить команду Данные, Обновить данные (Data, Refresh Data) или щелкнуть правой кнопкой мыши любую ячейку сводной таблицы и в раскрывшемся контекстном меню выбрать команду Обновить данные (Refresh Data).
Для удаления поля из сводной таблицы достаточно щелкнуть его название и перетащить его за пределы сводной таблицы.
Перемещая названия полей, можно менять их местоположение. Например, переместив название поля Тип вклада из строчки в столбец, получим измененную сводную таблицу (рис. 6.11).
G
: Н
1
17
'умма по полю Размер вклада
Тип «клада
18
Отделение банка
Депозит
Текущий
Общий итог
19
Западное
07100000
77200123
174300123
20
Северное
0
183870058
183870058
21
Центральное
113836000
5000500
118836500
22
Общий итог
210036000
266070681
477006681
*1 Ц^жрдза ДД!^^]?!/. . 1 ±№<
Рис. 6.11. Сводная таблица после перемещения названия поля Тип вклада из строчки в столбец
Для редактирования сводной таблицы ее необходимо выделить и выполнить команду Сервис, Сводная таблица (Tools, Pivot Table). В результате открывается третье диалоговое окно Мастер сводных таблиц (PivotTable Wizard). Преобразуем, например, данную сводную таблицу в таблицу, подсчитывающую количество вкладов различных типов в различных отделениях с учетом примечаний (рис. 6.12).
На рис. 6.13 показан результат создания такой таблицы.
Изменить поле сводной таблицы можно, дважды щелкнув его название. Открывшееся диалоговое окно Вычисление поля сводной таблицы (PivotTable Field) (рис. 6.6) предоставляет возможность изменить имя поля и операцию, на основе которой составляется сводная таблица.
Двойной щелчок на ячейке сводной таблицы вызывает создание новой таблицы (на новом рабочем листе), содержащей обобщенную информацию об этой ячейке. Например, двойной щелчок на ячейке Н19 таблицы, представленной на рис. 6.11, создает таблицу, показанную на рис. 6.14.
Excel предоставляет удобное средство для группировки данных. Например, для того чтобы в нашей итоговой сводной таблице объединить северное и западное отделения банка в одно северо-западное, необходимо выбрать на-
звания полей с этими двумя отделениями и выполнить команду Данные, Структура, Сгруппировать (Data, Group and Outline, Group). Результат ее выполнения показан на рис. 6.15.
Рис. 6.12. Преобразование сводной таблица
Рис. 6.13. Результат преобразования сводной таблицы
А
51С।-1. Е И
1
Фамилия Тип вклада Размер вклада; Отделение банка Примечание
2 '
Сидоров Депозит ■29800000; Западное
3 '
Козлов Депозит67300000 Западное
4
и <
Рис. 6.14. Развернутое содержание ячейки сводной таблицы
Н
К
17
Сумма по полю Размер вклада .
Тип вклада i
18
Отделение банкаЗ
Отделение оанка
Депозит
Текущий
Общий итог
19
Группа!
Западное
97100000
77200123
174300123
29
Северное
0
183870058
183870058
21
Центральное
Центральное
113836000
5000500
118836500
22
Общий итог
210936000
266070681
477006681
н| I
I Н^База данных/J4 |
I
►и
Рис. 6.15. Группировка данных в сводной таблице
Изменить название поля Отделение банка2 на Северно-западное МОЖНО В диалоговом окне Вычисление поля сводной таблицы (PivotTable Field) (рис. 6.6), которое открывается двойным щелком на этом названии.
Для того чтобы разгруппировать данные, необходимо выбрать названия соответствующих полей и выполнить команду Данные, Структура, Разгруппировать (Data, Group and Outline, Ungroup).
Глава 7
Visual Basic for Applications (VBA)
Материал предыдущих глав, несомненно, дает уверенность в том, что составление любого документа в Excel теперь не вызовет проблем. Ни одна задача не сможет поставить вас в тупик. Однако если вы стремитесь к совершенству, то Visual Basic For Applications (VBA) — это то, что вам нужно.
Visual Basic For Applications — это сочетание одного из самых простых языков программирования и всех вычислительных возможностей Excel. С помощью VBA вы сможете легко и быстро создавать разнообразные приложения, даже не являясь специалистом в области программирования. VBA содержит графическую среду, позволяющую наглядно конструировать экранные формы и управляющие элементы. Использование VBA придаст вашим документам неповторимую изюминку и элегантность. Visual Basic For Applications позволяет с легкостью решать многие задачи, о возможности выполнения которых средствами Excel вы раньше даже и не подозревали.
При изучении программирования на языке VBA важнейшую роль играют примеры. Как правило, удачно подобранный пример может передать основную идею лучше, чем длинные теоретические рассуждения. Кроме того, как показывает опыт, теоретическая рутина часто действует усыпляюще на начинающего пользователя. Для того чтобы держать читателя бодрствующим и заинтересованным, мы подходим к изучению VBA в этой главе "от конкретных примеров".
Глава насыщена большим количеством полностью разработанных приложений, одни из которых можно использовать без всяких изменений, а другие — после соответствующей корректировки в соответствии с вашими потребностями.
Простейшие функции и процедуры. Типы переменных
Функция пользователя
Простейшей задачей, решаемой на VBA, является создание функций пользователя, имеющих имена. С функциями пользователя можно работать с помощью мастера функций точно так же, как и со встроенными функциями рабочего листа. Создадим, например, функцию пользователя, математически определенную следующим образом:
у = $1п(лх) е2х
Функции пользователя создаются на рабочем листе с названием модуль VBA, после чего с ними можно работать с помощью мастера функций. Для создания модуля VBA необходимо щелкнуть правой кнопкой мыши ярлычок листа, перед которым вы хотите разместить данный модуль, и из раскрывшегося контекстного меню выбрать команду Вставка (Insert). На вкладке Общие (General) открывшегося диалогового окна Вставка (Insert) необходимо выбрать тип листа — Модуль (Module). После нажатия кнопки ОК произойдет вставка листа модуля. По умолчанию Excel присваивает листам модуля имена: модуль!, Модуль2 (Module!, Module2) и т. д. Теперь на листе модуля, как это показано на рис. 7.1, можно ввести текст следующей программы:
Function Y(х)Y = Sin(Application.Pi() * х)*Ехр(-2 * х) End FunctionFunction Y(х)Y = Sin(Application.Pi() * х)*Ехр(-2 * х) End FunctionРис. 7.1.Лист модуляРис. 7.1.Лист модуля
Function Y(х)
Y = Sin(Application.Pi() * х)*Ехр(-2 * х) End Function
Function Y(х)
Y = Sin(Application.Pi() * х)*Ехр(-2 * х) End Function
Рис. 7.1.
Лист модуля
Рис. 7.1.
Лист модуля
Функция pi () в VBA возвращает значение постоянной л (в Excel — функция пи о). Заметим, что поскольку функция Pi о не является внутренней функцией VBA, то ее необходимо записать в форме Application.pi о. Об объекте Application см. раздел 7.7.
По умолчанию созданная функция при выборе ее с помощью мастера функций относится к категории Определенные пользователем (User Defined). Можно изменить категорию принадлежности функции, а также добавить необходимые комментарии в мастере функций для удобства пользования созданной функцией, если выполнить следующие действия. При активном листе Модуль!, на котором введена функция Y, нажмите клавишу <F2>. На экране появится диалоговое окно Просмотр объектов (Object Browser) (рис. 7.2).
Рис. 7.2. Диалоговое окно Просмотр объектов
При нажатии кнопки Параметры (Options) открывается диалоговое окно Параметры макроса (Macro Options). В этом окне в поле Описание (Description) введите текст комментария, например, Вспомогательная функция (рис. 7.3).
С помощью диалогового окна Параметры макроса (Macro Options) можно также изменить категорию, к которой принадлежит данная функция, и связать с ней файл справки с подробным описанием данной функции. После внесения необходимой информации нажмите кнопку ОК диалогового окна Параметры макроса (Macro Options), а затем кнопку Закрыть (Close) диалогового окна Просмотр объектов (Object Browser). Теперь все готово для работы с функцией К
Рис. 7.3.Ввод описания функции в диалоговом окне Параметры макросаРис. 7.3.Ввод описания функции в диалоговом окне Параметры макроса
Рис. 7.3.
Ввод описания функции в диалоговом окне Параметры макроса
Рис. 7.3.
Ввод описания функции в диалоговом окне Параметры макроса
Пусть в ячейку А1 записано число 0.2, и вам нужно вычислить в ячейке В1 значение функции У при х = 0,2. Для этого достаточно в ячейку В1 ввести формулу =Y(A1) (рис. 7.4). Это можно сделать теперь с помощью мастера функций, который будет содержать функцию У наряду с другими встроенными функциями Excel.
Рис. 7.4. Ввод функции Y в ячейку с помощью мастера функций
Конечно, тот же результат можно получить, и не создавая функцию пользователя, а просто введя в ячейку В1 следующую формулу
=5Ш(ПИ() *А1) *ЕХР(-2*А1)
Однако при постоянном ее использовании лучше все же создать соответствующую функцию пользователя, чтобы не вводить эту формулу каждый раз заново.
Общий вид функции пользователя:
Function ИМЯ_ФУНКЦИИ(СПИСОК_ПАРАМЕТРОВ)
ТЕЛОФУНКЦИИ
End Function
тело_функции состоит из описательной части и блока операторов, выполняющихся один за другим. Если необходимо прекратить выполнение функции в некотором конкретном месте, это можно сделать с помощью оператора Exit Function. При определении функции иногда бывает удобно описать типы параметров и вычисляемого значения функции.
Именем функции или переменной может быть любой идентификатор, определенный пользователем. Идентификатор — это последовательность букв, цифр и символа подчеркивания, начинающаяся с буквы. Отметим, что пробелы внутри идентификаторов недопустимы, поэтому они заменяются символом подчеркивания. Для упрощения чтения и понимания значения идентификаторов на практике рекомендуется при написании сложных идентификаторов использовать строчные и прописные буквы, а также символ подчеркивания. Например, вместо идентификатора datetoday лучше написать DateToday ИЛИ Date_Today.
Носителем возвращаемого значения функции пользователя является имя функции. Поэтому в теле функции пользователя, вычисляющей некоторое значение, должен присутствовать, по крайней мере, один оператор, присваивающий имени функции значение какого-либо выражения.
С помощью ключевого слова Optional можно сделать некоторые переменные в функции пользователя необязательными (необязательными являются те из них, которые можно при вызове не задавать). Необязательные переменные должны иметь тип variant (см. раздел 7.1.2).
Рассмотрим функцию пользователя Miss Side Tr, которая находит длину недостающей стороны прямоугольного треугольника, где переменные А и В отведены под длины катетов, а переменная С — под гипотенузу. Например, формула =Miss_Side Tr(;B2,-c2) вычисляет катет А по введенным в ячейки В2 и С2 катету В и гипотенузе С. При работе с необязательными переменными необходимо использовать функцию isMissing, возвращающую True, если соответствующий аргумент не был передан в процедуру, и False — в противном случае.
Function Miss_Side_Tr(Optional A; Optional В; Optional С) If Not (IsMissing(A)) And Not (IsMissing(B)) Then
Miss_Side_Tr = Sqr (А л 2 + В л 2)
End If
If Not (IsMissing(A)) And Not (IsMissing(C)) Then Miss_Side_Tr = Sqr(С л 2 - А л 2)
End If
If Not (IsMissing(B)) And Not (IsMissing(C)) Then Miss_Side_Tr = Sqr(С л 2 - В л 2)
End If
End Function
Переменные и постоянные
Все переменные в VBA имеют тип. Тип указывает, что может хранить переменная: целое число, строку, дату и т. д. Базовые типы переменных VBA приведены в табл. 7.1.
Таблица 7.1. Типы переменных
Тип данных
Занимаемый размер памяти (байт)
Диапазон
Boolean
(Логический)
2
True(Истина) или False (Ложь)
Integer(Целое)
2
От-32 768 до 32 768
Long
(Длинное целое)
4
От -2 147 483 648 до 2 147 483 647
Single (Число с плавающей точкой)
4
По абсолютной величине
от 1,401298Е-45 до 3.402823Е38
Date (Дата)
8
От 1 января 100 г. до 31 декабря 9 999 г.
Array (Массив)
Зависит от размера массива и типа элементов массива
Double (Число с плавающей точкой двойной точности)
8
По абсолютной величине от 4,94065645841247Е-324 до 1,79769313486232Е308
Object (Обект)
4
Любой определенный объект
String (строка переменной длины)
10 + длина строки
От 0 до 2х109
Currency
(Денежный)
8
От -922 337 203 685 477,5808 до 922 337 203 685 477,5807
Variant (Вариант) Зависит от содержимого переменной
Если не указан тип переменной, то по умолчанию используется тип Variant. Переменные этого типа могут хранить все, что в них поместят, т. е. их тип изменяется в зависимости от последнего присвоения. Поэтому тип Variant очень удобен. Однако указание конкретного типа позволяет делать функции более быстрыми и надежными.
Переменную в VBA можно описать с помощью следующей конструкции:
Dim ИМЯ_ПЕРЕМЕННОЙ As ТИП_ПЕРЕМЕННОЙ
Например, возможны следующие описания переменных:
Dim A As Integer
Dim С, D As Integer, E As Single
По умолчанию строковая или текстовая переменная (string) является массивом переменной длины, который содержит символы. Однако текстовая переменная может быть определена и фиксированной длины. В следующем примере объявляется символьный массив размером в 25 символов:
Dim S As String*25
В этом случае, если вы присвоите переменной S строку длиной более 25 символов, то она будет усечена.
Как и в других языках программирования, в VBA вы можете использовать массивы. Примеры объявления массивов:
Dim В(3, 3) As Single
Dim А(12) As Integer
Первая строка объявляет двухмерный массив 3x3 (матрицу), состоящий из действительных чисел. Вторая строка объявляет одномерный массив (вектор), состоящий из 12 целых чисел, причем по умолчанию первый элемент массива будет А(0), а последний — а(11). В этом случае говорят, что о — базовый индекс. Можно изменить базовый индекс, написав в начале листа модуля оператор Option Base 1. После этого индексы массивов А и В будут начинаться с единицы. Другим способом изменения базового индекса является использование ключевого слова то при объявлении массива, например
Dim В(1 То 3, 1 То 3) As Single
Dim А(1 То 12) As Integer
Массив в программе определяется поэлементно, например
Dim В(1 То 2, 1 То 2) As Single
В(1,1)=2
В(1,2)=4
В(2,1)=1
В(1,2)=6
Удобным способом определения одномерных массивов является функция Array, преобразующая список элементов, разделенных запятыми, в вектор из этих значений и присваивающая ему тип variant, например
Dim A As Variant
А = Array(10,20,30)
В = А(2)
Иногда в процессе выполнения программы требуется изменять размер массива. В этом случае его объявляют как динамический. Для этого при объявлении массива не нужно указывать размерность, например
Dim R( ) As Single
Затем в программе следует вычислить необходимый размер массива, присвоив его некоторой переменной, например п, и указать размер динамического массива с помощью оператора ReDim
ReDim R(n, n)
При описании типов переменных, являющихся параметрами функций или процедуры, Dim опускается. В примере, приведенном в разделе 7.1.1, параметр х функции У и вычисляемое в функции значение по умолчанию имеют тип variant. Так как по смыслу задачи х и У являются действительными числами, то данную функцию пользователя можно также записать следующим образом (с явным указанием типов):
Function Y (х As Double) As Double
Y = Sin(Application.Pi() * x)*Exp(-2 * x)
End Function
Знак "=" является оператором присваивания, который предписывает выполнить выражение, заданное в его правой части, и присвоить результат пере-
менной, идентификатор которой расположен в левой части. Например, в результате действия следующей пары операторов
Х=2
Х=Х+2
переменной х будет присвоено значение 4.
Часто при написании программ необходимо использовать одни и те же постоянные значения: числа, строки, даты и т. д. В этом случае вместо них лучше использовать имена, которые обозначают эти значения. В VBA можно задать постоянную с помощью одной из следующих конструкций:
Const ИМЯ_ПОСТОЯННОЙ = ВЫРАЖЕНИЕ
Const ИМЯ_ПОСТОЯННОЙ Аз" ТИП_ПОСТОЯННОЙ = ВЫРАЖЕНИЕ
Примеры возможного определения постоянных:
Const FileName = "test.xls"
Const PI As Double = 3.14159
Процедуры
Кроме функций пользователя, на листе модуля можно записывать процедуры (подпрограммы). Процедуры имеют стандартное оформление:
Sub ИМЯ_ПРОЦЕДУРЫ(СПИСОК_ПАРАМЕТРОВ)
ТЕЛО_ПРОЦЕДУРЫ
End Sub
Процедура — это совокупность операторов VBA, выполняющих определенные действия. Например, процедура Сигнал использует оператор веер для синтеза звукового сигнала:
Sub Сигнал()
Веер
End Sub
Досрочное завершение процедуры возможно с помощью оператора Exit Sub.
Следует отметить, что кроме выполнения определенных действий процедура, так же, как и функция, может возвращать значения, которые присваиваются параметрам внутри процедуры. В отличие от функций пользователя, процедуры нельзя вызывать из ячеек рабочего листа.
Приведем некоторые общие сведения об организации программ в VBA. Программа VBA состоит из одного или нескольких модулей. Модуль — это лист с текстом программы, вставленный в рабочую книгу. Обычно текст программы VBA начинается с опций, которые управляют описанием переменных, способом сравнения строк и т. д. Затем следует объявление глобальных переменных или констант для данного модуля, т. е. таких переменных, которые используются во всех процедурах модуля. Далее располагается непосредственно текст функций пользователя и процедур, составляющих саму программу.
При написании программ удобно внутрь текста помещать комментарии. Комментарии — это пояснительный текст, который можно записать в любом месте программ. Каждая строка комментариев начинается со знака апострофа. Комментарии игнорируются компилятором, и поэтому никакого влияния на программу не оказывают. Комментарии удобно использовать также при отладке операторов для их временного отключения.
Для более компактной записи программы используется символ двоеточия ":" в качестве разделителя операторов в одной строке.
Пример организации модуля:
Option Base 1
Option Explicit
Const PI As Double = 3.14159 ' PI - глобальная постоянная Dim x As Double ' x - глобальная переменная Function Disc(R As Double) As Double ' Disc вычисляет площадь круга x = 2 Disc = PI * R Л 2
End Function
Function Rec(a, b, c As Double) As Double ' Rec вычисляет площадь треугольника Dim p As Double ' p - локальная переменная p = (a + b + c) /2 Rec = Sqr(p * (p - a) * (p - b) * (p - c))
End Function
Sub Results()
Dim R_l, R_2, a, b, c As Double • R_l, R_2, a, b, с - локальные переменные
R_1 = Disc(2.5) x = x + 2
MsgBox("Площадь круга = " & CStr(R_l) & ",x="& CStr(x)) a = 1: b = 1: c = Sqr(2) R_2 = Rec(a, b, c)
MsgBox ("Площадь треугольника = " & CStr(R_2)) End Sub
Здесь инструкция Option Explicit указывает на необходимость описания типов всех переменных, используемых на данном листе модуля. Функция cstr переводит числовой формат в строковый. (Функция str также переводит числовой формат в строковый, но только для чисел с десятичной точкой.) Перечислим другие функции преобразования типов.
CBool
Преобразует выражение в тип
Boolean
CCur
Преобразует выражение в тип
Currency
CDate
Преобразует выражение в тип
Date
CLng
Преобразует выражение в тип
Long
CInt
Преобразует выражение в тип
Integer
CDbl
Преобразует выражение в тип
Double
CSng
Преобразует выражение в тип
Single
CVar
Преобразует выражение в тип
Variant
Функция sqr вычисляет квадратный корень аргумента. Процедура MsgBox выводит текстовую информацию в окно вывода (подробнее см. раздел 7.11).
Microsoft ExcelMicrosoft ExcelВ результате работы программы появятся сообщения, представленные на рис. 7.5.
Microsoft Excel
Microsoft Excel
Плошааь круга = 19 6349375, х= 4
Рис. 7.5. Результаты работы программы Results
В общем случае при вызове процедур передаваемые параметры не надо заключать в скобки. Приводимый ниже пример показывает основные способы передачи параметров в процедуры.
Sub Assistant(а, b) с = а + b MsgBox CStr(c)
End Sub
Sub MAIN()
Dim x, у As Double Assistant 1, 3 x = 1: у = 3 Assistant x, у Assistant a:=l, b:=3
End Sub
В данном примере при третьем вызове процедуры Assistant передача параметров осуществляется присвоением значений именам параметров с помощью оператора присваивания ":=" (который применяется только по отношению к параметрам процедуры, в отличие от ранее описанного оператора присваивания ”="). При таком способе передачи параметров порядок присваивания значений не важен, т. к. все определяется именами параметров.
Функции пользователя с операторами условного перехода If-Then и If-Then-Else
Рассмотрим пример функции пользователя
Function G(y)
If у <= 0 Then G = (1 + у Л 2) / (1 + у л 4) ~ (1/2) _
Else G = 2 * у + Sin(y) л 2 / (2 + у)
End Function
вычисляющей следующую функцию с двумя условиями:
8 =
2у +
*4 ^0
2 + у
Заметим, что знак подчеркивания "_" в конце строки обозначает, что следующая строка является продолжением предыдущей.
Пусть в ячейку А1 записано число о.2, и вам нужно вычислить в ячейке В1 значение функции G при у = 0,2. Для этого достаточно в ячейку В1 ввести формулу =G(A1). Тот же результат можно получить, если ввести в ячейку В1 следующую формулу
=ЕСЛИ(А1<=0;(1+А1А2)/(1+А1А4)А(1/2);2*A1+SIN(Al)А2/(2+А1))
В функции G использовался условный оператор if-Then-Eise, обеспечивающий передачу управления в программе в зависимости от выполнения условия. Синтаксис:
If УСЛОВИЕ Then ОПЕРАТОР_1 Else ОПЕРАТОР_2
В операторе условия оператор_1 выполняется, если условие истинно, в противном случае выполняется оператор_2.
условие — это выражение логического типа. Результат выражения всегда имеет булевский тип. Выражение может быть простым и сложным. При записи простых условий могут использоваться все возможные операции отношения, указанные в табл. 7.2.
Таблица 7.2. Логические отношения
Операция
Название
Выражение
Результат
=
Равно
А=В
True, если А равно В
о
Не равно
АоВ
True, если А не равно В
>
Больше
А>В
True, если А больше В
<
Меньше
А<В
True, если А меньше В
>=
Больше или равно
А>=В
True, если А больше или равно В
<—
Меньше или равно
А<=В
True, если А меньше или равно В
Сложные условия образуются из простых путем применения логических операций и круглых скобок. Список логических операций приведен в табл. 7.3.
Таблица 7.3. Логические операции
Операция
Название
Выражение
А
В
Результат
Not
Логическое
Not А
False
True
отрицание
True
False
And
Логическое И
A And В
True
True
True
True
False
False
False
True
False
False
False
False
Or
Логическое ИЛИ
A Or В
True
True
True
True
False
True
False
True
True
False
False
False
В условном операторе допустимо использование блока операторов вместо любого из операторов. В этом случае условный оператор имеет вид:
If УСЛОВИЕ Then
БЛ0К_0ПЕРАТ0Р0В_1
Else
БЛОК_ОПЕРАТОРОВ_2
End If
Ветвь Else в условном операторе является необязательной. Таким образом, возможен следующий синтаксис оператора условия:
If УСЛОВИЕ Then ОПЕРАТОР
If УСЛОВИЕ Then
БЛОК_ОПЕРАТОРОВ
End If
Заметим, что в операторе условия после Then можно разместить несколько операторов, для того чтобы все они выполнялись, если условие истинно. В этом случае они должны располагаться в одну строчку и быть разделены двоеточием, например
If А > 10 Then А = А + 1 : В = В + А : С = С + В
В условном операторе может проверяться несколько условий. В этом случае условный оператор имеет вид:
If УСЛ0ВИЕ_1 Then
БЛ0К_0ПЕРАТ0Р0В_1
Elself УСЛ0ВИЕ_2 Then
БЛ0К_0ПЕРАТ0Р0В_2
Elself УСЛОВИЕ 3 Then
Else
БЛОК_ОПЕРАТОРОВ
End If
В данном условном операторе выполняется блок_операторов_1, если истинно условие 1, в противном случае выполняется блок_операторов.
Рассмотрим использование условного оператора и оператора Exit Function на примере функции пользователя, вычисляющей квадратный корень числа.
Function Sq(x)
If х < О Then Exit Function Else Sq = x ^ (1/2) End Function
Функции пользователя с несколькими операторами условного перехода
Рассмотрим пример функции пользователя, вычисляющей значение следующей функции с тремя условиями:
, I <-1,
^1 + Z + I1
l + COS4(z) ,. .
2 ln(l + t ^ +—, t е (-1, 0),
2 +t
(l + z)3/5, z>0.
Функцию z можно вычислить с помощью следующей функции пользователя:
Function z(t)
If t <= -1 Then z = (1+Abs (t) ) / (l+t+tA2) A (1/3)
If t > -1 And t < 0 Then z = 2*Application.Ln(1+tA2) + (1+Cos (t) A4) / (2+t)
If t >= 0 Then z = (l+t)A(3/5)
End Function
Функция Ln не является внутренней функцией VBA, поэтому для ее вызова нужно пользоваться конструкцией Application. Ln.
Существует также другой способ вычисления функции g
Function z(t)
If t <= -1 Then
z = (1 + Abs(t)) / (1 + t + t'2)A(l/3)
Elself t < 0 Then z = 2 * Application. Ln (1 + tA2) + (1 t Cos (t) A4) / (2 + t)
Else
z = (1 + t)A(3/5)
End If
End Function
Пусть в ячейку Al записано число о.2, и вам нужно вычислить в ячейке В1 значение функции г при t = 0.2. Для этого достаточно в ячейку В1 ввести формулу —z (Al). Тот же результат можно получить, если ввести в ячейку В1 следующую формулу:
=ЕСЛИ(Al<=-1;(1+ABS(А1))/(1+А1+А1А2)А(1/3); ЕСЛИ (АКО;
2*LN(1+А1А2)+(1+COS(Al)А4) /(2+А1);(1+А1)А(3/5)))
Функции пользователя, используемые при расчете комиссионных
Функции пользователя с оператором условного перехода If-Then
Рассмотрим пример функции пользователя VBA, вычисляющей комиссионные, начисляемые по следующему правилу:
Если продукции продано не меньше, чем на 1000 000 руб., то комиссионные составляют 2% от стоимости реализованной продукции
Если продукции продано меньше, чем на 1000 000 руб., то комиссионные составляют 1% от стоимости реализованной продукции
Если стаж работы в фирме не меньше 5 лет, то выплачивается доплата в размере 0,5% от стоимости реализованной продукции
Первый способ составления функции пользователя:
Function Премия(стаж, продажа)
If стаж >= 5 And продажа >=1000000 Then Премия=0.025*продажа
If стаж < 5 .And продажа >=1000000 Then Премия=0.02*продажа
If стаж >= 5 And продажа <1000000 Then Премия=0.015*продажа
If стаж < 5 And продажа <1000000 Then Премия=0.01*продажа End Function
Второй способ:
Function Премия(стаж As Integer, продажа As Integer) as Integer Dim sAge, sSale As Integer
If стаж >= 5 Then sAge = 0.005 * продажа If продажа >= 1000000 Then sSale = 0.02 * продажа
Else
sSale = 0.01 * продажа End If Премия = sAge + sSale End Function
Пусть в ячейку Al введена величина стажа работы в фирме, равная 15, а в ячейку В1 — объем реализованной продукции, равный 5000000. Для того чтобы вычислить комиссионные в ячейке С1, достаточно в эту ячейку ввести формулу =премия(А1,-в1). Тот же результат получается при вводе в ячейку С1 следующей формулы:
=ЕСЛИ(И(А1>=5;В1>=1000000);В1*0.025;
ЕСЛИ (И (АК5;В1>=1000000) ;В1*0.02;
ЕСЛИ(И(М>=5;В1<1000000) ;В1*0.015;
ЕСЛИ(И(А1<5;В1<1000000);В1*0.01; )) ) )
или формулы
ЕСЛИ(А1>=5; В1*0.005)+ЕСЛИ(В1>=1000000;В1*0.02; В1*0.01)
Функции пользователя с оператором выбора Select Case
Оператор выбора Select Case удобно использовать, когда в зависимости от значения некоторого выражения, имеющего конечное множество допустимых значений, необходимо выполнить разные действия.
Синтаксис:
Select Case ТЕСТИРУЕМОЕ_ВЫРАЖЕНИЕ Case УСЛОВИЕ_ВЫБОРА_1
БЛОК_ОПЕ РАТОРОВ_1
Case УСЛОВИЕ_ВЫБОРА_п БЛОК_ОПЕ РАТОРОВ_п
Case Else
БЛОК_ОПЕРАТОРОВ
End Select
После каждого оператора case может находиться произвольное количество других операторов, и все они будут выполняться, если условие оператора Case истинно. При использовании одного оператора его можно поместить в одну строку с оператором Case, is является ключевым словом VBA, обозначающим тестируемоЕ-Выражение в операторе Case. В операторе case допустимы составные условия, например
Case 4, 7 То 8, 11 То 12, 15Case 4, 7 То 8, 11 То 12, 15Case 5, 6, 9 То 10, 13, 14, Is >= 16Case 5, 6, 9 То 10, 13, 14, Is >= 16Проверяет, принадлежит ли тестируе- МОЕ—ВЫРАЖЕНИЕ одному из отрезков: от 7 до 8 и от 11 до 12 или равняется одному из значений: 4 и 15
Case 4, 7 То 8, 11 То 12, 15
Case 4, 7 То 8, 11 То 12, 15
Case 5, 6, 9 То 10, 13, 14, Is >= 16
Case 5, 6, 9 То 10, 13, 14, Is >= 16
Проверяет, принадлежит ли тестируе- МОЕ-ВЫРАЖЕНИЕ отрезку от 9 до 10 или равняется одному из значений: 5, 6, 13 и 14, или оно не меньше, чем 16
Рассмотрим пример начисления комиссионных на основе оператора выбора Select Case. В этом примере размер комиссионных зависит только от объема проданной продукции по правилу, приведенному в табл. 7.4.
Таблица 7.4. Правило начисления комиссионных
Объем продаж, тыс. руб.
Комиссионные, %
0-9999
8
10 000-39 999
10
40000 и более
14
Задачу начисления комиссионных решает следующая функция:
Function Премия(продажа) Select Case продажа Case 0 То 9999
Премия = 0.08*продажа Case 10000 То 39999
Премия = 0.1*продажа Case Is >= 40000
Премия = 0.14*продажа End Select
End Function
Пусть в ячейку Al введен объем продаж, равный 150000. Для того чтобы вычислить комиссионные в ячейке В1, достаточно в эту ячейку ввести формулу =премия(А1). Тот же результат получается при вводе в ячейку В1 следующей формулы
=ЕСЛИ (И (А1>=0; АК10000) ; А1*0.08; ЕСЛИ (И (Al>=10000; АК40000) ;
А1*0.1;ЕСЛИ(А1>=40000;А1*0.14)))
Стандартные функции для работы с массивами
Используются следующие функции рабочего листа для работы с массивами:
CountCountACountCountASumSumКоличество чисел в массиве (в русскоязычной версии Excel имеется аналогичная функция СЧЕТ)
Count
CountA
Count
CountA
Sum
Sum
Количество элементов массива (счетз)
Сумма элементов массива (сумм)
SumProduct
Сумма произведений элементов массивов (суммпроизв)
SumSq
Сумма квадратов элементов массива (суммкв)
SumXmY2
Сумма квадратов разностей элементов двух массивов (СУММКВРАЗН)
SumX2m¥2
Сумма разностей квадратов элементов двух массивов (СУММРАЗНКВ)
Приведем пример функции пользователя VBA, вычисляющей коэффициент корреляции (заметим, что коэффициент корреляции можно вычислить и непосредственно функцией коррел).
Function R(x As Variant, у As Variant) As Double Dim n As Integer Dim sx; sy; sxy; sx2; sy2 As Double n = Application.Count(x) sx = Application.Sum(x) sy = Application.Sum(y) sxy = Application.SumProduct(x, y) sx2 = Application.SumSq(x) sy2 = Application.SumSq(y)
R = (n*sxy - sx*sy)/((n*sx2 - sxA2)*(n*sy2 - syA2))A(l/2) End Function
Коэффициент корреляции двух последовательностей Xj, у,, /е[1, л], вычисляется по следующей формуле:
пп п
п^у^^ ^у,
Пусть, например, необходимо вычислить коэффициент корреляции двух последовательностей: 1, 2, 3, 4, 5, б и 5, 8, 11, 12, 18, 21, записанных в диапазоны ячеек АЗ:А8 и ВЗ:В8, соответственно. Результат необходимо поместить в ячейку С1. Для этого достаточно в ячейку С1 ввести формулу =r(A3:A8;B3:B8) . Тот же результат можно получить, если ввести в ячейку С1 следующую формулу
=(СЧЕТ(АЗ:А8)*СУММПРОИЗВ(АЗ:А8;ВЗ:В8)-СУММ(АЗ:А8)*СУММ(ВЗ:В8))/ ((СЧЕТ(АЗ:А8)*СУММКВ(АЗ:А8)-СУММ(АЗ:А8)~2)
*(СЧЕТ(АЗ:А8)*СУММКВ(ВЗ:В8)-СУММ(ВЗ:В8)~2))~(1/2)
Стандартные функции для работы с матрицами
Используются следующие функции рабочего листа для работы с матрицами:
Mmult
Произведение двух матриц
Minverse
Обратная матрица
Transpose
Транспонированная матрица
Mdeterm
Определитель матрицы
Приведем пример функции пользователя VBA, решающей систему линейных уравнений АХ = В, где А — матрица коэффициентов, В — столбец свободных членов, X — столбец неизвестных.
Function Реш_лин_сис(A As Variant, В As Variant) As Variant
Реш_лин_сис = Application.MMult(Application.Mlnverse(A) , B)
End Function
Рассмотрим пример функции пользователя VBA, вычисляющей квадратичную форму г = Х^АХ, где А — матрица коэффициентов, X — столбец неизвестных:
Function Квадр_форма(A As Variant, Z As Variant) As Variant Квадр_форма = Application.MMult _
(Application.MMult(Application.Transpose(Z) ,A) , Z)
End Function
Объекты, свойства и методы VBA
Одним из основных понятий VBA является объект. Объект — это то, чем вы управляете с помощью программы на языке VBA, например, диалог, рабочий лист, диапазон ячеек. Каждый объект обладает некоторыми характеристиками или свойствами. Например, диалог может быть видимым или неви-
димым в данный момент на экране. Можно узнать текущее состояние диалога с помощью свойства visible. Другим примером свойства объекта может быть шрифт, используемый для отображения информации в ячейке (объекте) рабочего листа. Изменяя свойства, вы можете менять характеристики объекта.
Объект содержит также список методов, которые к нему применимы. Методы — это то, что вы можете делать с объектом. Например, показать диалог на экране или убрать его можно с помощью методов show и Hide, соответственно.
Таким образом, объект — это программный элемент, который имеет свое отображение на экране, содержит некоторые переменные, определяющие его свойства, и некоторые методы для управления объектом. Объект является "кирпичиком" построения программ VBA. В VBA имеется много встроенных объектов, например
Range
Диапазон ячеек (может включать только одну ячейку)
Cells
Ячейка
Sheet
Лист
Worksheet
Рабочий лист
DialogSheet
Диалоговое окно
Большинство объектов принадлежит к группе подобных объектов. Эти группы называются наборами. Например, все рабочие листы рабочей книги образуют набор, называемый worksheets. Наборы используются одним из двух способов: либо какое-либо действие совершается над всеми объектами набора, например, удалить, либо со ссылкой на набор выбирается конкретный объект для работы с ним. Второй способ реализован в следующей конструкции:
Worksheets("Первый”)
выбирающей рабочий лист первый из рабочей книги. Другими примерами
наборов являются:
SheetsЛисты
DialogsheetsDialogsheetsDrawingObjectsDrawingObjectsДиалоговые окна
Dialogsheets
Dialogsheets
DrawingObjects
DrawingObjects
Графические объекты
Изменяя свойства, можно изменять характеристики объекта или набора объектов. Установка значений свойств — это один из способов управления объектами. Для установки свойства необходимо ввести имя объекта, затем
поставить точку и за ней — имя свойства. Далее должен следовать знак равенства и значение свойства. Синтаксис установки значения свойства объекта выглядит следующим образом:
Объект.Свойство = Выражение
В приведенном ниже примере для свойства value диапазона ячеек началь- ные_ данные устанавливается значение 0,1 (т. е. в ячейках этого диапазона будет записано число 0.1):
Range("Начальные_данные").Value = 0.1
В следующем примере в ячейку А2 вставляется формула путем изменения свойства Formula (формула):
Range("А2").Formula = "=СУММ(Al:Cl)"
+
Некоторые свойства являются неизменяемыми, т. е. допустимыми только для чтения. Имеется в виду, что значение свойства можно узнать, но нельзя изменить. Например, для диапазона, состоящего из одной ячейки, свойства row (строка) и Column (столбец) являются неизменяемыми. Другими словами, можно узнать, в какой строке и в каком столбце находится ячейка, но изменить ее положение путем изменения этих свойств нельзя. Синтаксис чтения свойств объекта выглядит следующим образом:
Переменная = Объект.Свойство
В следующем примере переменной процентная_ставка присваивается значение из ячейки А1 текущего рабочего листа:
Процентная ставка = Range("Al").Value
или другим способом:
Процентная_ставка = Cells(1,1).Value
Кроме свойств, как уже отмечалось выше, у объектов есть ряд методов, т. е. команд, применяемых к объекту. Например, у объекта — диапазон ячеек — имеется метод clear, позволяющий очистить содержимое диапазона. Приводимый ниже пример показывает, как можно очистить диапазон началь- ныеданные:
Range("Начальные_данные").Clear
А в примере
Range("A10:B12").Select
выбирается диапазон ячеек A10:B12. Таким образом, синтаксис вызова объекта имеет следующий вид:
Объект.Метод
В Excel имеется много объектов, причем некоторые из них содержат другие объекты. Например, рабочая книга содержит рабочие листы, рабочий лист содержит диапазон ячеек и т. д. Объектом самого высокого уровня является Application (приложение). Если вы изменяете его свойства или вызываете его методы, то результат применяется к текущей работе Excel. Например, можно завершить работу с Excel, применив метод Quit (выход) к объекту Application:
Application.Quit
Как было отмечено, точка после имени объекта указывает на то, что далее следует имя свойства или метода. Но после точки можно указать и имя объекта для перехода от одного объекта к другому. Например, следующее выражение очищает вторую строку рабочего листа май в рабочей книге Отчет:
Application.Workbooks("Отчет").Worksheets("Май").Rows(2).Delete
Если вспомнить, что строка содержит отдельные ячейки, свойства которых тоже можно устанавливать, то выражение становится еще длиннее:
Application.WorkBooks("Отчет").Sheets("Май")._
Rows(2).Cells(1).Value = "Да"
Таким образом, ссылки на объекты могут быть слишком громоздкими. Если данный объект часто используется в программе, то разумно создать объектную переменную с помощью команды Set. Например, предыдущий пример можно записать в следующем виде:
Dim R As Object
Set R = Application.WorkBooks("Отчет"). _
Sheets("Май").Rows(2).Cells(1)
R.Value = "Да"
Приводимые выше примеры можно записать значительно короче:
Можно не писать имя объекта Application, т. к. это подразумевается по умолчанию
При работе с подобъектом уже активизированного объекта нет необходимости указывать содержащий его объект
VBA использует некоторые свойства и методы, которые возвращают объект, к которому они относятся
Использование последнего обстоятельства позволяет быстро указывать нужный объект. Так, в следующем примере устанавливается значение активной ячейки
ActiveCell.Value = "Да"
ActiveCell (активная ячейка), ActiveSheet (активный лист), ActiveWorkBook (активная рабочая книга) и Selection (выбор — указывает на выбранный объект) являются примерами свойств, возвращающих объект.
Можно использовать диалоговое окно Просмотр объектов (Object Browser), для того чтобы узнать, какие свойства и методы связаны с конкретным объектом. Это особенно удобно для методов, имеющих несколько аргументов, поскольку в модуль будут вставлены имена аргументов. Для того чтобы вызвать окно диалога Просмотр объектов (Object Browser), необходимо при активном листе модуля нажать клавишу <F2>. В открывшемся окне в поле Библиотеки/Книги (Libraries/ Workbooks) в раскрывающемся списке выберите Excel, а в списке Объекты/Модули (Objects/Modules) — имя объекта, справку о котором ищете, например Worksheets (рис. 7.6).
Рис. 7.6.Диалоговое окно Просмотр объектовРис. 7.6.Диалоговое окно Просмотр объектов
Рис. 7.6.
Диалоговое окно Просмотр объектов
Рис. 7.6.
Диалоговое окно Просмотр объектов
В поле Методы/Свойства (Methods/Properties) выводится список методов и свойств выбранного объекта. Нажав кнопку ? (Help) можно получить краткую справочную информацию о данном методе, а нажав кнопку Вставить (Paste), можно вставить данный метод в лист модуля. Например, для метода Сору в лист модуля вставляется следующий фрагмент:
Copy(Before:=, After:=)
Операторы цикла
Оператор цикла For-Next
Для многократного выполнения одного оператора или их группы служит оператор цикла For-Next.
Синтаксис:
For СЧЕТЧИК = НАЧАЛЬНОЕЗНАЧЕНИЕ То КОНЕЧНОЕЗНАЧЕНИЕ Step ШАГ
БЛОК_ОПЕ РАТОРОВ
[Exit For]
БЛОК_ОПЕРАТОРОВ
Next СЧЕТЧИК
Цикл For-Next обеспечивает многократное выполнение блока операторов при последовательном изменении счетчика от начального до конечного значения с указанным шагом изменения. Если step шаг в конструкции отсутствует, то по умолчанию считается, что шаг равен 1. По оператору Exit For можно выйти из оператора цикла до того, как счетчик достигнет последнего значения.
Рассмотрим использование оператора цикла For-Next на примере построения функции пользователя, вычисляющей разность между текущим объемом вклада и размером ссуды при постоянной годовой процентной ставке и неравномерных платежах, т. е. функции пользователя, вычисляемой по следующей формуле:
^ (1 + ^dUVdW)/365 ’
где Р(1) и J(l) — размер и дата выдачи ссуды, причем Д(1) берется со знаком минус, P\h, d(j) — размер и датау-й выплаты, п - 1 — число выплат, / — годовая процентная ставка.
Option Explicit
Option Base 1
Function Доход(процент As Double, платеж As Variant, год As Variant) As Double Dim i, j, n As Integer, s As Double n = платеж.Rows.Count s = 0 For i = 1 To n s = s + платеж(i)/ _
(1 + процент)Л((год(i) - год(1))/365) Next i Доход = s
End Function
Решим с помощью функции Доход следующую задачу. Предположим, что 11.01.97 у вас берут в долг 10 000 руб. и предлагают вернуть: 20.12.97 — 2 000 руб., 18.10.98 — 4 000 руб., 12.04.99 — 7 000 руб. Имеет ли смысл эта сделка при годовой ставке 10%?
Для решения этой задачи введем данные, как показано на рис. 7.7.
Рис. 7.7. Решение задачи о неравномерных платежахРис. 7.7. Решение задачи о неравномерных платежах
Рис. 7.7. Решение задачи о неравномерных платежах
Рис. 7.7. Решение задачи о неравномерных платежах
Ссуда введена в ячейке В2 со знаком минус, т. к. эти деньги у вас забирают. В ячейку В8, где вычисляется разность между текущим объемом вклада и размером ссуды, введем формулу -Доход (В7;В2 :В5,- D2: D5). В данном случае найденное значение равно 857.91. Так как результат положителен, данная сделка выгодна.
Отметим, что метод rows возвращает строки диапазона платеж, а свойство Count считает число элементов объекта. Таким образом, платеж.rows.Count определяет число строк в диапазоне платеж. Если бы вы хотели найти число
столбцов диапазона платеж, то вам нужно было бы использовать конструкцию платеж.Columns.Count.
Рассмотрим пример использования оператора Exit For. Функция Тест определяет номер первого вхождения элемента b в вектор а. Если среди компонент вектора а нет элементов, равных Ь, функция тест принимает значение, равное -1.
Function Тест(a As Variant, b As Variant) As Integer Dim i, n As Integer, t As Boolean
n = a.Rows.Count*a.Columns.Count
t = False
For i = 1 To n
If a(i) = b Then
Тест = i
t = True Exit For End If Next i
If t = False Then Тест = -1 End Function
Приведем еще один пример использования оператора цикла. Предположим, нужно вычислить
где х — вектор из п компонент, b и с — матрицы размерности тхт, причем п = 3, т = 2 и
1,6 =2.1,6 =2.2222П5ГП5Г1 14 51 14 5
1,6 =
2.
1,6 =
2.
2
2
2
2
П
5Г
П
5Г
1 1
4 5
1 1
4 5
Введем в диапазон А1:АЗ компоненты вектора х, а в диапазоны В1:С2 и D1:E2 компоненты матриц b и с, соответственно. Найдем значение 5 тремя способами.
Первый способ. На листе модуля вводится следующая функция пользователя:
Option Base 1
Function Q(x, b, c As Variant) As Double
Dim si, s2, s3 As Double, i, j, n, m As Integer n = x.Rows.Count m = b.Rows.Count si = 0 For i = 1 To n si = si + x(i) Next i s2 = 0 For i = 1 To m For j = 1 To m s2 = s2 + b(i, j) * c(i, j) Next j Next i s3 = 0 For i = 1 To n s3 = s3 + x(i) Л 2 Next i Q = (2 * si + s2 Л 2) / (1 + s3) End Function
В ячейку A8 введем формулу:
=Q(Al:АЗ;В1:С2;DI:Е2)
Второй способ. В ячейку Аб введем формулу
=(2*СУММ(А1:АЗ)+СУММПР0ИЗВ(Bl:С2;DI:Е2)Л2)/(1+СУММКВ(А1:АЗ))
ИЛИ
{=(2*СУММ(А1:АЗ)+СУММ(В1:C2*D1:E2)л2)/(1+СУММ(А1:АЗЛ2))}
Третий способ. На лист модуля вводится функция пользователя:
Function S(x, b, с As Variant) As Double Dim si, s2, s3 As Double
si = Application.Sum(x)
s2 = Application.SumProduct(b, c)
s3 = Application.SumSq(x)
S = (2 * si + s2 л 2) / (1 + S3) End Function
В ячейку A7 введем формулу:
=S(Al:АЗ;Bl:02;DI:Е2)
Оператор цикла For-Each-Next
Для перебора объектов из группы подобных объектов, например, ячеек из диапазона или элементов массива, удобно использовать оператор цикла For-Each-Next.
Синтаксис:
For Each Элемент In Группа БЛОК_ОПЕРАТОРОВ [Exit For] БЛОК_ОПЕРАТОРОВ
Next Элемент
Например, приводимая ниже процедура Знак заменяет все положительные числа диапазона ячеек А1:В2 знаком "+", все отрицательные числа — знаком "-", а нули оставляет без изменения:
Option Explicit
Sub Знак()
Dim с As Object
For Each c In Worksheets("Лист1").Range("Al:B2") If IsNumeric(c.Value) Then
If c.Value > 0 Then c.Value = "+"
End If
If IsNumeric(c.Value) Then
If c.Value < 0 Then c.Value = "-"
End If
If IsNumeric(c.Value) Then
If c.Value = 0 Then c.Value = 0
End If
Next с
End Sub
В процедуре Знак использовалась функция isNumeric (выражение), которая возвращает True, если выражение может быть описано как числовое, и False — в противном случае.
Следующая процедура Цвет в зависимости от содержимого ячейки выделенной области, которая возвращается методом Selection, изменяет цвет ее фона. Кроме того, если содержимое ячейки положительно, то изменяется цвет, размер и тип шрифта.
Sub Цвет()
Dim a As Object
For Each a In Selection
If IsNumeric(a.Value) Then If a.Value > 0 Then a.Interior.ColorIndex = 8 a.Font.Bold = True a.Font.Colorindex = 5 a.Font.Size = 20 End If End If If IsNumeric(a.Value) Then
If a.Value < 0 Then a.Interior.ColorIndex = 4 End If If IsNumeric(a.Value) Then
If a.Value = 0 Then a.Interior.ColorIndex = 6 End If
Next a End Sub
В данной процедуре Font — шрифт диапазона ячеек — является объектом. Этот объект имеет следующие свойства:
Size
Размер шрифта, например
Worksheets("Лист!").Range("В2").Font.Size = 12
Bold
Жирный шрифт
Italic
Курсивный шрифт
Colorindex
Цвет символов. Следующий пример задает зеленый цвет:
Worksheets("Лист1").Range("В2").Font.Colorlndex=4
Цвет в VBA задается целым числом от 1 до 56. В табл. 7.5 приведены некоторые из них
Underline
Подчеркнутый шрифт. Данное свойство может принимать одно из следующих значений:
xlNone — отсутствие подчеркивания
xlSingle или xlSingleAccounting — одинарное подчеркивание
xlDouble или xlDoubleAccounting — двойное подчеркивание
Таблица 7.5. Таблица кодов цвета
Число
Цвет
1
Черный
2
Белый
3
Красный
4
Зеленый
5
Синий
6
Желтый
7
Фиолетовый
8
Голубой
В приведенной выше программе interior также является объектом, характеризующим фон указанного диапазона и имеющим следующее свойство:
Colorindex
Цвет. Например, зеленый цвет можно задать ячейке следующим образом:
Range("В2").Interior.Colorindex = 4
Отметим, что диапазон ячеек обладает следующими свойствами:
NumberFormat
Числовой формат. Следующий пример задает числовой формат с двумя знаками после десятичной точки:
Range("B2"). NumberFormat = "0.00"
WrapText
Многострочный текст, например
Range("В2").Value = "Многострочный текст"
Range("В2").WrapText = True
Оператор цикла While-Wend
Оператор цикла whiie-wend используется для организации цикла с неизвестным заранее числом шагов.
Синтаксис:
While УСЛОВИЕ
БЛОК_ОПЕРАТОРОВ Wend
Цикл whiie-wend обеспечивает многократное выполнение блока операторов, пока условие принимает значение True.
Приведенная ниже функция доход 2 вычисляет то же значение, что и функция Доход, но с использованием цикла whiie-wend.
Option Base 1
Function Доход_2(процент As Double, платеж As Variant, _ год As Variant) As Double
Dim i, j, n As Integer, s As Double n = платеж.Rows.Count s = 0 i = 1 While i <= n
s = з+платеж(i)/(1+процент)л((год(i)-год(1))/365) i = i + 1
Wend
Доход_2 = s End Function
Операторы цикла Do-Loop
В VBA для организации циклов с неизвестным заранее числом шагов используются И другие операторы цикла: Do While-Loop, Do Until-Loop, Do-Loop While И Do-Loop Until.
Синтаксис перечисленных операторов:
Do While УСЛОВИЕ
БЛОК ОПЕРАТОРОВ
[Exit Do]
БЛОК_ОПЕРАТОРОВ
Loop
Do Until УСЛОВИЕ
БЛОК_ОПЕРАТОРОВ
[Exit Do]
БЛОК_ОПЕРАТОРОВ
Loop
Do
БЛОК_ОПЕРАТОРОВ [Exit Do]
БЛОК_ОПЕРАТОРОВ Loop While УСЛОВИЕ
Do
БЛОК_ОПЕРАТОРОВ [Exit Do]
БЛОК_ОПЕРАТОРОВ Loop Until УСЛОВИЕ
Оператор Do while-Loop обеспечивает многократное выполнение блока операторов до тех пор, пока условие соблюдается, а оператор Do Untii- Loop — пока УСЛОВИЕ не соблюдается. Операторы Do-Loop While И Do- Loop Until отличаются от перечисленных выше двух операторов тем, что сначала блок операторов выполняется по крайней мере один раз, а потом проверяется условие. Оператор Exit Do обеспечивает досрочный выход из оператора цикла.
Приведем пример использования цикла Do-Loop while при нахождении корня уравнения Дх) = 0 методом Ньютона. Для нахождения приближенного значения корня уравнения методом Ньютона необходимо задать начальное приближение .хь, а затем определить последующие приближения к корню методом итераций по формуле
х„ = *«-1 -fix^O/f1 (Хл-1), где л = 1, 2, ...,
Процесс останавливается при выполнении неравенства | хп — х„_[ | < е, где е — точность определения корня.
В следующей программе методом Ньютона решается уравнение х2 = 2. За начальное приближение к корню взято число 3, а корень вычисляется с точностью до 0,00001. Найденное значение корня с помощью метода ActiveCeii выводится в активную ячейку.
Option Explicit Function F(x As Double) As Double F = x л 2 - 2
End Function
Function DF(x As Double) As Double DF = 2 * x
End Function
Sub MN ()
Const Eps = 0.00001 Dim xO, x As Double x = 3 Do xO = x x = x - F(x) / DF(x) Loop While Abs(x - xO) > Eps ActiveCell.Value = x End Sub
Примером использования цикла Do-Loop Until может служить следующая программа нахождения корня уравнения Дх) = 0 методом деления отрезка пополам. В этой программе находится корень уравнения х2 = 2 с точностью до е = 0,00001. За отрезок начальной локализации корня берется отрезок [0, 2].
Function F(x)
F = х " 2 - 2
End Function
Sub BM ()
Dim c, FC As Double
Dim a, b, Eps, BM As Double
a = 0: b = 2: Eps = 0.00001
If F(a) * F(b) >= 0 Then
MsgBox "Функция не меняет знак " & _
"на концах отрезка локализации корня." Exit Sub End If Do
c = (a + b) /2 FC = F(c) * F(a) If FC < 0 Then b = c Else a = c Loop Until b - a < Eps BM = c ActiveCell.Offset(rowOffset:=-l, columnOffset:=0).Value = _ "Корень" ActiveCell.Value = BM ActiveCell.Offset(rowOffset:=-l, columnOffset:=1).Value = _ "Значение функции" ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Value = FC End Sub
В процедуре вм использовался метод offset. Метод Offset возвращает диапазон, сдвинутый на указанное число строк и столбцов по отношению к данному диапазону.
Синтаксис:
Offset(rowOffset, columnoffset)
Аргументы:
rowOffset Число строк, на которое будет сдвигаться диапазон columnoffset Число столбцов, на которое будет сдвигаться диапазон
Использование метода offset позволяет в процедуре вм в активную ячейку вводить найденное приближенное значение корня, а в ячейку, находящуюся справа от активной — соответствующее значение функции. В ячейки, расположенные над ЭТИМИ двумя, ВВОДЯТСЯ текстовые строчки Корень И Значение функции.
Рассмотрим еще один пример применения цикла Do-Loop Until — для расчета корня уравнения F(x) = 0 методом Ньютона с выводом на рабочем листе промежуточных результатов. Данную задачу решает следующая программа:
Function F(x)
Е = хЛ3-3*х+1
End Function
Function DF(x)
DF=3*xA2-3 End Function
Sub MN()
eps = Cells(2, 4).Value Range("АЗ:C1000").Clear x = Cells(2, 1).Value Cells(2, 2).Value = F(x) Cells(2, 3).Value = DF(x) i = 3 Do
xO = x
x = x - F(x) / DF(x) Cells(i, 1).Value = x Cells(i, 2).Value = F(x) Cells(i, 3).Value = DF(x) i = i + 1 Loop Until Abs(x - xO) <= eps i = i - 1 Set Reg = Range(Cells(i, 1), Cells (i, 2)) Reg.Font.Size = 14 Reg.Interior.ColorIndex = 6 End Sub
Функция df вычисляет значение производной функции f. Точность вычислений введена в ячейку D2, а начальное приближение — в ячейку А2 рабочего листа. Найденные значения (корень и значение функции) выводятся увеличенным шрифтом, причем фон ячеек окрашен в желтый цвет.
Панель инструментов Элементы управления. Процедуры перелистывания рабочих листов
В данном разделе приведены примеры создания автоматизированного оглавления рабочей книги с помощью объектов панели инструментов Элементы управления (Forms), которая состоит из следующих кнопок:
Надпись
Поле
Группа
Кнопка
Флажок
Переключатель
Раскрывающийся список
Список
Поле со списком
Поле с раскрывающимся списком
Полоса прокрутки
Счетчик
Свойства элементов управления
Текст программы
Сетка привязки
Запуск окна диалога
пятью рабочими листами спятью рабочими листами сДавайте попробуем создать рабочую книгу с
пятью рабочими листами с
пятью рабочими листами с
именами Оглавление, Май,Июнь, Июль И Вспомогательный.
Первый пример
На лист модуля введите следующие три процедуры:
Sub Май()
Sheets("Май").Activate
End Sub
Sub Июнь()
Sheets("Июнь").Activate
End Sub
Sub Июль() Sheets("Июль").Activate
End Sub
В этих процедурах использовался метод Activate. Это метод активизирует объект, в данном случае — рабочий лист.
С помощью кнопкиС помощью кнопкисоздайте на ячейках С2, D3 и Е4 рабочего листасоздайте на ячейках С2, D3 и Е4 рабочего листаОглавление Три КНОПКИ (рИС. 7.8).Оглавление Три КНОПКИ (рИС. 7.8).Рис. 7.8. Примеры автоматизированных оглавленийРис. 7.8. Примеры автоматизированных оглавлений
С помощью кнопки
С помощью кнопки
создайте на ячейках С2, D3 и Е4 рабочего листа
создайте на ячейках С2, D3 и Е4 рабочего листа
Оглавление Три КНОПКИ (рИС. 7.8).
Оглавление Три КНОПКИ (рИС. 7.8).
Рис. 7.8. Примеры автоматизированных оглавлений
Рис. 7.8. Примеры автоматизированных оглавлений
По умолчанию создаваемые КНОПКИ имеют имена Кнопка 1, Кнопка 2 И Кнопка з, которые выводятся в поле имен и на поверхности кнопок. Щелкнув правой кнопкой мыши кнопку с именем Кнопка 1 и установив на ней указатель мыши, исправьте надпись с Кнопка 1 на май. Эта операция не изменяет имени кнопки (оно будет прежним — Кнопка 1, и именно оно будет выводиться в поле имен). Щелкнув правой кнопкой мыши кнопку май, раскройте контекстное меню, в котором выберите команду Назначить макрос (Assign Macro) (рис. 7.9).
Рис. 7.9.Выбор команды Назначить макрос с помощью контекстного менюРис. 7.9.Выбор команды Назначить макрос с помощью контекстного меню
Рис. 7.9.
Выбор команды Назначить макрос с помощью контекстного меню
Рис. 7.9.
Выбор команды Назначить макрос с помощью контекстного меню
В поле ввода Имя макроса/ссылка (Macro Name/Reference) открывшегося диалогового окна Назначить макрос объекту (Assign Macro) введите май (рис. 7.10).
Рис. 7.10.Диалоговое окно Назначить макрос объектуРис. 7.10.Диалоговое окно Назначить макрос объекту
Рис. 7.10.
Диалоговое окно Назначить макрос объекту
Рис. 7.10.
Диалоговое окно Назначить макрос объекту
Нажмите кнопку ОК. Теперь кнопке май назначена процедура май, активизирующая рабочий лист с именем май, т. е. нажатие этой кнопки будет приводить к переходу на лист с именем май. Аналогично назначьте кнопкам июнь и июль процедуры июнь и июль, соответственно.
Второй пример
На рабочем листе вспомогательный в ячейки Al, А2 и АЗ введите:
Май
Июнь
Июль
С помощью команды Вставка, Имя, Присвоить (Insert, Name, Define) присвойте диапазону А1:АЗ имя Список, ячейке Аб — имя номер, а ячейке А7 — ИМЯ Лист (рис. 7.11).
В ячейку А7 введите формулу
=ИНДЕКС(Список;Номер;1)
Рис. 7.11. Данные на рабочем листе Вспомогательный
В общем случае синтаксис функции индекс (index) имеет следующий вид:
ИНДЕКС(массив; номер_строки; номер_столбца)
Функция индекс возвращает значение ячейки диапазона массив с заданными номерами строки и столбца. Таким образом, при введении в ячейку Номер целого числа от I до 3 функция индекс будет возвращать в ячейку лист содержимое соответствующей ячейки диапазона Список. Например, если в ячейку номер ввести число з, то в ячейке лист будем иметь июль (рис. 7.11).
На листе модуля введите следующую процедуру
Sub АА_1()
Dim s As String
s = Range("Лист").Value Sheets(s).Select
End Sub
Процедура aa_i считывает значение из ячейки лист в строковую переменную s и активизирует лист с именем, записанным в эту переменную.
С помощью кнопки Ж создайте на ячейках D6 и Е6 рабочего листа оглавление раскрывающийся список (рис. 7.8). Назначьте этому раскрывающемуся списку процедуру аа_1. Теперь, щелкнув список правой кнопкой мыши, выберите в раскрывшемся контекстном меню команду Формат объекта (Format Object). Откроется диалоговое окно Форматирование объекта (Format Object). Это окно можно открыть и другим способом: щелкнуть правой кнопки мыши раскрывающийся список и нажать кнопку J? .
В диалоговом окне Форматирование объекта (Format Object) на вкладке Элемент управления (Control) в поле Форматировать список по диапазону (Input Range) введите список, в поле Помещать результат в ячейку (Cell Link) — номер, а в поле Количество строк списка (Lines) — з, как показано на рис. 7.12.
Рис. 7.12. Диалоговое окно Форматирование объекта для раскрывающегося списка
После нажатия кнопки ОК раскрывающийся список будет выводить значения, записанные в диапазон список, а номер выбранного элемента из этого списка — в ячейку номер. Таким образом будет обеспечиваться переход на страницу с именем, выбранным в раскрывающемся списке.
Третий пример
С помощью кнопки И создайте список на ячейках DlO:El2 рабочего листа оглавление (рис. 7.8). Назначьте этому списку процедуру аа 1. Кроме того, щелкнув список правой кнопкой мыши, выберите в раскрывшемся контекстном меню команду Формат объекта (Format Object). В открывшемся диалоговом окне Форматирование объекта (Format Object) в поле Форматировать список по диапазону (Input Range) введите список, в поле Помещать результат в ячейку (Cell Link) — номер. Установите переключатель в положение Только одного значения (рис. 7.13) и нажмите кнопку ОК.
Список выведет значения, записанные в диапазон список, а номер выбранного элемента из этого списка — в ячейку номер. Таким образом, данная конструкция будет обеспечивать переход на страницу с именем, выбранным в списке.
Четвертый пример
Присвойте ячейке С6 рабочего листа Вспомогательный ИМЯ Первый лист. С помощью кнопки Qj создайте на диапазоне 14:16 рабочего листа оглавление
кнопку, на поверхности которой напишите ок (рис. 7.8).
Рис. 7.13. Диалоговое окно Форматирование объекта для списка
С помощью кнопки у | создайте счетчик на диапазоне G4:G6 (рис. 7.8). Ячейке Н5 рабочего листа Оглавление присвойте имя первый и введите в нее формулу
-ИНДЕКС(Список;Первыйлист;1)
На листе модуля введите процедуру
Sub АА_2()
Dim s As String
з = Range("Первый").Value Sheets(s).Activate
Fnd Sub
Назначьте эту процедуру созданной вами кнопке ок. Щелкнув счетчик правой кнопкой мыши, выберите в раскрывшемся контекстном меню команду Формат объекта (Format Object). В открывшемся диалоговом окне Форматирование объекта (Format Object) в поле Начальное значение (Value) введите 2, в поле Минимальное значение (Min) — 1, в поле Максимальное значение (Мах) — 3, в поле Шаг изменения (Step Value) — 1 и в поле Помещать результат в ячейку (Input Range) — первый лист (рис. 7.14).
Таким образом, счетчик будет изменять значения ячейки первыйлист в диапазоне от 1 до 3, функция индекс — выводить соответствующее значение диапазона Список в ячейку первый, а процедура аа_2 — по щелчку на кнопке ок осуществлять переход на лист с именем, введенным в ячейку первый.
Рис. 7.14. Диалоговое окно Форматирование объекта для счетчика
Пятый пример
Присвойте ячейке С7 рабочего листа вспомогательный имя второй лист. С помощью кнопки о] создайте на ячейках G15:Hl5 рабочего листа оглавление кнопку, на поверхности которой напишите перейти на лист. С помощью кнопки Ц| создайте полосу прокрутки на ячейках Gll:Hll (рис. 7.8). Ячейке G13 рабочего листа Оглавление присвойте имя Второй и введите в нее формулу
=ИНДЕКС(Список;Второй_лист;1)
На листе модуля введите процедуру
Sub АА_3()
Sheets(Range("Второй").Value).Activate
End Sub
Назначьте эту процедуру кнопке перейти на лист. Щелкнув правой кнопкой мыши полосу прокрутки, выберите в раскрывшемся контекстном меню команду Формат объекта (Object Format). Заполните открывшееся диалоговое окно Форматирование объекта (Format Object) так же, как в предыдущем примере, только в поле Помещать результат в ячейку (Input Range) введите Второй_лист.
Шестой пример
С помощью кнопки Q| создайте на ячейках С 13:05 рабочего листа оглавление кнопку, на поверхности которой напишите перейти. С помощью кнопки [ 1 создайте на диапазоне В 12:06 группу, а с помощью кнопки <• [ на ячейках В13, В14 и В15 — три положения переключателя (рис. 7.8). На листе мо
дуля введите процедуру
Sub АА_4()
Dim s As String
Set NS = Sheets("Оглавление")
If NS.OptionButtons(1).Value=xlOnThens="Май"
If NS.OptionButtons(2).Value=xlOnThens="Июнь"
If NS.OptionButtons(3).Value=xlOnThens="Июль"
Sheets(s).Select
End Sub
Назначьте эту процедуру кнопке перейти.
Приведем необходимые пояснения к процедуре аа_4.
OptionButtons(номер)Свойство Value объекта OptionButtonsOptionButtons(номер)Свойство Value объекта OptionButtonsПостоянная хЮп, равная 1Постоянная хЮп, равная 1Объект управления— кнопка переключателя с указанным номером
OptionButtons(номер)
Свойство Value объекта OptionButtons
OptionButtons(номер)
Свойство Value объекта OptionButtons
Постоянная хЮп, равная 1
Постоянная хЮп, равная 1
Описывает положение переключателя: выбрана данная кнопка или нет
Используется, чтобы описать ситуацию, когда кнопка переключателя выбрана
По мере создания элементов управления (полей, списков, переключателей и т. д.) Excel по умолчанию присваивает им общие порядковые номера, которые входят в имена, отображаемые в поле имени, например кнопка 1, полоса прокр. 2, перекл. з. Кроме того, внутри каждой группы однотипных элементов управления (например, группы переключателей) эти элементы также имеют порядковые номера. Например, если группа переключателей состоит из трех переключателей с именами перекл. 13, перекл. 14 и перекл. 15, то номера этих переключателей внутри группы будут 1, 2 и 3, соответственно. Вызвать объект управления можно как по порядковому номеру в группе однотипных элементов, так и по имени, т. е. допустима, например, следующая запись:
If NS.OptionButtons("Перекл.If NS.OptionButtons("Перекл. If NS.OptionButtons("Перекл.If NS.OptionButtons("Перекл.If NS.OptionButtons("Перекл. If NS.OptionButtons("Перекл.13").Value = xlOn Then s14").Value = xlOn Then s15").Value = xlOn Then s13").Value = xlOn Then s14").Value = xlOn Then s15").Value = xlOn Then s"Май""Июнь""Июль""Май""Июнь""Июль"Внося изменения в поле имен, можно изменить имена объектов управления. Таким образом, процедура аа_4, в зависимости от включенного переключателя, присваивает переменной s одно из возможных значений май, июнь или июль, а кнопка перейти активизирует лист с соответствующим именем.
If NS.OptionButtons("Перекл.
If NS.OptionButtons("Перекл. If NS.OptionButtons("Перекл.
If NS.OptionButtons("Перекл.
If NS.OptionButtons("Перекл. If NS.OptionButtons("Перекл.
13").Value = xlOn Then s
14").Value = xlOn Then s
15").Value = xlOn Then s
13").Value = xlOn Then s
14").Value = xlOn Then s
15").Value = xlOn Then s
"Май"
"Июнь"
"Июль"
"Май"
"Июнь"
"Июль"
Создание сценариев
Рассмотрим пример процедуры пользователя для анализа сценариев. Создадим процедуры Вариант_1, Вариант_2 и Вариант_з. При запуске этих процедур в ячейки будут введены значения, соответствующие этим вариантам. На рис. 7.15 приведен пример рабочей таблицы, обрабатывающей простую производственную модель с пятью переменными:
Стоимость_услуг
Стоимость_материала_1
Стоимость_материала_2
Количество_материала_1
Ячейка В1Ячейка В2Ячейка ВЗЯчейка В5Ячейка ВбЯчейка В1Ячейка В2Ячейка ВЗЯчейка В5Ячейка Вб2234_52234_5678 .810'11 '12й| <678 .810'11 '12й| <А|ЕсСтоимость услуг31Вариант 1Стоимость материала 159Вариант 2Стоимость материала 227Вариант 3 iНорма времени (часы)12Количество материала 13Количество материала 24Себестоимость657Товарная наценка5%Отпускная цена690Прибыль на одно изделие33Количество изделий36Суммарная прибыль1183► | >& сценарии / j Ч |А|ЕсСтоимость услуг31Вариант 1Стоимость материала 159Вариант 2Стоимость материала 227Вариант 3 iНорма времени (часы)12Количество материала 13Количество материала 24Себестоимость657Товарная наценка5%Отпускная цена690Прибыль на одно изделие33Количество изделий36Суммарная прибыль1183► | >& сценарии / j Ч |Рис. 7.15. Запрограммированные сценарииРис. 7.15. Запрограммированные сценарииКоличествс_материала_2
Ячейка В1
Ячейка В2
Ячейка ВЗ
Ячейка В5
Ячейка Вб
Ячейка В1
Ячейка В2
Ячейка ВЗ
Ячейка В5
Ячейка Вб
2
2
3
4_
5
2
2
3
4_
5
6
7
8 .
8
10'
11 '
12
й| <
6
7
8 .
8
10'
11 '
12
й| <
А|
Е
с
Стоимость услуг
31
Вариант 1
Стоимость материала 1
59
Вариант 2
Стоимость материала 2
27
Вариант 3 i
Норма времени (часы)
12
Количество материала 1
3
Количество материала 2
4
Себестоимость
657
Товарная наценка
5%
Отпускная цена
690
Прибыль на одно изделие
33
Количество изделий
36
Суммарная прибыль
1183
► | >& сценарии / j Ч |
А|
Е
с
Стоимость услуг
31
Вариант 1
Стоимость материала 1
59
Вариант 2
Стоимость материала 2
27
Вариант 3 i
Норма времени (часы)
12
Количество материала 1
3
Количество материала 2
4
Себестоимость
657
Товарная наценка
5%
Отпускная цена
690
Прибыль на одно изделие
33
Количество изделий
36
Суммарная прибыль
1183
► | >& сценарии / j Ч |
Рис. 7.15. Запрограммированные сценарии
Рис. 7.15. Запрограммированные сценарии
Предположим, что компания производит изделие, для изготовления которого нужно затратить определенное количество рабочего времени и материалов. Себестоимость изделия вычисляется в ячейке В7 по формуле
=СУММПР0ИЗВ(В1:ВЗ;В4:Вб)
Отпускная цена вычисляется в ячейке В9 по формуле
=В7*(1+В8)
Прибыль на одно изделие вычисляется в ячейке В10 по формуле
=В9-В7
Суммарная прибыль вычисляется в ячейке В12 по формуле
=В10*В11
Менеджер пытается предсказать суммарную прибыль, однако, у него нет точных сведений о том, каковы будут почасовая оплата труда, стоимость единицы материала и количество материалов. Эти данные определяются по трем сценариям, приведенным в табл. 7.6.
Таблица 7.6. Возможные варианты цен
Сценарии
1
2
3
Почасовая оплата
23
29
31
Цена единицы материала 1
62
55
59
Цена единицы материала 2
32
24
27
Количество материала 1
5
3
3
Количество материала 2
3
6
4
Следующие три процедуры, связанные с соответствующими кнопками, осуществляют ввод требуемых значений в ячейки таблицы:
Sub Вариант_1()
Range("Стоимость_услуг") = 23
Range("Стоимость_материала_1") = 62
Range("Стоимость_материала_2") = 32
Range("Количество_материала_1") = 5
Range("Количество_материала_2") = 3
End Sub
Sub Вариант_2()
Range("Стоимость—услуг") = 29
Range("Стоимость_материала_1") = 55
Range("Стоимость_материала_2") = 24
Range("Количество_материала_1") = 3
Range("Количество—материала_2") = 6 End Sub
Sub Вариант_3()
Range("Стоимость_услуг") =31
Range("Стоимость_материала_1") = 59
Range("Стоимость—материала_2") = 27
Range("Количество_материала_1") = 3
Range("Количество_материала_2") = 4 End Sub
Данную задачу составления сценариев можно решить и более изящно с помощью следующей программы:
Sub Товар(a, pl, р2 As Double, nl, n2 As Integer) Range("Стоимость_услуг") = a Range("Стоимость—материала_1") = pl Range("Стоимость—материала_2") = p2 Range("Количество—материала—1") = nl Range("Количество_материала_2") = n2
End Sub
Sub Вариант_1 ()
Товар 23, 62, 32, 5, 3
End Sub
Sub Вариант_2" ()
Товар 29, 55, 24, 3, 6
End Sub
Sub Вариант_3()
Товар 31, 59, 27, 3, 4
End Sub
Рассмотрим еще один пример составления сценариев — начисления комиссионных. Пусть в некотором магазине продавцам начисляют комиссионные по следующему правилу:
Если объем продаж не менее 100000 руб., то комиссионные равны pl процентов от объема продаж
Если объем продаж от 50 000 руб. до 100 000 руб., то комиссионные равны р2 процентов от объема продаж
Если объем продаж менее 50000 руб., то комиссионные равны рЗ процентов от объема продаж
Приведенные ниже процедуры вычисляют комиссионные для двух сценариев: pl = 4%, р2 = 3%, рЗ = 2% и pl = 6%, р2 = 4%, рЗ = 2% (рис. 7.16). Заметим, что комиссионные, начисленные по максимальному проценту, будут окрашены красным цветом, по наименьшему — черным, а по среднему — синим.
Рис. 7.16. Сценарии начисления комиссионныхРис. 7.16. Сценарии начисления комиссионных
Рис. 7.16. Сценарии начисления комиссионных
Рис. 7.16. Сценарии начисления комиссионных
Dim fl As Integer
Function Re(i, pl, p2, p3 As Double, fl As Integer) Dim si, s2, s3 As Double
If i >= 100000 Then
si = pl fl = 1 End If
If i < 100000 And i >= 50000 Then
s2 = p2 fl = 2 End If
If i < 50000 Then
s2 = p3 fl = 3 End If
Re = (si + s2 + s3) * i
End Function
Sub Ta(pl, p2, p3 As Double)
Dim i As Double
Dim j, n As Integer n = Application.CountA(Sheets("Комиссионные").Range("B:B")) For j = 2 To n
i = Cells(j, 2).Value With Cells(j, 3)
.Value = Re(i, pl, p2, p3, fl) Select Case fl
Case Is = 1
.Font.Colorlndex - 3
Case Is = 2 .Font.Colorlndex = 5 Case Is = 3 .Font.Colorlndex = 1 End Select End With Next j End Sub
Sub KomI()
Ta 0.04, 0.03, 0.02
End Sub
Sub Kom2()
Ta 0.06, 0.04,.0.02
End Sub
Приведем необходимое пояснение к данной программе. В VBA диапазон "В:В" обозначает столбец В. Функция счетз в русскоязычной версии Excel подсчитывает число непустых ячеек в выделенном диапазоне. Ее эквивалентом в англоязычной версии является функция CountA. Таким образом, функция
Application.CountA(Sheets("Комиссионные").Range("В:В"))
вычисляет число непустых ячеек в столбце В.
7.11. Модель управления запасами
Рассмотрим следующую простую модель управления запасами. Уличный продавец покупает журналы у издательства по цене 20 руб. за штуку, а продает — по 23 руб. за штуку. В случае, если товар не удается реализовать, продавец возвращает его издательству по цене 17 руб. за штуку. Необходимо определить, сколько журналов следует закупать продавцу, чтобы его ожидаемая прибыль была максимальна.
Продавцу никогда не удавалось продать более 20 журналов, а в среднем за 37 дней объемы реализации и число соответствующих событий показаны на рис. 7.17 (для простоты учитываются только пачки по пять журналов).
Рис. 7.17. Модель управления запасами
В ячейку F9 введена формула
=Г8/СУММ($F$8:$ J$8)
вычисляющая вероятность события. Эту формулу протаскиваем за маркер заполнения на диапазон F9:J9 Стоимость продукции вводится в ячейки D6 (продажа), Е6 (покупка) и F6 (возврат) из диалоговых окон ввода (рис. 7.18) с помощью процедуры Calc, назначенной кнопке start. Кроме того, процедура Calc выводит найденные значения максимальной прибыли и оптимального объема закупки газет в диалоговое окно, представленное на рис. 7.18.
1 Расчет прибыли
xi^ Макси альнай прибыг Z635 Оптимальней.об^ем:,15
Рис. 7.18. Диалоговые окна модели управления запасамиРис. 7.18. Диалоговые окна модели управления запасамицЦЖ~3
Рис. 7.18. Диалоговые окна модели управления запасами
Рис. 7.18. Диалоговые окна модели управления запасами
Sub Calc()
Dim г, v As Double
Range("продажа").Value = _
InputBox("Введите стоимость продажи") Range("покупка").Value = _
InputBox("Введите стоимость покупки") Range("возврат").Value = _
InputBox("Введите стоимость возврата") г = Range("максимальная_прибыль").Value v = Range("оптимальный_объем").Value г = Format(г, "#.##")
MsgBox "Максимальная прибыль: " & г & Chr(13) & "Оптимальный объем: " &
v, vblnformation, "Расчет прибыли"
End Sub
В ячейках F12: J16 (рис. 7.17) с помощью функции пользователя прибыль, которая будет описана ниже, вычисляются финансовые исходы при всех возможных вариантах событий покупки журналов и их реализации.
Option Base 1
Function Прибыль(покуп As Variant) As Variant
Dim NRows, i, j, Цпрод, Цпок, Цсдач As Integer, Res() As Integer NRows = покуп.Rows.Count Цпрод = Range("продажа").Value Цпок = Range("покупка").Value Цсдач = Range("возврат").Value ReDim Res(NRows, NRows) For i = 1 To NRows For j = 1 To NRows If i <= j Then Res(i, j) = покуп(i)*(Цпрод - Цпок) If i > j Then Res(i, j) = nOKyn(j) *
(Цпрод - Цпок)-(покуп(i) - покуп(j))*(Цпок - Цсдач) Next j Next i
Прибыль = Res End Function
В ячейках L13.L17 с помощью формулы
(=МУМНОЖ(F12:J16;ТРАНСП(F9:J9))}
находим ожидаемую прибыль, соответствующую различным вариантам покупки журналов. В ячейке 117 (максимальная прибыль) с помощью формулы
НАИБОЛЬШИЙ (L13:L17;1)
вычисляем максимальную прибыль. Ее также можно найти, воспользовавшись функцией макс, находящей максимальный элемент из списка
=МАКС(ЫЗ:Ы7)
В ячейке 118 по формуле
=(ПОИСКПОЗ(НАИБОЛЬШИЙ(L13:L17 ; 1);L13:L17;0)-1)*5
вычисляем соответствующий оптимальный объем покупок газет. Затем процедура Calc выводит эти оптимальные значения в окне сообщений.
Функция наибольший (large) возвращает к-е наибольшее значение из множества данных. Эта функция используется, чтобы выбрать значение по его относительному местоположению. Например, функцию наибольший можно использовать, чтобы определить наилучший, второй или третий результат в баллах, показанный при тестировании. Приведем синтаксис использованной выше функции наибольший.
Синтаксис:
НАИБОЛЬШИЙ(массив; к)
Аргументы:
Массив
Массив или диапазон, для которых определяется к-е наибольшее значение
к
Позиция (начиная с наибольшей) в массиве или диапазоне
Приведем некоторые пояснения к процедуре calc. Функция MsgBox, которая осуществляет вывод информации в окне сообщений, имеет следующий синтаксис:
MsgBox(текстовая_строка, кнопки, заголовок)
Аргументы:
текстовая_строка Обязательный аргумент, задающий в окне выводимое ин-
формационное сообщение. Может состоять из нескольких текстовых строк, объединенных знаком &. Использование в этом аргументе Chr(13) приводит к переходу на новую строку при выводе информации
КНОПКИ
Значения этого аргумента определяют категории появляющихся в окне кнопок. От значения аргумента кнопки зависит также, появляется ли в окне какой-либо значок. Если не указано, какие кнопки необходимо отображать в окне сообщений, то используется значение по умолчанию, соответствующее кнопке ок. В табл. 7.7 приведены возможные комбинации кнопок и значков в окне сообщений
заголовок
Задает заголовок окна. По умолчанию используется заголовок Excel
Таблица 7.7. Допустимые значения переменной кнопки
Отображение
Аргумент
Кнопка ок
VbOKOnly
Кнопки ОК и Отмена
VbOKCanel
Кнопки Да И Нет
VbYesNo
Кнопки Да, Нет И Отмена
VbYesNoCancel
■ Кнопки Прекратить,Повторить И Игнорировать
VbAbortRetryIgnore
Кнопки Повторить И Отмена
VbRetryCancel
Информационный знак
Vblnformation
Знак вопроса
VbQuestion
Знак восклицания
VbExclamation
Функция inputBox осуществляет ввод значений с помощью окна ввода.
Синтаксис:
InputBox(текстовая_строка, заголовок)
Аргументы:
текстовая строка Обязательный аргумент. Задает в окне информационное сообщение, обычно поясняющее смысл вводимой величины
заголовокЗадает заголовок окна. По умолчанию используется заголо
вок Ввод
Функция Format осуществляет форматирование значения вычисляемого выражения по указанному формату.
Синтаксис:
Format(выражение, формат)
Аргументы:
выражение Любое допустимое в VBA выражение
форматЛюбое допустимое или определенное пользователем значение
формата. Примером встроенного числового формата является Fixed, резервирующий две цифры после десятичной точки и, как минимум, одну — до нее
При построении пользовательского числового формата можно использовать следующие символы.
Символ "о" резервирует позицию цифрового разряда. Отображает цифру или нуль. Если у числа, представленного аргументом, есть какая-нибудь цифра в той позиции разряда, в которой в строке формата находится "о", то функция отображает именно эту цифру аргумента, если нет — в этой позиции отображается нуль
Символ "#" резервирует позицию цифрового разряда. Отображает цифру или ничего не отображает. Если у числа, представленного аргументом, есть какая-нибудь цифра в той позиции разряда, в которой в строке формата находится "#", функция отображает эту цифру аргумента, если нет — в этой позиции не отображается ничего. Действие этого символа аналогично действию "о", за исключением того, что нули в начале и конце числа не отображаются
Символ "." резервирует позицию десятичного разделителя. Указание точки в строке формата определяет, сколько разрядов необходимо отображать слева и справа от десятичной точки
Символ "%" резервирует процентное отображение числа
Символ "," — разделитель разряда сотен от разряда тысяч
Символ ":" — разделитель часов, минут и секунд в категории форматов Время
Символ "/" — разделитель дня, месяца и года в категории форматов Дата
Символы "е+, е—, е+. е-" — разделители мантиссы и порядка в экспоненциальном формате
В процедуре calc функция Format (result, "#.##") осуществляет форматирование значения, записанного в переменную result. Ее можно было бы записать с использованием встроенного формата следующим образом: Format (result, "Fixed"). Под дробную часть этого значения отводится две позиции и не менее одной позиции — под его целую часть. Приведем другие встроенные форматы:
General Number Отображает число, как оно есть
CurrencyДенежный формат с двумя цифрами после десятичной точки
StandardОтображает число с разделителем тысяч и двумя цифрами по
сле десятичной точки
PercentОтображает число в формате процентов с двумя цифрами по
ScientificScientificсле десятичной точки
Scientific
Scientific
Отображает число в стандартном экспоненциальном формате
Yes/No
Отображает No, если 0 и Yes — если 1
True/False
Отображает False, если 0 и True — если 1
On/Off
Отображает Off, если 0 и On — если 1
General Date
Отображает дату или время
Long Date
Отображает дату в длинном формате согласно системным установкам
Medium Date
Отображает дату в среднем формате согласно системным установкам
Short Date
Отображает дату в коротком формате согласно системным установкам
Long Time
Отображает время в длинном формате согласно системным установкам
Medium Time
Отображает время в среднем формате согласно системным установкам
Short Time
Отображает время в коротком формате согласно системным установкам
Отметим, что задачу о продаже журналов можно решить, не создавая массив финансовых исходов при всех возможных вариантах событий покупки журналов и их реализации, при помощи следуюшей программы:
Option Base О
Sub Sale()
Dim пк, пр, вз As Double
Dim pr(4), SS(4) As Double
Dim i, j, n As Integer
Dim si, s2 As Double
n=4
np=Range("продажа").Value nK=Range("покупка").Value B3=Range("возврат").Value For j=0 To n
For i=0 To n
pr(i)=Cells(9, i + 6).Value Next i
sl=O
For i = 0 To j
sl=sl+5*(i*(пр-пк)-(j-i)*(пк-вз|)*pr(i) Next i s2=0 For i=j+l To n
s2=s2+5*j*(пр-пк)‘pr(i) Next i
SS(j)=sl+s2
Cellstj + 22, 14).Value = 5 * j
Cells(j + 22, 15).Value = SS(j)
Next j
For j=0 To n
If Cells(j+22, 15),Value= Application.Max _ (Range(Cells(22, 15), Cells(n + 22, 15))) Then
Cellstj + 22, 15).Font.Colorindex = 3 Cellstj + 22, 14).Font.Colorlndex = 3 End If
Next j End Sub
Программа Sale определяет оптимальный объем продаж и максимальную ожидаемую прибыль, выделяя их красным цветом.
Приведем еще один пример процедуры построения матрицы. Рассмотрим задачу построения матрицы Gc размерности пс х пс
C(i - j) + С30) , i>j.
где пс = 7 и С= (4, 3, 2, 1, 4, 3, 2).
На листе модуля напишем следующую функцию пользователя:
Option Base 1
Option Explicit
Function G(C As Variant) As Variant Dim N, i, j As Integer, R() As Integer
N = C.Columns.Count
ReDim R(N, N) For i=l To N For j = 1 To N
If i <= j Then R(i, j) = C(i)A2
If i > j Then R(i, j) = C(i - j) - C(i)~3 Next j Next i G = R End Function
Введем в диапазон ячеек A1:G1 компоненты вектора С. Выделим диапазон ячеек A3:G9, куда будет записана матрица G. В этот диапазон введем формулу (=G(A1:G1) } .
Задача об оптимальном раскрое
Рассмотрим следующую задачу: бумажная фабрика выпускает свою продукцию в виде бумажных рулонов стандартной длины, равной 20 футам. По специальным заказам потребителей поставляются рулоны и других размеров, для чего производится раскрой стандартных рулонов. Типичные заказы на рулоны нестандартных размеров приведены в табл. 7.8. Необходимо удовлетворить заказы, минимизируя отходы.
Таблица 7.8. Исходные данные задачи об оптимальном раскрое
Заказ
Требуемая длина рулона, фут
Требуемое количество рулонов
1
5
210
2
7
150
3
8
200
4
10
250
Для построения математической модели надо перебрать все возможные варианты раскроя рулона стандартной длины на рулоны требуемой длины. Данную задачу решает следующая программа:
Option Explicit
Sub Раскрой()
Dim R, il, 12, 13,
Dim 1, al, a2, a3, 1-20
i4, s, t As Integer a4, a5, m As Integer
R = 3
m = Application.Min(al, a2, a3, a4 )
t = Application.Floor(l/m; 1)
For il = 0 To t
For i2 = 0 To t
For 13 = 0 To t
For 14 = 0 To t
s = 20 - al*il - a2’12 - a3*i3 - a4*i4 If s >= 0 And s < m Then
Cells(R, 1).Value = R - 2 Cells(R, 2).Value = 11 Cells(R, 3).Value = 12 Cells(R, 4).Value = 13 Cells(R, 5).Value = 14 Cells(R, 6).Value = s R = R + 1
End If
Next 14
Next 13
Next 12
Next 11
End Sub
где функция Floor возвращает наибольшее целое число, не превышающее данное. Результаты расчета процедуры Раскрой представлены на рис. 7.J9 (они заполняют диапазон ячеек A3:F12 рабочего листа).
Рис. 7.19. Варианты решения в задаче об оптимальном раскрое
Пусть Xj — количество стандартных рулонов, разрезанных по варианту j, где /е [1, 10]. Ограничения, налагаемые на переменные Xj, связаны с требованием обеспечить изготовление заказанного количества нестандартных рулонов. Функция цели учитывает суммарные отходы, получаемые при выполнении заказа. Таким образом, имеем следующую математическую модель: минимизировать:
г = 2х2 +4х3 + Зх4 + х^ + 2х8 + Зх9 +
+ 5(х5 + х^ + 2х7 + 2х8 + 2х9 + 4хю — 210) +
+ 7(х4 + х5 + 2хо + 2х9 — 150) +
+ 8(х2 + 2х3 + х5 + х8 — 200) +
+ Ю(2х] + х2 + х4 + х7 — 250)
при ограничениях: х, — целые при / е [1, 10] и
х5 + х6 + 2х7 + 2х8 + 2х9 + 4Х|0 > 210, х4 + х5 + 2х6+ х9 > 150,
х2 + 2х3+ х5+ х8> 200,
2Х| + х2 + х4+ хч> 250.
Отведем диапазон ячеек НЗ:Н12 под переменные. Введем в диапазон ячеек I3:L3 левые части ограничений, определенные следующими формулами:
=СУММПРОИЗВ($Н$3:$Н$12;ВЗ:В12)
=СУММПРОИЗВ(5Н$ 3:$Н$12;СЗ:С12)
=СУММПРОИЗВ($H$3:$H$12;D3:012)
—СУММПРОИЗВ($Н$3:$Н$12;ЕЗ:Е12)
В ячейку М3 введем функцию цели
=СУММПР0ИЗВ($Н$ 3:$Н$12;F3:F12)
+В2*(СУММПРОИЗВ($Н$3:$Н$12;ВЗ:В12)-12)
+С2*(СУММПРОИЗВ($Н$3:$Н$12;СЗ:С12)-J2)
+ D2 *(СУММПРОИЗВ($ Н$ 3:$Н$12;D3:D12)-К2)
+Е2*(СУММПРОИЗВ($Н$3:$Н$12;ЕЗ:Е12)-L2),
где в ячейки В2:Е2 введены длины, а в ячейки I2:L2 — количество заказанных рулонов.
Выберем команду Сервис, Поиск решения (Tools, Solver) и заполним открывшееся диалоговое окно Поиск решения (Solver), как показано на
рис. 7.20. Результаты расчета приведены на рис. 7.19. Оптимальным является использование первого варианта раскроя для 100 стандартных рулонов, второго — для 50, пятого — для 150 и десятого — для 15 стандартных рулонов.
Рис. 7.20. Диалоговое окно Поиск решения в задаче об оптимальном раскрое
База данных отеля
Приведем пример программы, создающей простую базу данных регистрации клиентов отеля на рабочем листе База данных (рис. 7.21).
Рис. 7.21. База данных отеля
База данных будет заполняться программой. Программе не требуются названия полей, но для облегчения ориентации пользователя в первой строке рабочего листа База данных введем их названия, как показано на рис. 7.21.
Выделите вторую строку рабочего листа База данных и выполните команду Окно, Закрепить области (Window, Freeze Panes). Теперь заголовок будет присутствовать на экране постоянно при просмотре любых записей базы.
Нажмем кнопку Ввод данных. Теперь с помощью открывшегося диалогового окна Регистрация клиентов будет заполняться база данных (рис. 7.22).
Рис. 7.22. Диалоговое окно Регистрация клиентовРис. 7.22. Диалоговое окно Регистрация клиентов
Рис. 7.22. Диалоговое окно Регистрация клиентов
Рис. 7.22. Диалоговое окно Регистрация клиентов
Диалоговое ОКНО Регистрация клиентов создается на листе диалога Регистрация средствами панели инструментов Элементы управления (Forms). Напомним, что диалоговый лист создается командой Вставка, Макрос, Диалоговое окно (Insert, Macro, DialogSheet) (рис. 7.23). С помощью вкладки Элемент управления (Control) диалогового окна Форматирование объекта (Format Object) убедитесь в правильном назначении функций кнопкам диалогового окна.
Для работы с раскрывающимся списком на вспомогательном рабочем листе Переменные в диапазон ALA3 с именем Типы_номеров вводим последовательно типы номеров: люкс, одноместный, двухместный. Ячейке А15 присваиваем имя номер, а ячейке А14 — имя тип_номера. Кроме того, в ячейку А14 вводим следующую формулу
^ИНДЕКС(Типы_номеров;Номер;1)
Щелкнув список правой кнопкой мыши, с помощью контекстного меню вызовем диалоговое окно Форматирование объекта (Format Object). В поле Форматировать список по диапазону (Input Range) введем имя диапазона Типы номеров, а в поле Помещать результат в ячейку (Cell Link) введем имя ячейки номер. Затем назначим процедуру Enteroata кнопке ввод данных. Со счетчиком диалогового окна ввода данных свяжем процедуру oospinner, выводящую в третье поле ввода текущее значение счетчика, а с третьим полем
Рис. 7.23. Диалоговый лист
ввода — процедуру Backspinner для синхронизации значения счетчика с содержимым поля ввода.
Sub EnterDataf)
Dim Фамилия, Имя, Срок, Оплачено, Паспорт As String Dim Выб_номер, Пол As String
Dim DboxOK As Boolean
Dim Row As Integer
Start:
With Dialogsheets("Регистрация") .EditBoxes(1).Text="" .EditBoxes(2).Text="" .EditBoxes (3) . Texi—"" .CheckBoxes(1).Value =xlOff .CheckBoxes(2).Value =xloff .Spinners(1).Min=l .Spinners(1).Max=100
DboxOK = Dialogsheets("Регистрация").Show If Not DboxOK Then Exit Sub
Row=Application.CountA(Sheets("База данных").Range("с:с"))+1
With Dialogsheets("Регистрация")
Фамилия™.EditBoxes(1).Text
Имя™.EditBoxes(2).Text
Срок=.EditBoxes(3).Text
If .OptionButtons(1)=xlOn Then Пол="муж"
If .OptionButtons(2)=xlOn Then Пол="жен" If .CheckBoxes(l)=xlOn Then
Оплачено™"да
Else
Оплачено="нет
End If
If .CheckBoxes(2)=xlOn Then
Паспорт™"да"
Else
Паспорт™"нет
End If
End With
Выб_номер = Worksheets("Переменные").Range("Тип_номера") With Sheets("База данных")
.Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row,.Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row,.Value = Фамилия
.Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row,
.Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row, .Cells(Row,
.Value = Имя
.Value = Пол
4)-Value = Выб_номер
.Value = Оплачено
.Value = Паспорт
.value = Срок
End With
GoTo Start
End Sub
Sub DoSpinnert)
With ActiveDialog
.EditBoxes(3).Text = CStr(.Spinners(1)-Value) End With
Sub BackSpinner()
With ActiveDialog
.Spinners(1).Value = CInt(.EditBoxes(3).Text)
End With
End Sub
Дадим необходимые пояснения к приведенной выше программе. GheckBoxes, EditBoxes и Spinners являются наборами объектов управления: флажок, поле и счетчик, соответственно. Другими наборами объектов управления являются:
ListBoxesListBoxesСписокСписокDropDownsDropDownsРаскрывающийся списокРаскрывающийся списокScrollBarsScrollBarsПолоса прокруткиПолоса прокрутки
ListBoxes
ListBoxes
Список
Список
DropDowns
DropDowns
Раскрывающийся список
Раскрывающийся список
ScrollBars
ScrollBars
Полоса прокрутки
Полоса прокрутки
LabelsLabelsНадпись
Labels
Labels
Свойства Min и мах определяют минимальное и максимальное значения счетчика с указанным номером, т. е. конструкция
Dialogsheets("Регистрация").Spinners(1)-Min = 1
задает минимальное значение первого счетчика, равное 1. Конструкция
Dialogsheets("Регистрация").EditBoxes(1).Text = ""
очищает поле ввода с номером 1.
Оператор with-End with используется для удобства при работе с несколькими свойствами или методами одного и того же объекта. Например, конструкция
With Dialogsheets("Регистрация") .EditBoxes(1).Text = "" .EditBoxes(2).Text = "" .EditBoxes(3).Text = "" .GheckBoxes(1).Value = xlOff .GheckBoxes(2).Value = xlOff .Spinners(1).Min = 1 .Spinners(1).Max = 100
эквивалентна следующей конструкции (но без использования with- End With):
Dialogsheets("Регистрация").EditBoxes(1).Text = "" Dialogsheets("Регистрация").EditBoxes(2).Text = "" Dialogsheets("Регистрация").EditBoxes(3).Text = "" Dialogsheets("Регистрация").CheckBoxes(1) = xlOff Dialogsheets("Регистрация").CheckBoxes(2) = xlOff Dialogsheets("Регистрация").Spinners(1).Min = 1 Dialogsheets("Регистрация").Spinners(1).Max = 100
В переменную Row вводится номер первой пустой строки на рабочем листе База данных. Оператор безусловного перехода goto позволяет изменять порядок выполнения команд. Так, в нашем примере после выполнения оператора goto start управление передается оператору с меткой start. Метка в тексте программы отличается от других идентификаторов тем, что после нее стоит двоеточие.
Рассмотрим подробнее следующую конструкцию:
DboxOK = Dialogsheets("Регистрация").Show If Not DboxOK Then Exit Sub
Свойство show возвращает True, если диалоговое окно открыто, и Fa.lse — в противном случае. Таким образом, данная конструкция при нажатии в диалоговом окне кнопки Отмена присваивает переменной DboxOK -значение False, что приводит к завершению работы процедуры EnterData. Если кнопка отмена не нажата, то переменной DboxOK присваивается значение True, и процедура EnterData продолжает работу по заполнению базы данных.
Рассмотрим другой способ выполнения этой же операции — без использования дополнительной переменной и оператора безусловного перехода:
Do While Dialogsheets("Регистрация").Show
БЛОК_ОПЕРАТОРОВ
Loop
Метод show позволяет отобразить диалоговое окно. Например, диалоговое окно Регистрация может быть отображено на экране с помощью команды
Sheets("Регистрация").Show
Диалоговое окно останется на экране до тех пор, пока не будет нажата кнопка ок или кнопка отмена. Применив метод Hide, можно также закрыть это окно. Команда
Sheets("Регистрация").Hide
закроет ранее открытое диалоговое окно. Существует различие между методом show, который отображает диалоговое окно, и методом Activate, активизирующим лист диалогового окна. Метод show отображает диалоговое окно в рабочем режиме для работы с данными, а метод Activate возвращает его в режиме конструирования как часть листа диалогового окна.
Конструкция
If .OptionButtons(1) = xlOn Then Пол = "муж"
присваивает переменной пол значение "муж", если переключатель поставлен в первое положение.
Следует также отметить, что при обращении из программы к элементам управления в диалоге важно знать порядок их расположения. Порядок расположения элементов — это порядок их обхода с помощью клавиши <ТаЬ>. Изначально порядок расположения управляющих элементов соответствует порядку их создания. Затем его можно изменять с помощью диалогового окна Последовательность перехода (Tab Order), вызываемого командой Сервис, Последовательность перехода (Tools, Tab Order), не затрагивая при этом самих элементов (рис. 7.24).
Рис. 7.24. Диалоговое окно Последовательность перехода
Отметим, что порядковый номер элементов управления при их выделении выводится в поле имен.
Банковская база данных
Рассмотрим простую базу данных учета клиентов банка. База данных будет заполняться на рабочем листе База данных. В рабочий лист Архив записывается информация об операциях со счетами клиентов. На рабочем листе меню имеются четыре КНОПКИ: Выход, Изменение информации, Прием вклада И Переучет архива, управляющие работой с базой данных (рис. 7.25).
Рис. 7.25.Рабочий лист Меню банковской базы данныхРис. 7.25.Рабочий лист Меню банковской базы данных
Рис. 7.25.
Рабочий лист Меню банковской базы данных
Рис. 7.25.
Рабочий лист Меню банковской базы данных
Рис. 7.26. Сообщение об открытии счетаРис. 7.26. Сообщение об открытии счетаБанкБанкСчет существует Деньги принятыСчет существует Деньги приняты
Рис. 7.26. Сообщение об открытии счета
Рис. 7.26. Сообщение об открытии счета
Банк
Банк
Счет существует Деньги приняты
Счет существует Деньги приняты
На листе диалога приход создано диалоговое окно внесения поступивших денег в базу данных. Если в базе данных клиент не обнаружен, то появляется соответствующее сообщение (рис. 7.26).
Рис. 7.27. Сообщение о принятии денег на имеющийся счет
Если в базе данных такой клиент имеется, то его вклад добавляется к текущему счету и появляется сообщение (рис. 7.27).
На рабочем листе База данных введите заголовки, как это показано на рис. 7.28.
Будем считать, что тип вклада может быть текущий, депозит или Срочный, а отделение банка — Северное, Западное ИЛИ Центральное.
На рабочем листе Архив введите заголовки, как показано на рис. 7.29.
На листе диалога приход создайте диалоговое окно принятие вклада (рис. 7.30).
А
С.
0
1
Фамилия
Тип вклада
Размер вклада
Отделение банка
Примечание
2
Сидоров
Текущий
23100000
Северное
Временно выехал
3
Фролов
Депозит
4159000
Центральное
4
Сидорчук Текущий
123
Западное
5
Вагнер
Текущий
3888000
Северное
Сменил адрес
6
Петров
Текущий
21758
Северное
7
Иванов
Депозит
559000
Центральное
8
Григорьев Текущий
5000500
Центральное
9
Чернов
Текущий
73000000
Северное
10
11
Кравцов Рябов
Текущий
Текущий
1760300
77200000
Северное
Западное
Перевел в другое отделение
мГ<
‘ I ^Вк^ аза дзнных.
Г Обработка
архива ^АркиЕ
MlHl
Рис. 7.28. Рабочий лист База данных банковской базы данных
А
. с
G
Получатель Дата
Фамилия Тип
Выданные Отделение
Примечание
1
вклада
деньги банка
2
Петров
02.06.98
Фролов
Депозит
100 Западное
По доверенности
3
Смирнов
05.06.98
Петров
■Текущий
5198 Западное
По доверенности
4 ■
09.06.98
Иванов
Депозит
3572.Западное
По доверенности I -
5 ■
Петров
09.08.98 Иванов
Депозит
572 Западное
По доверенности 1
6
10 08.98 Сидоров
Депозит
572 Западное
Лично
7
11.08.98 Федотов
Депозит
572 Западное
Лично
8
13 08 98 Федотов
Депозит
1572 Западное
Лично
9 ■
Смирнов
27.07.98
Петров
Текущий
3000 Северное
По доверенности
10
10.08.98 Сидоров
Депозит
572 Западное
Лично;
11
01.08.98
Петров
Текущий
2 Северное
12
01.08.98
Фром
Текущий
230000 Северное
н]3
>Wp«
г^ворта /
“ "Ы1 ►Г
Рис. 7.29. Рабочий лист Архив банковской базы данных
Рис. 7.30. Диалоговое окно ПРИНЯТИЕ ВКЛАДАРис. 7.30. Диалоговое окно ПРИНЯТИЕ ВКЛАДА
Рис. 7.30. Диалоговое окно ПРИНЯТИЕ ВКЛАДА
Рис. 7.30. Диалоговое окно ПРИНЯТИЕ ВКЛАДА
Полю Фамилия присвойте имя Фамилия. Для переименования поля выделите его и введите новое имя в поле имен, расположенное левее строки формул. Раскрывающему списку присвойте имя Тип_вклада, полям Размер вклада и Примечание — имена Размер_вклада И Remarks, соответственно. В VBA В именах переменных и объектов буква "ч" часто воспринимается программой как ошибка. Поэтому вместо русского имени Примечание используем английское Remarks. Переключателям присваиваем имена северное, западное и центральное. Щелкнув правой кнопкой мыши поле Remarks, с помощью контекстного меню вызовем диалоговое окно Форматирование объекта (Format Object), в котором полю Remarks зададим режим Многострочный текст (Multiline Edit) (рис. 7.31).
Рис. 7.31. Диалоговое окно Форматирование объекта для поля
На листе диалога Работа создайте диалоговое окно работа со вкладом (рис. 7.32).
Рис. 7.32. Создаваемое диалоговое окно для работы со вкладомРис. 7.32. Создаваемое диалоговое окно для работы со вкладом
Рис. 7.32. Создаваемое диалоговое окно для работы со вкладом
Рис. 7.32. Создаваемое диалоговое окно для работы со вкладом
Присвойте объектам те же имена, что и в диалоговом окне принятие вклада (рис. 7.30). Кроме ТОГО, ПОЛЯМ Выдаваемые деньги, Получатель И Дата присвойте имена Выдаваемые__деньги, Фамилия_п И Дата, соответственно. Для поля ввода Remarks задайте режим Многострочный текст (Multiline Edit) в диалоговом окне Форматирование объекта (Format Object) (рис. 7.31). С помощью окна диалога Форматирование объекта (Format Object) назначьте кнопке выдать функцию Закрыть (Dismiss), кнопке изменить — функции Не определена и Закрыть (Dismiss), кнопке отмена — функцию Отмена (Cancel) и кнопке найти — ни одной функции (рис. 7.33).
Рис. 7.33. Диалоговое окно Форматирование объекта для кнопки
На листе диалога обработка архива создайте окно диалога со списком фамилий, показанное на рис. 7.34.
Рис. 7.34. Диалоговое окно для редактирования архиваРис. 7.34. Диалоговое окно для редактирования архива
Рис. 7.34. Диалоговое окно для редактирования архива
Рис. 7.34. Диалоговое окно для редактирования архива
Для этого списка с помощью диалогового окна Форматирование объекта (Format Object) установите переключатель Возможен выбор (Selection) в положение Списка значений (MultiSelect) (рис. 7.35).
Рис. 7.35. Диалоговое окно Форматирование объекта для списка
Данная установка позволит с помощью щелчка мышью выбирать из списка архива группу фамилий вкладчиков и объединять их операции. Объединенный результат операций будет помещен в архив в строчку, соответствующую первому клиенту из выбранной группы.
На листе модуль! введите следующую программу для работы с базой данных:
Option Explicit
Option Base 1
Dim Данные(5) As Variant
Dim Получатель(2) As String
Dim Текущий As Integer
Dim Область As Object
Dim Число As Long
Dim Количество As Integer
Dim Номер, Вклад As Integer
Const Диалог_прихода As Integer = 1
Const Диалог_обработки As Integer = 2
Sub Подготовка(Диалог)
Dim Объект диалога As Object
Select Case Диалог
Case Диалог_прихода
Set Объект_диалога = Dialogsheets("Приход") Case Диалог_обработки
Set Объект_диалога = Dialogsheets("Работа") With Объект_диалога
.Drawingobjects("Фамилия—n").Text = ""
.Drawingobjects("Дата").Text = Format(Date, "Short Date") End With
End Select
With Объект_диалога .Drawingobjects("Фамилия").Text = "" .Drawingobjects("Тип_вклада").DropDownLines = 3 .Drawingobjects("Тип_вклада").List = _ Array("Текущий", "Депозит", "Срочный") .Drawingobjects("Тип_вклада").Value = 1 .Drawingobjects("Размер_вклада").Text = "" .Drawingobjects("Remarks").Text = "" End With
If Диалог = Диалог_обработки Then With Dialogsheets("Работа")
.Drawingobjects("Выдаваемые деньги").Text = "" .Drawingobjects("Фамилия_п").Text = "" End With
End If
End Sub
Sub Загрузка_диалога(Диалог As Integer)
Dim Объект_диалога As Object
Select Case Диалог
Case Диалог_прихода
Set Объект_диалога = Dialogsheets("Приход")
Case ДиалоГ—Обработки
Set Объект_диалога = DialogSheets("Работа")
With Объект диалога
Получатель(1) = .Drawingobjects("Фамилия_п").Text
Получатель(2) = .Drawingobjects("Дата").Text End With
End Select
With Объект_диалога
Данные(1) = .Drawingobjects("Фамилия").Text Данные(2) = .Drawingobjects("Тип_вклада") _ .List(.Drawingobjects("Тип_вклада").Listindex) Данные(З) = .Drawingobjects("Размер_вклада").Text If .Drawingobjects("Северное") = xlOn Then Данные(4) = "Северное" End If If .Drawingobjects("Западное") = xlOn Then Данные(4) = "Западное" End If If .Drawingobjects("Центральное") = xlOn Then Данные(4) = "Центральное" End If Данные(З) = .Drawingobjects("Remarks").Text End With
End Sub
Sub Запись_клиента()
Подготовка(Диалог_прихода)
Dialogsheets("Приход").Show
End Sub
Sub Работа с клиентом()
Подготовка(Диалог_обработки) Текущий = О
Dialogsheets("Работа").Show
End Sub
Sub Выход()
ThisWorkbook.Close
End Sub
Sub Взнос_вклада()
Dim Найдено As Boolean
Dim Столбец As Integer
Загрузка_диалога (Диалог_прихода) Найдено = False
Set Область = Sheets("База данных").Cells(1, 1).CurrentRegion
Количество = Область.Rows.Count
Номер = 2
With Sheets("База данных")
While Not Найдено And Номер <= Количество If .Cells(Номер, 1) = Данные(1) Then Найдено = True Else Номер = Номер + 1 End If Wend If Найдено Then .Cells(Номер, 3) = .Cells(Номер, 3) + Данные(З) MsgBox "Счет существует." & Chr(13) & _ "Деньги приняты.", vblnformation, "Банк" Else For Столбец = 1 To 5 .Cells(Количество + 1, Столбец) = Данные(Столбец) Next Столбец
MsgBox "Открыт новый счет." & Chr(13) & _ "Деньги приняты.", vblnformation, "Банк" End If End With End Sub
Sub Поиск_клиента()
Dim Measure As Long
Dim Найдено As Boolean Загрузка_диалога (Диалог_обработки) Найдено = False
Set Область = SheetsfEasa данных") .Cells (1, 1) . CurrentRegion Количество = Область.Rows.Count Номер = 2 With Sheets("База данных") While Not Найдено And Номер <= Количество If .Cells(Номер, 1) = Данные(1) Then Найдено = True End If Номер = Номер + 1 Wend
If Найдено Then Текущий = Номер - 1 Select Case .Cells(Текущий, 2) Case Is = "Текущий" Measure = 1 Case Is = "Депозит" Measure = 2 Case Is = "Срочный" Measure = 3 End Select Dialogsheets("Работа"). _ Drawingobjects("Тип_вклада").Value = Measure Select Case .Cells(Текущий, 4) Case Is = "Северное"
Dialogsheets("Работа"). _ DrawingObjects("Северное").Value = xlOn Case Is = "Западное" Dialogsheets("Работа"). _ Drawingobjects("Западное").Value = xlOn Case Is = "Центральное" Dialogsheets("Работа"). _ Drawingobjects("Центральное").Value = xlOn End Select Dialogsheets("Работа"). _ Drawingobjects("Remarks")-Text = .Cells(Текущий, 5) If Dialogsheets("Работа").Drawingobjects("Размер_вклада"). Text <> "" Then Число = Dialogsheets("Работа"). _ Drawingobjects("Размер_вклада").Text Else Число = 0 Dialogsheets("Работа"). _ Drawingobjects("Paзмер_вклада").Text = .Cells(Текущий, 3) End If If Число <= .Cells(Текущий, 3) Then MsgBox "Клиент найден." & Chr(13) & _ "Данные о счете помещены в окно диалога.",
vbExclamation, "Банк"
Else
Dialogsheets("Работа").DrawingObjects("Размер_вклада") _ .Text = .Cells(Текущий, 3) MsgBox "Клиент найден." & Chr(13) & _ "На счету имеется меньше денег," & Chr(13) & _ "чем запрашивает клиент." & Chr(13) & _ "Данные о счете помещены в окно диалога.", vbExclamation, "Банк"
End If Else MsgBox "Такой клиент не найден.", vbCritical, "Банк" End If End With End Sub
Sub Снятие_денег()
Dim Строка_архива As Long
If Текущий = 0 Then
MsgBox "Перед выдачей денег надо найти счет.", _ vbExclamation, "Банк" Else Загрузка_диалога (Диалог_обработки) If Dialogsheets("Работа"). _ DrawingObjects("Выдаваемые_деньги").Text о "" Then Число = CLng(Dialogsheets("Работа"). _ Drawingobjects("Выдаваемые_деньги").Text)
If Число <= Sheets("База данных").Cells(Текущий, 3) Then Set Область = Sheets("Архив").Cells(1, 1).CurrentRegion Строка_архива = Область.Rows.Count + 1 With Sheets("База данных") .Range(.Cells(Текущий, 1), .Cells(Текущий, 5)).Copy End With With Sheets("Архив") .Paste destinations _ .Range(.Cells(Строка_архива, 3), .Cells(Строка_архива, 7)) End With With Worksheets("Архив") .Cells(Строка_архива, 1).Value = Получатель(1) .Cells(Строка_архива, 2).Value = Получатель(2) .Cells(Строка_архива, 5).Value = _
Dialogsheets("Работа"). _
Drawingobjects("Выдаваемые_деньги").Text .Cells(Строка_архива, 7).Value = _ Dialogsheets("Работа"). _ Drawingobjects("Remarks").Text .Cells(Строка_архива, 5).Value = Число End With With Sheets("База данных") .Cells(Текущий, 3).Value = .Cells(Текущий, 3).Value - Число If .Cells(Текущий, 3).Value = 0 Then .Cells(Текущий, 3).EntireRow.Delete MsgBox "Деньги выданы." & Chr(13) & _ "Счет закрыт в связи с отсутствием на нем денег.", vblnformation, "Банк" Else MsgBox "Деньги выданы." & Chr(13) & _ "На счету имеется остаток " _ & CStr(.Cells(Текущий, 3).Value) & _ " р.", vblnformation, "Банк" End If End With Else MsgBox "Деньги не выданы." & Chr(13) & _ "На счету нет необходимой суммы денег." & Chr(13) & _ "Клиет запрашивает на " & CStr(Число - _ Sheets("База данных").Cells(Текущий, 3).Value) & _ "р. больше чем имеется на счету." _ , vbExclamation, "Банк" End If Else MsgBox "Нельзя выдать деньги" & Chr(13) & _ "без указания суммы", vbExclamation, "Банк" End If End If End Sub Sub Изменить() If Текущий = 0 Then MsgBox "Перед изменением описания" & Chr(13) &
"следует найти клиента", vbExclamation, "Банк" Else With Dialogsheets("Работа")
SheetsfBasa данных") . Cells (Текущий, 5).Value = _ .Drawingobjects("Remarks").Text
Select Case Sheets("База данных").Cells(Текущий, 2) Case "Северное"
.Drawingobjects("Северное").Value = xlOn Case "Западное"
.DrawingObjects("Западное").Value = xlOn Case "Центральное"
.Drawingobjects("Центральное").Value = xlOn End Select End With
MsgBox "Изменено описание доступных " _ & Chr (13) & "для изменения данных.", vblnformation, "Банк" End If End Sub
На листе Модуль2 введите следующую программу для работы с архивом:
Dim Area As Object
Dim n, i As Integer
Dim s() As Integer
Sub Pa6_apx()
Set Area=Sheets("Архив").Cells(1, 1).CurrentRegion n=Area.Rows.Count Dialogsheets("Обработка архива"). _
ListBoxes(1).MultiSelect = xlExtended
Do While Dialogsheets("Обработка архива").Show=True Dialogsheets("Обработка архива"). _
ListBoxes(1).RemoveAlIIterns Dialogsheets("Обработка архива").
ListBoxes(1).ListFillRange=_ "=Архив!c2:c" & LTrim(CStr(n)) Dialogsheets("Обработка архива"). _
ListBoxes(1).Selected(3)=True
Loop
End Sub
Sub Обработка()
Dim Su, Fl As Integer
Dim a As Boolean
Su = 0
For i = 1 To n - 1
If Dialogsheets("Обработка архива"). _ ListBoxes(l).Selected(i)=True Then Su=Su+Sheets("Архив") .Cells (i + 1, 5).Value
End If
Next i
For i=l To n-1
If Dialogsheets("Обработка архива"). _ ListBoxes(l).Selected(i)=True Then Fl=i Exit For
End If
Next i
Sheets("Архив").Cells(Fl+1, 5).Value=Su For i=l To n-1
If Dialogsheets("Обработка архива"). _ ListBoxes(1).Selected(i)=True _ And i>Fl Then
Sheets("Архив").Cells(i+1,1).EntireRow.Delete End If
Next i
End Sub
Для завершения создания системы учета денежных вкладов необходимо связать данные программы с кнопками в соответствии с табл. 7.9, а программу Обработка — СО СПИСКОМ ДИЗЛОГОВОГО ОКНЗ РЕДАКТИРОВАНИЕ АРХИВА.
Таблица 7.9. Соответствие между процедурами и кнопками
КнопкаПрограмма
ВыходВыход
Изменение информации Работа_с_клиентом
Таблица 7.9 (окончание)
Кнопка
Программа
Прием вклада
Запись_ клиента
Принять
Взнос_вклада
Найти
Поиск_клиента
Выдать
Снятие_денег
Изменить
Изменить
ОК
Раб_арх
Приведем некоторые пояснения к тексту программы.
Метод Drawingobjects (переменная) возвращает объект управления или графический объект с именем или номером, помещенным в переменную. Свойство CurrentRegion возвращает объект — диапазон ячеек, окружающий заданную ячейку и ограниченный пустыми ячейками. Таким образом в следующей группе операторов переменной область назначается диапазон ячеек рабочего листа База данных, содержащий всю внесенную информацию о клиентах банка. В переменную Количество записывается число заполненных строк в базе данных
Dim Область As Object
Set Область = SheetsC'Basa данных").Cells(1, 1).CurrentRegion
Количество = Область.Rows.Count
Копирование содержимого диапазона ячеек производится методом сору. Например, в нашей программе копирование диапазона ячеек из строки с номером текущий осуществляется с помощью следующей конструкции:
Sheets("База данных").
Range(.Cells(Текущий, 1), .Cells(Текущий, 5)).Сору
Метод Paste копирует содержимое буфера обмена, записанное во встроенную переменную destination, в указанный диапазон ячеек. Таким образом, следующая конструкция записывает информацию из буфера обмена в диапазон ячеек рабочего листа Архив:
Sheets ("Архив"). Paste destinations _
.Range(.Cells(Строка_архива, 3), .Cells(Строка_архива, 7))
Отметим, что существует более компактный способ копирования диапазонов ячеек, например, следующая процедура
Sub Со()
Range("Al:Cl").Copy (Range("B2"))
End Sub
копирует содержимое диапазона ячеек А1:С1 рабочего листа в диапазон B2:D2 того же листа.
Процедура
Sub Mu()
Range("Al:Cl").Cut (Range("B2")) End Sub
перемещает диапазон ячеек.
Метод Ent i reRow возвращает строку, содержащую указанную строчку. Таким образом, конструкция
Sheets("Архив").Cells(i+1,1).EntireRow.Delete
удаляет строку, содержащую ячейку Cells (1+1, 1).
Приведем краткий обзор методов и свойств следующих объектов: список и раскрывающийся список.
Метод RemoveAHIterns
Удаляет из списка все элементы
Метод Removeltem(index, count)
Удаляет из списка элементы, число которых равно count, начиная с номера index. Если count опущен, то удаляется только один элемент
Свойство DropDownLines
Определяет число элементов, выводимых в раскрывающемся списке
Свойство ListCount
Возвращает число элементов списка
Свойство Listindex
Определяет (как и свойство Value) номер активного элемента раскрывающегося списка (например Drawingobjects("Тип_вклада").Listlndex=l)
Свойство MultiSelect
Позволяет выбирать несколько элементов из списка. Свойство MultiSelect может принимать одно из следующих значений: xlNone— для выбора одного элемента из списка, a xlsimple или xlExtended — для выбора группы элементов из списка
Свойство SelectedСвойство SelectedВозвращает True, если элемент списка с указанным номером выбран, и возвращает False — в противном случае
Свойство Selected
Свойство Selected
Таким образом, конструкция
For 1=1 То п-1
If Dialogsheets("Обработка архива").ListBoxes(1).Selected(i) = True Then
Su = Su + Sheets("Архив").Cells(i+1, 5).Value
End If
Next i
суммирует значения ячеек пятого столбца, соответствующие выбранным элементам раскрывающегося списка.
Задать элементы списка можно одним из следующих способов:
Метод
ListFillRange
Назначает списку указанный диапазон. Например, в нашей программе конструкция
Dialogsheets("Обработка архива"). _
ListBoxes(1).ListFillRange = _ "=Архив!с2:с" & LTrim(CStr(n)) назначает диапазон ячеек С2:Сп рабочего листа Архив. Функция LTrim возвращает копию строки без предшествующих пробелов. Другими полезными функциями работы со строкой являются RTrim и Trim, возвращающие копии строки без пробелов в конце строки и без пробелов в обоих концах строки, соответственно
Свойство List
Задает все элементы списка или элемент с указанным номером. Таким образом, следующая конструкция создает раскрывающийся список:
.DrawingObjects("Тип_вклада"). _
List = Array("Текущий","Депозит","Срочный")
Метод
Additem(text, index)
Определяет в качестве элемента списка с номером, записанным в переменную index, значение текстовой переменной text. Например, следующая конструкция определяет тот же раскрывающийся список, что и в предыдущем примере:
.Drawingobjects("Тип_вклада"). _
Additem 1, "Текущий"
.Drawingobjects("Тип_вклада"). _
Additem 2, "Депозит"
.Drawingobjects("Тип_вклада")._
AddItem 3, "Срочный"
Опишем действие подпрограмм, входящих в программу работы с банковской базой данных.
Рис. 7.36. Результат поиска клиента (если клиент найден)Рис. 7.36. Результат поиска клиента (если клиент найден)Рис. 7.37. Результат поиска клиента (если клиент не найден)Рис. 7.37. Результат поиска клиента (если клиент не найден)Рис. 7.38. Сообщение об изменении описанияРис. 7.38. Сообщение об изменении описания
Рис. 7.36. Результат поиска клиента (если клиент найден)
Рис. 7.36. Результат поиска клиента (если клиент найден)
Рис. 7.37. Результат поиска клиента (если клиент не найден)
Рис. 7.37. Результат поиска клиента (если клиент не найден)
Рис. 7.38. Сообщение об изменении описания
Рис. 7.38. Сообщение об изменении описания
Подготовка(Диалог)
Готовит диалоговое окно для нового взноса денег, если переменная Диалог равна постоянной Диалог прихода, и для работы со счетом, если переменная Диалог равна постоянной Диалог_обработки. Кроме того, она считывает информацию в массив Данные из объектов диалогового окна
Выход
Закрывает рабочую книгу
Запись_клиента
Активизирует диалоговое окно Приход и подготавливает его к работе
Взнос_вклада
Осуществляет поиск клиента по фамилии. Если такого клиента нет, то она осуществляет запись счета нового клиента в первую свободную строку базы данных и выдает соответствующее сообщение (рис. 7.26). Если такой клиент существует, то подпрограмма Взнос_вклада прибавляет взнос к ранее открытому счету клиента и выдает соответствующее сообщение (рис. 7.27)
Работа_склиентом
Активизирует диалоговое окно Работа со вкладом (рис. 7.32) и подготавливает его к работе
Поиск клиента
Осуществляет поиск клиента по фамилии. Если клиент найден, то появляется сообщение, показанное на рис. 7.36, а если клиент не найден— сообщение, показанное на рис. 7.37
Изменить
Позволяет изменить примечание и запись об отделении банка. После ее выполнения появляется сообщение, показанное на рис. 7.38
При работе с базой данных возможны также следующие сообщения:
□ При нажатии кнопок в диалоговом окне Работа со вкладом (рис. 7.32) без предварительного поиска клиента возможно появление сообщения, показанного на рис. 7.39.
Рис. 7.39. Сообщение, предупреждающее о необходимости поиска счета
Рис. 7.40. Сообщения о результате выдачи денегРис. 7.40. Сообщения о результате выдачи денегПри работе программы снятие_ленег с найденным счетом возможно появление одного из сообщений, показанных на рис. 7.40.
Рис. 7.40. Сообщения о результате выдачи денег
Рис. 7.40. Сообщения о результате выдачи денег
Как разместить капитал?
Рассмотрим следующую задачу. Фирма по производству быстрого питания намерена сделать капиталовложения в размере 5 млн. руб. в расширение производства. Фирма имеет четыре филиала, расположенные в различных городах. В каждом из филиалов проведено изучение рынка и найдены математические ожидания прибыли как функции капиталовложений, приведен-
ные в табл. 7.10. Необходимо выработать оптимальный план капиталовложений, максимизирующий ожидаемую прибыль.
Таблица 7.10. Ожидаемая прибыль в зависимости от капиталовложений
Филиалы
Млн. руб.
0
1
2
3
4
5
1-й
0
0.28
0.45
0.65
0.78
0.90
2-й
0
0.25
0.41
0.55
0.65
0.75
3-й
0
0.15
0.25
0.40
0.50
0.62
4-й
0
0.20
0.33
0.42
0.48
0.53
Пусть:
R(i,j) — прибыль, получаемая от вложения i млн. руб. в у-й филиал, где /е[0, 5],уе[1,4]'
1\А, 1,2) — оптимальное распределение средств, когда А млн. руб. вкладываются в 1 и 2-й филиалы вместе
F^A, 1, 2, 3) — оптимальное распределение средств, когда А млн. руб. вкладываются в 1, 2 и 3-й филиалы вместе
Е(А, 1, 2, 3, 4) — оптимальное распределение средств, когда А млн. руб. вкладываются в 1, 2, 3 и 4-й филиалы вместе
Очевидно, что
Е^А, 1, 2) = тах{/?(Л - /, 1) + КЦ, 2): /е[0, Л]},
Е<Л 1, 2, 3) = тах{Д/1 - i, 1, 2) + R(i, 3): /е[0, Л]},
ДА, 1, 2, 3, 4) = тах{ДЛ - /, 1, 2, 3) + R<i, 4): /е[0, Л]}.
Значения i, при которых достигается максимум, определяют оптимальные капиталовложения в филиалы.
Введите на листе модуля следующую программу, вычисляющую оптимальные капиталовложения по указанным выше формулам:
Option Explicit
Option Base 1
Sub DP()
Dim i, j, k, n, p, 1, t As Integer
Dim m, R(), A () As Double
k = 5
ReDim R(k+1, 4), A(k+1) For i = 1 To k+1 For j = 2 To 5 R(i, j-1) = Cells(i+2,j)-Value Next j Next i t=2 For p=2 To 4 If p=2 Then For j=l To k+1
A(j) = Cells(j+2,2).Value Next j End If If p > 2 Then For j=l To k+1
A(j) = Cells(j+2,p+3)-Value Next j End If For n=l To k+1 m=-l For j=l To n
If m < A(j)+R(n+1-j,p) Then m = A(j)+R(n+l-j, p) End If Next j Cells(n+2, 4+p)-Value = m l=t For j=l To n
If m = A(j)+R(n+l-j,p) Then Cells(n+5+k,1)-Value = j-1 Cells(n+5+k,1+1)-Value = n-j 1=1+2 End If Next j Next n t=l Next p
Переменной к присваивается значение, равное объему капиталовложений. В массив R с рабочего листа капиталовложения (рис. 7.41) вводится ожидаемая прибыль, распределенная по филиалам.
-. .,...■,
А .
В
с
. D . i '
F j
. G |
Hi 1 It
■ 1
Прибыль :
Максимумы
2
Млн. руб.
1
2
3
4
1 и 2
1, 2 и 3 1
,2 5 и 4|
3
0
0
0
0
0
0
0
0
4
1
0.28
0.25
0.15.0.2
0.28
0.28
0.28■
'5
2
С 45
0.41
0.25
0 33
0.53
0 53
0.53
0
3
0.65
0.55
0.4:
0.42
0.7
0.7
0 73)
4
0.78
0.65
0.50.48
0.0
0"9
0 9•
8
5
0.9
0.75
0.62
0.53
1.06
1.06
1.1
9
10
1 1
111
0
0
0
0
0
0
о:
12
1
1
0
10
1
0
Р СП№
:
2
1
1
2
0
2
0
дс. ение I 1
14 ‘
3
2
1
30
2
1
капитале- ■ j
15
4
3!1
4
0
4
0
ёлёжении
16
5
3
2
5
0
4
1
17
■
18
Млн. руб.
1
2
1 и 2
3
1, 2 и 3
4
“111
> |>1^ Капитаяовяоженыя/1 < j
Рис. 7.41. Результат нахождения оптимальной схемы капиталовложений
В диапазон ячеек F3:H8 программа dp выводит значения F^A, 1, 2), F^A, 1, 2, 3) и F^A, 1, 2, 3, 4). В диапазон ячеек B11:G16 программа dp выводит оптимальное распределение капиталовложения по филиалам. Из рис. 7.41 видно, что максимальная ожидаемая прибыль равна 1,1 млн. руб., а оптимальные капиталовложения состоят в выделении 1-му филиалу 3 млн. руб., 2-му филиалу — 1 млн. руб. и 4-му филиалу — 1 млн. руб.
Расчет краткосрочной ссуды с использованием диалогового окна
В данном разделе рассмотрим пример оформления расчета краткосрочной ссуды с использованием диалогового окна.
Создайте рабочую книгу, состоящую из трех листов: рабочего — Расчет ссуды, диалогового — Ссуда и листа модуля. В ячейку D1 рабочего листа Расчет ссуды введем размер ссуды, в ячейку D2 — дату выдачи ссуды, в ячейку D3 — дату возврата ссуды, в ячейку D4 — процентную ставку и в ячейку D5 — возвращаемую сумму денег. На листе диалога Ссуда создайте диалоговое окно расчет краткосрочных ссуд, как показано на рис. 7.42.
Рис. 7.42. Расчет краткосрочной ссуды
Все расчеты и заполнение ячеек рабочего листа будет осуществлять следующая программа, которую необходимо набрать на листе модуля:
Sub Диалог()
Dialogsheets("Ссуда").EditBoxes(5).Enabled = False Dialogsheets("Ссуда").Show
End Sub
Sub Ссуда()
Dim P, R, i As Double
Dim D_beginning, D_end As Date
With Dialogsheets("Ссуда")
P = CDbl(.EditBoxes(1).Text)
D_beginning = CDate(.EditBoxes(2).Text)
D_end = CDate(.EditBoxes(3).Text) i = CDbl(.EditBoxes(4).Text)/100 End With
If D_end < D_beginning Then
MsgBox "Ошибка в датах", vbExclamation, "Расчет ссуды" Exit Sub
End If
R = P*(1+i)A((D_end - D_beginning)/365)
R = Format(R, "Fixed")
Dialogsheets("Ссуда").EditBoxes(5).Text = CStr(R) Range("DI").Value = P
Range("D2").Value = D_beginning
Range("D3").Value = D_end
Range("D4").Value = i Range("D5").Value = R End Sub
Sub Cl()
With Dialogsheets("Ссуда") -EditBoxes(1).Text = "" .EditBoxes(2).Text = "" .EditBoxes(3).Text = "" .EditBoxes(4).Text = ”” .EditBoxes(5).Text = "" End With
Range("DI:D5").Clear
End Sub
Назначьте процедуры следующим кнопкам:
Диалог Кнопке Расчет ссуды рабочего листа Расчет ссуды
Ссуда Кнопке Вычислить диалогового окна Расчет краткосрочных ссуд
С1Кнопке Очистить диалогового окна Расчет краткосрочных ссуд
В процедуре Ссуда проверяется корректность ввода дат, которая в случае
несогласования дат выдает сообщение (рис. 7.43).
Рис. 7.43. Сообщение о некорректном вводе датыРис. 7.43. Сообщение о некорректном вводе даты
Рис. 7.43. Сообщение о некорректном вводе даты
Рис. 7.43. Сообщение о некорректном вводе даты
Приведем необходимое пояснения к программе.
Свойство Enabled определяет возможность внесения изменений в объекты управления (изменение положение переключателя, ввод текста в поле ввода
и т. д.). Задание этого свойства равным True позволяет вносить изменения в объект, a False — не позволяет. В нашем примере в пятое поле ввода выводятся числа, вычисленные программой. Для того чтобы их невозможно было изменить, в процедуру Диалог включена команда
Dialogsheets("Ссуда").EditBoxes(5).Enabled = False
Расчет числа выплат с использованием диалогового окна
В данном разделе рассмотрим пример оформления расчета числа периодических выплат при фиксированной процентной ставке с использованием диалогового окна.
Создайте рабочую книгу, состоящую из трех листов: рабочего — Расчет срока платежей, диалогового — Выплаты и листа модуля. В ячейку D1 рабочего листа Расчет срока платежей введем размер ссуды, в ячейку D2 — процентную ставку, в ячейку D3 — величину периодических выплат и в ячейку D5 — вычисляемое число выплат. На листе диалога выплаты создайте диалоговое окно расчет числа выплат, как показано на рис. 7.44.
Рис. 7.44. Расчет числа выплат
Все расчеты и заполнение ячеек рабочего листа будет осуществлять следующая программа, которую необходимо набрать на листе модуля:
Sub Start()
Dialogsheets("Выплаты").Show
DialogSheets("Выплаты").EditBoxes(4).Enabled = False End Sub
Sub Calc()
Dim A, P, n, i As Double
With DialogSheets("Выплаты") P = CDbl(.EditBoxes(1).Text) i = CDbl(.EditBoxes(2).Text)/100 A = CDbl(.EditBoxes(3).Text) End With If Application.IsNumber(Application.NPer(i, -A, P)) = False Then
MsgBox "Ошибка в данных." & Chr(13) & _ "Долг растет быстрее, чем производятся выплаты.", _ vbExclamation, "Расчет числа выплат"
Exit Sub End If n = Application.NPer(i, -A, P) n = Format(n, "Fixed")
DialogSheets("Выплаты").EditBoxes(4).Text = CStr(n) With Sheets("Расчет срока платежей") .Range("DI").Value = P .Range("D2").Value = i .Range("D3").Value = A .Range("D4").Value = n
End With End Sub
Sub CLL ()
With DialogSheets("Выплаты") .EditBoxes(1).Text = "" .EditBoxes(2).Text = "" .EditBoxes(3).Text = "" .EditBoxes(4).Text = "" End With
Range("DI:D4").Clear
Назначьте процедуры следующим кнопкам:
StartКнопке Расчет числа выплат рабочего листа Расчет срока платежей
CalcКнопке Вычислить диалогового окна Расчет числа выплат
CLLКнопке Очистить диалогового окна Расчет числа выплат
Приведем необходимые пояснения к программе.
Число выплат вычисляется функцией NPer. В процедуру Calc введена проверка корректности ввода данных, которая в случае неверного ввода выдает соответствующее сообщение (рис. 7.45).
Рис. 7.45. Сообщение об ошибке в данныхРис. 7.45. Сообщение об ошибке в данных
Рис. 7.45. Сообщение об ошибке в данных
Рис. 7.45. Сообщение об ошибке в данных
Некорректность данных проверяется с помощью функции isNumber. Функция isNumber принимает значение True, если ее аргумент — число, и False — в противном случае. Функцией рабочего листа, соответствующей IsNumber, ЯВЛЯеТСЯ ЕЧИСЛО.
Приведем другие функции рабочего листа, которые используются для проверки типа значения или ссыпки. Каждая из этих функций проверяет тип значения и, в зависимости от него, возвращает логическое значение истина или ложь. Например, функция епусто возвращает логическое значение истина, если проверяемое значение является ссылкой на пустую ячейку, в противном случае возвращается логическое значение ложь.
ЕЛОГИЧ
ISLOGICAL
Проверяемая величина является логическим значением
ЕНД
ISNA
Проверяемая величина является значением ошибки #н/д
ЕНЕТЕКСТ
ISNOTEXT
Проверяемая величина не является текстом
ЕОШ
ISERR
Проверяемая величина является одним из возможных ошибочных значений Excel за исключением #н/Д
ЕОШИБКА
ISERROR
Проверяемая величина является одним из возможных ошибочных значений Excel
ЕПУСТО
ISBLANK
Проверяемая величина является ссылкой на пустую ячейку
ЕССЫЛКАISREFЕТЕКСТISTEXTЕЧИСЛОISNUMBERЕССЫЛКАISREFЕТЕКСТISTEXTЕЧИСЛОISNUMBERПроверяемая величина является ссылкой
ЕССЫЛКАISREF
ЕТЕКСТISTEXT
ЕЧИСЛОISNUMBER
ЕССЫЛКАISREF
ЕТЕКСТISTEXT
ЕЧИСЛОISNUMBER
Проверяемая величина является текстом
Проверяемая величина является числом
Расчет амортизации и ипотеки с использованием диалогового окна
Расчет амортизации
В данном разделе рассмотрим пример оформления расчета амортизации двумя методами с использованием диалогового окна. Выбор методов амортизации производится с помощью переключателя. В случае использования А-кратного учета амортизации дополнительно вводится значение к
Создайте рабочую книгу, состоящую из трех листов: рабочего — Расчет амортизации, диалогового — Амортизация и листа модуля (рис. 7.46).
Рис. 7.46. Расчет амортизацииРис. 7.46. Расчет амортизации
Рис. 7.46. Расчет амортизации
Рис. 7.46. Расчет амортизации
В ячейку D1 рабочего листа Расчет амортизации введем стоимость, в ячейку D2 — остаточную стоимость, в ячейку D3 — полное время амортизации, в ячейку D4 —- год амортизации, в ячейку D5 — метод амортизации и в ячейку D6 — величину амортизации. На листе диалога Амортизация создайте диалоговое окно Расчет амортизации, как показано на рис. 7.46. Все расче-
ты и заполнение ячеек рабочего листа будет осуществлять следующая программа, набираемая на листе модуля
Sub Start()
DialogSheets("Амортизация").Show
Dialogsheets("Амортизация").OptionButtons(1).Value = xlOn DialogSheets("Амортизация").EditBoxes(5).Enabled = False DialogSheets("Амортизация") .EditBoxes (6) .Visible = False DialogSheets("Амортизация").Labels(6).Visible = False DialogSheets("Амортизация").Spinners(1).Visible = False End Sub
Sub Calc()
Dim В, E, a As Double
Dim Ye, Yc, k As Integer
Dim Flag As Boolean
With DialogSheets("Амортизация")
В = CDbl(.EditBoxes(1).Text)
E = CDbl(.EditBoxes(2)-Text)
Ye = CInt(.EditBoxes(3).Text)
Yc = CInt(-EditBoxes(4).Text) .Spinners(1)-Min = 2 End With If В < E Then
MsgBox "Остаток больше начальной стоимости", _ vbExclamation, "Амортизация"
Exit Sub
End If
If Ye < Yc Then
MsgBox "Ошибка в сроке амортизации", _ vbExclamation, "Амортизация"
Exrt Sub
End If
If DialogSheets("Амортизация").OptionButtons(1).Value =xlOn Then Flag=True
Else
Flag=False
If Flag=True Then a=Application.Syd(В, E, Ye, Yc) Else
k=CInt(DialogSheets("Амортизация").EditBoxes(6).Text) a=Application.Ddb(В, E, Ye, Yc, k) End If
If a>= 0.01 Then a=Format(a, "Fixed") Else a=0 DialogSheets("Амортизация").EditBoxes(5).Text=CStr(a) Range("DI").Value=B Range("D2").Value=E
Range("D3").Value=Ye
Range("D4"),Value=Yc
Range("D6").Value=a
If Flag=True Then
Range("D5") .Уа1ие="стандартным методом" Else
Range ("D5") .Уа1ие="методом " & CStr(k) & _" кратного учета амортизации"
End If
End Sub
Sub SWI()
Dialogsheets("Амортизация").Labels(6).Visible = True
DialogSheets("Амортизация").EditBoxes(6).Visible = True DialogSheets("Амортизация").Spinners(1).Visible = True End Sub
Sub SWIK)
DialogSheets("Амортизация").Labels(6).Visible = False DialogSheets("Амортизация").Spinners(1).Visible = False DialogSheets("Амортизация").EditBoxes(6).Visible = False End Sub
Sub Cie()
Dim i As Integer
With DialogSheets("Амортизация") For i = 1 To 6 .EditBoxes(i).Text = ""
Next i
End With
Range("DI:D6").Clear
End Sub
Sub DoSpO
With ActiveDialog .EditBoxes(6).Text = CStr(.Spinners(1).Value)
End With
End Sub
Sub BackSp()
With ActiveDialog .Spinners(1).Value = CInt(.EditBoxes(6).Text)
End With
End Sub
Процедуру Start назначьте кнопке Расчет амортизации рабочего листа Расчет амортизации. Процедуру Calc свяжите с кнопкой Вычислить, а процедуру С1е — С КНОПКОЙ Очистить ОКНЗ диалога Расчет амортизации.
Процедуры swi и swil свяжите с первой и второй кнопками переключателя, соответственно. Они обеспечивают появление в диалоговом окне и исчезновение из него поля ввода Кратность метода в зависимости от того, стоит ли Переключатель В положении Метод к кратного учета.
Появлением и исчезновением в диалоговом окне элементов управления управляет свойство visible. Это свойство возвращает True, если графический объект видим, и False — в противном случае. Процедуры DoSp и BackSp обеспечивают работу счетчика.
Расчет ипотеки
Вид диалоговых окон можно оживлять, внедряя в них через буфер обмена графические объекты и художественно оформленные тексты. На рис. 7.47 приведен пример оформления диалогового окна расчета ипотечной ссуды. Программа расчета ипотечной ссуды приведена ниже.
Sub Ипотека_диалог()
Dialogsheets("Диалог_ипотеки").Show
Dialogsheets("Диалог_ипотеки").EditBoxes(5).Enabled = False
Dialogsheets("ДиалоГ—ИПотеки").EditBoxes(6).Enabled = False
Dialogsheets("Диалог ипотеки").EditBoxes(7).Enabled = False
Рис. 7.47. Расчет ипотечной ссуды
End Sub
Sub Ипотека_расчет()
Dim А, Р, i, iFirst, PSum, PPer As Double
Dim n As Integer
Dim Fl As Boolean
With Dialogsheets("Диалог_ипотеки") P = CDbl(.EditBoxes(1).Text) iFirst = CDbl(.EditBoxes(2).Text)/100 i = CDbl(.EditBoxes(3).Text)/100 n = CInt(.EditBoxes(4).Text)
If .OptionButtons(1).Value = xlOn Then Fl = True
Else
Fl = False
End If
End With
PS = P * (1 - iFirst)
If Fl = True Then
A = Application.Pmt(i/12, n * 12, -PS) PSum = A * n * 12
Else
A = Application.Pmt(i, n, -PS)
PSum = A * n
End If
PPer = PSum - PS
A = Format(A, "###.##")
PSum = Format(PSum, "###.##") PPer = Format(PPer, "###.##") With Dialogsheets("Диалог_ипотеки") .EditBoxes(5).Text = CStr(A) .EditBoxes(6).Text = CStr(PSum) .EditBoxes(7).Text = CStr(PPer)
End With
End Sub
Расчет постоянных периодических выплат с построением диаграммы из диалогового окна
В данном разделе рассмотрим пример оформления расчета постоянных периодических выплат с построением диаграммы из диалогового окна.
Создайте рабочую книгу, состоящую из трех листов: рабочего — Гр_программа, ДИЗЛОГОВОГО — Период, выплаты И ЛИСТа МОДУЛЯ (рис. 7.48).
Рис. 7.48. Расчет постоянных периодических выплат
В ячейку D3 рабочего листа гр_программа введем размер ссуды, в ячейку D4 — количество выплат. В диапазон ячеек D1:G1 введем процентные ставки, а в диапазон D2:G2— соответствующие постоянные периодические выплаты. На ЛИСТе диалога Период, выплаты Создайте диалоговое ОКНО Расчет периодических выплат, как показано на рис. 7.49.
Рис. 7.49. Диалоговое окно расчета постоянных периодических выплат
Все расчеты и заполнение ячеек рабочего листа будет осуществлять следующая программа, которую необходимо набрать на листе модуля:
Sub Дисплей() Dialogsheets("Период. выплаты").Show End Sub
Sub Выплаты()
Dim P, ib, ie, ist As Double
Dim k, i, n, m As Integer
Dim A(), B() As Double
Dim S(), Bl() As String
Dim Area As Object
With DialogSheets("Период, выплаты")
P = CDbl(.EditBoxes(1).Text) k = CInt(.EditBoxes(2).Text) ib = CDbl(.EditBoxes(3).Text)/100 ie = CDbl(.EditBoxes(4).Text)/100 ist = CDbl(.EditBoxes(5).Text)/100 End With
If ie < ib Or ie < ib + ist Then
MsgBox "Ошибка в ставках", vblnformation
Exit Sub
End If
Set Area = ActiveSheet.Cells(1, 4).CurrentRegion n = Area.Columns.Count ActiveSheet.Range(Cells(1, 4), Cells(2, n+3)).Clear m = (ie - ib)/ist + 1 ReDim A(1 To m) ReDim B(1 To m) ReDim Bl(1 To m) With ActiveSheet
For i = 1 To m
B(i) = ib + ist*(i - 1)
A(i) = Application. Pint (B (i) , к, -P) A(i) = Format(A(i), "##")
Bl(i) = CStr(Format(B(i), "00.0%")) .Cellsd, 4 + i - 1) .Value = Bl(i) .Cells(2, 4 4 i - 1).Value = A(i) Next i
End With With ActiveSheet .Range("D3").Value = P .Range("D4").Value = к End With ReDim S(1 To m) For i = 1 To m
S(i) = CStr(Bl(i)) & "" & CStr(A(i)) & " p."
Next i With Dialogsheets("Период, выплаты")
.DropDowns(1) .RemoveAl11terns For i = 1 To m .DropDowns(1).Additem S(i), i Next i
.DropDowns(1).Value = 1
End With
ActiveSheet.Chartobjects.Delete End Sub
Sub График()
Dim Area As Object
Dim n, i As Integer
Set Area = ActiveSheet.Cells(1, 4).CurrentRegion n = Area.Columns.Count
ActiveSheet.Chartobjects.Add(195, 30, 200, 190).Select Application.CutCopyMode = False ActiveChart.Chartwizard Source:= _
Range(Cells(1, 4), Cells(2, n + 3)), _ Gallery:=xlColumn, Format:=1, PlotBy:=xlRows, CategoryLabels:=l, __ SeriesLabels :=0, HasLegend:=2, Т1Ь1е:="Диаграмма", _ CategoryTitle:="Ставка", ValueTitle:^"Выплаты", ExtraTitle:="" End Sub
Sub Clea()
Dim Area As Object Dim n, i As Integer For i = 1 To ActiveSheet.Chartobjects.Count ActiveSheet.ChartObjects(i) .Delete Next i Set Area = ActiveSheet.Cells(1, 4).CurrentRegion n = Area.Columns.Count With ActiveSheet
.Range(Cells(1, 4), Cells(2, n + 3)).Clear .Range("D3").Clear .Range("D4").Clear
End With
End Sub
Процедуры данной программы выполняют следующие действия:
Дисплей Назначена кнопке Расчет рабочего листа Гр_программа. Активизирует диалоговое окно Расчет периодических выплат
CleaНазначена кнопке Очистить диалогового окна. Очищает поля диа
логового окна, ячейки рабочего листа и удаляет с рабочего листа все диаграммы
ГрафикГрафикНазначена кнопке График диалогового окна. Строит график
График
График
ВыплатыВыплатыНазначена кнопке Вычислить диалогового окна Расчет периодических выплат. Проверяет правильность ввода процентных ставок. В случае некорректного ввода появляется сообщение, показанное на рис. 7.50. При правильном вводе начальной и конечной процентных ставок и шага их изменения процедура Выплаты очищает первую и вторую строку рабочего листа Гр_программа от результатов предыдущих вычислений, вычисляет размер периодических выплат, заполняет ячейки первой и второй строк значениями процентной ставки и соответствующими величинами выплат и выводит их в раскрывающемся списке Ставки и выплаты
Выплаты
Выплаты
Рис. 7.50. Сообщение об ошибке ввода начальных данных
Приведем необходимые пояснения к программе.
Для заполнения раскрывающегося списка ставки и выплаты в процедуре Выплаты использована следующая конструкция:
ReDim S(1 То ш)
For i = 1 То m
S(i) = CStr(Bl(i)) & " " & CStr(A(i)) & " p." Next i
With DialogSheets("Период. выплаты")
.DropDowns(1).RemoveAlIIterns
For i = 1 To m
.DropDowns(1).Additem S(i), i Next i
.DropDowhs(1).Value = 1
End With
Chartobjects возвращает набор всех диаграмм, а примененный к нему метод Delete их удаляет. .Следовательно, конструкция:
ActiveSheet.ChartObjects.Delete
использованная в процедуре выплаты, удаляет все ранее созданные на активном листе диаграммы.
Метод Add, примененный к chartobjects, создает новый графический объект, определяя координату его левого верхнего угла, высоту и ширину. Еди-
ницей измерения является 1/72 дюйма, а точка с координатами (0, 0) располагается в левом верхнем углу ячейки А1. В общем случае синтаксис метода Add имеет вид:
Add(left, top, width, height)
где left, top — координаты левого верхнего угла, width и height — ширина и высота создаваемого графического объекта. Например, использованная в процедуре график конструкция
ActiveSheet.Chartobjects.Add(195, 30, 200, 190).Select
создает на активном листе пустую диаграмму с левым верхним углом в точке с координатами (195, 30), шириной 200 и высотой 190.
Метод chartwizard вводит данные и форматирует ранее созданную диаграмму. В процедуре график строится график с помощью следующей конструкции:
ActiveChart.Chartwizard Source:= _
Range(Cells(1, 4), Cells(2, n + 3)), _
Gallery:-xlColumn, Format:=!,_
PlotBy:-xlRows, CategoryLabels:=1, _
SeriesLabels :=0, HasLegend:=2, _
Title:-"Диаграмма", _
CategoryTitle:-"Ставка", _
ValueTitle:-"Выплаты",
ExtraTitle:—""
Опишем переменные метода chartwizard:
SourceОпределяет диапазон ячеек, по которому строится диаграмма
GalleryОпределяет тип диаграммы из второго диалогового окна масте
ра диаграмм. В табл. 7.11 приведены допустимые значения этой переменной
FormatОпределяет вид диаграммы из третьего диалогового окна мас
тера диаграмм. Ей присваивается порядковый номер этого вида
PlotByОпределяет, располагаются данные по строкам (xlRows) или по
столбцам (xlColumns)
CategoryLabels Определяет количество столбцов (строк), отводимых под метки по оси X
SeriesLabelsОпределяет количество столбцов (строк), отводимых под легенду
HasLegendОпределяет, нужно отображать легенду (в этом случае пере
менной присваивается значение 1) или нет (присваивается 2)
TitleОпределяет текст заголовка диаграммы
CategoryTitle Определяет название оси х
ValueTitleОпределяет название оси у
ExtraTitleОпределяет название оси г
Таблица 7.11. Типы диаграмм
Тип диагрммы
Значение переменной Gallery
Гистограмма
xlColumn
Г рафик
xlLine
Круговая
xlPie
Кольцевая
xlDoughnut
Лепестковая
xlRadar
Точечная
xlXYScatter
Смешанная
xlCombination
С областями
xl3Darea
Линейчатая
xl3Dbar
Г истограмма
xl3Dcolumn
Г рафик
xl.3Dline
Круговая
xl3Dpie
Поверхность
xl3Dsurface
Как видно из предыдущих примеров, при написании приложений на VBA довольно часто приходится использовать громоздкие конструкции. Для облегчения их составления рекомендуется использовать макрорекодер. С помощью макрорекодера все действия, производимые пользователем, записываются на языке VBA. Программа, создаваемая макрорекодером, называется макрос. Создавая макросы, можно ускорить написание программ и разобраться, как работает та или иная процедура. Однако надо помнить, что макрорекодер создает непропорционально длинные программы даже для
простых задач. Рассмотрим процесс работы с ним на примере создания макроса построения графика.
Запись макроса начинается с помощью команды Сервис, Макрос, Начать запись (Tools, Record Macro, Record New Macro). В поле Имя макроса (Macro Name) открывшегося диалогового окна Запись макроса (Record Macro) вводится имя макроса (рис. 7.51).
Рис. 7.51.Диалоговое окноЗапись макросаРис. 7.51.Диалоговое окноЗапись макроса
Рис. 7.51.
Диалоговое окно
Запись макроса
Рис. 7.51.
Диалоговое окно
Запись макроса
По умолчанию VBA присваивает макросам имена: макрос!, Макрос2 (Macro!, масго2) и т. д. Нажатие кнопки Параметры (Options) открывает расширенное диалоговое окно Запись макроса (Record Macro), позволяющее установить требуемые параметры макроса (рис. 7.52).
Рис. 7.52. Диалоговое окно параметров макроса
После нажатия кнопки ОК создается лист модуля, на котором будет записываться макрос. Кроме того, на экране появится окно с кнопкой (рис. 7.53), нажатие которой завершает запись макроса.
Рис. 7.53. Кнопка завершения записи макроса
Другим способом завершения записи является команда Сервис, Запись макроса, Остановить запись (Tools, Record Macro, Stop Recording).
В данном примере на листе модуль 1 будет создан следующий макрос:
' Макрос! Макрос
* Макрос записан 14.08.98
Sub Макрос!()
Range("А!").Select ActiveCell.FormulaRlCl = "1" Selection.AutoFill Destination:=Range("Al:DI"), Type:=xlFillSeries Range("Al:DI").Select Range("A2").Select ActiveCell.FormulaRlCl = "2"
Range("B2").Select
ActiveCell.FormulaRlCl = "4"
Range("C2").Select
ActiveCell.FormulaRlCl = "6"
Range("D2").Select
ActiveCell.FormulaRlCl = "7"
Range("D3").Select
ActiveSheet.Chartobjects.Add(198.75, 54.75, 168, 117.75).Select Application.CutCopyMode = False
ActiveChart.Chartwizard Source:= Range("Al:D2"), _ Gallery:=xlColumn, Format:=1, _ PlotBy:=xlRows, CategoryLabels:=1, SeriesLabels :=0, HasLegend:=2, _ Т111е:="Диаграмма", CategoryTitle:="Недели", _ ValueTitle:="C6biT", _ ExtraTitle:="" End Sub
Для выполнения макроса необходимо воспользоваться командой Сервис, Макрос (Tools, Macro). В открывшемся диалоговом окне Макрос (Macro) в поле Имя макроса/Ссылка (Macro Name/Reference) следует указать имя макроса и щелчком на кнопке Выполнить (Run) запустить его на выполнение (рис. 7.54).
Рис. 7.54. Диалоговов окно МакросРис. 7.54. Диалоговов окно Макрос
Рис. 7.54. Диалоговов окно Макрос
Рис. 7.54. Диалоговов окно Макрос
Программирование расчета годовой процентной ставки с помощью команды Подбор параметра
В данном разделе рассматривается задача нахождения годовой процентной ставки, при которой вы планируете накопить 1000 руб. в течение 10 лет. Предлагается б вариантов величины начального вклада в банк: 150, 200, 250, 300, 350 и 400 руб. Конечно, данную задачу можно решить с помощью функции пз, выполнив команду Подбор параметра (Goal Seek) шесть раз, но это довольно утомительно.
Значительно проще составить программу. В ячейку СЗ рабочего листа Нел ур введите сумму накоплений, а в ячейку D3 — число лет. Введите в диапазон ячеек АЗ:А8 размеры первоначальных вкладов, а диапазон ячеек ВЗ:В8 отведите под соответствующие годовые процентные ставки (рис. 7.55).
1 1
A
I в
с
D
Е
—
2
Ежегодная выплата
Годовая ставка
Сумма накоплений
Число лет
Старт
3
150
0.081441678
1000
10
150.
4
200
0150984145
200
5
250
0.214064943
250
6
300
0.273198463
300
7
350
' 0.329753139
350
8
400
0 384548196
400
8
I.hJj
ИЖ^о
Е‘Г.1 ......... . ..;„..,,'
1
Рис. 7.55. Расчет годовой процентной ставки
На листе модуля введите следующую программу и назначьте процедуру уравнение кнопке Старт рабочего листа Нел ур.
Sub Уравнение()
Dim i, j As Integer
Dim P, S As Double Dim T, Ti As String For i = 1 To 6 j = i + 2 With Sheets("Нел yp") S=.Cells(i + 2, 1).Value Ti="B" & LTrim(Str(j)) T="=C3*" & Ti & _ "*(1+" & Ti & ")AD3/((1+" & Ti & ")AD3-1)" .Cells(i + 2, 5).Formula = T .Cells(i +2, 5). GoalSeek _ Goal:=S, ChangingCell:=.Cells(i+2, 2) End With
Next i
End Sub
Результаты расчета процедуры уравнение представлены на рис. 7.55.
Приведем необходимые пояснения к данной процедуре.
FormulaFormulaСледующие свойства позволяют вводить в ячейку формулы:
Formula
Formula
Вводит формулу в ячейку, например
Range("Bl").Formula = "=SIN(A1)"
FormulaLocal
Эквивалентно свойству ячейки Formula и предназначено для ввода в ячейку неанглоязычных встроенных функций рабочего листа
FormulaArray
Вводит формулу в диапазон, например
Range("El:ЕЗ").FormulaArray = "=Sum(R1C1:R3C3) "
FormulaRlCl
Вводит формулу в ячейку в R1C1 формате, например
Range("Bl").FormulaRlCl = "=SQRT(R1C1)"
Таким образом, конструкция:
j = i + 2
S = .Cells(i + 2, 1).Value
Ti = "B" & LTrimfStr(j))
T = "=C3*" & Ti & "*(1+" & Ti & ")AD3/((1+" & Ti & ")AD3-1)"
SheetsfHen yp").Cells(i + 2, 5).Formula = T
при данном значении i вводит в ячейку Sheets("Нел ур") .Cells (i+2, 5) формулу. Например, если / = 2, то в ячейку ЕЗ вводится
=СЗ*ВЗ*(1+ВЗ)AD3/((1+ВЗ)AD3-1)
Данная формула позволяет найти размер ежегодных выплат при годовой ставке, введенной в ячейку ВЗ, сумме накоплений, введенной в ячейку СЗ и числе выплат, введенном в ячейку D3.
В VBA выполнение команды Подбор параметра (Goal Seek) обеспечивается следующей конструкцией:
Уст_в_Яч.GoalSeek Goal:=3начение, ChangingCell:= Изм_зн_яч
Опишем содержащиеся в ней переменные:
Уст_в_Яч
Ссылка на ячейку, содержащую левую часть уравнения, корень которого определяется
Значение
Правая часть уравнения, не содержащая неизвестной величины
Изм_зн_яч
Ссылка на ячейку, содержащую неизвестную
Программирование решения систем нелинейных уравнений с параметром
В данном разделе программируется решение следующей системы нелинейных уравнений:
х2+ у2 = 1,
2х + 3у = а,
где а е{0,1; 0,5; 0,9; 1,3; 1,7; 2,1; 2,5; 2,9; 3,3}.
Введите на листе модуля следующую программу:
Sub Система()
Dim F, XY, S As String
Dim i, n As Integer
Dim a As Double
n=9
For i=l To n
a=Sheets("Поиск_решения").Cells(5, i + 1).Value F="R8C" & LTrim(Str(i + 1))
XY="R6C" & LTrim(Str(i + 1)) & _ ":R7C" & LTrim(Str(i + 1))
S="=(R6C" & LTrim(Str(i + 1)) & _
"A2 + R7C" & LTrim(Str(i + 1)) & _
"A2-1)A2 + " & _
"(2*R6C" & LTrim(Str(i + 1)) & _
" + 3*R7C" & LTrim(Str(i + 1)) & _
" " & Trim(Str(a)) & ")A2"
Sheets("Поиск_решения").Cells(8, i + 1).Formula =S Application.ExecuteExcel4Macro String:= _ '" [SOLVER.XLA]SOLVER' !ПОИСК.РЕШЕНИЯ.ПАРАМЕТРЫ" & _ "(100, 100,0.000001,FALSE,FALSE, 1,1,1,0.005,FALSE)" Application.ExecuteExcel4Macro String:=_ "'[SOLVER.XLA]SOLVER'!ПОИСК.РЕШЕНИЯ.OK(!" _ & F & ", 3,0, ([qq.xlsjnoHCK решения!" & XY & "))" Application.ExecuteExcel4Macro String:= _ "'[SOLVER.XLA]SOLVER'!ПОИСК.РЕШЕНИЯ.ВЫПОЛНИТЬ(1)"
Next i
End Sub
Программа система выводит результат расчета на рабочем листе поиск решения (рис. 7.56).
Рис. 7.56. Решение системы нелинейных уравнений с параметромРис. 7.56. Решение системы нелинейных уравнений с параметром
Рис. 7.56. Решение системы нелинейных уравнений с параметром
Рис. 7.56. Решение системы нелинейных уравнений с параметром
Программа Система выводит в диапазон B5J5 значения параметра а. а в диапазоны B6:J6 и B7:J7 — соответствующие значения неизвестных х и у В качестве начального приближения принято (х, у) = (-1, 1). В диапазон B8J8 программа вводит следующие целевые функции:
=($В$6А2 + $В$7А2-1)А2 +(2*$В$6 + 3*$В$7-0.1)А2
=($С$6А2 + $С$7А2-1)А2 +(2*$С$6 4 3*$С$7-0.5)А2
=($J$6A2 + $J$7A2-1)A2 +(2*$J$6 + 3*$J$7-3.3)А2
Команда
Application.ExecuteExcel4Macro String:= _
"' [SOI,VER.XLA]SOLVER' !ПОИСК.РЕШЕНИЯ.ПАРАМЕТРЫ" & _
"(100, 100, 0.000001,FALSE,FALSE,1,1,1,0.005,FALSE)"
задает следующие параметры средства поиска решения:
100 с1000,000001100 с1000,000001Максимальное время (Max Time)
100 с
100
0,000001
100 с
100
0,000001
Предельное число итераций (Iterations)
Относительная погрешность (Tolerance)
Флажок Линейная модель (Assume Linear Model)
Флажок Показывать результаты итераций (Show Iteration Results)
Флажок Автоматическое масштабирование (Use Autamatic Scaling)
Снят
Снят
Снят
Положение Линейная (Tangent) переключателя группы Оценка (Estimates)
Установлено
Положение Прямые переключателя группы Производные (Derivatives)
Положение Ньютона (Newton) переключателя группы Метод (Search)
Установлено
Установлено
Команда
Application.ExecuteExcel4Macro String:= _
'" [SOLVER.XLA]SOLVER' !ПОИСК.РЕШЕНИЯ.OK(!" _
& F & ",3,0, ( [qq.xls]Поиск_решения1" & XY & "))"
устанавливает опции диалогового окна Поиск решения (Solver). Ее параметрами являются:
FСсылка на ячейку поля Установить целевую ячейку (Set Target Cell)
XY Диапазон ячеек поля Изменяя ячейки (By Changing Cells)
qq Рабочая книга, в которой решается оптимизационная задача
3Номер положения, в которое установлен переключатель группы Равной
(Equal То). В данном случае переключатель стоит в положении Значению (Value of)
0Число поля Значению (Value of)
Команда
String:='" [SOLVER.XLA]SOLVER'!ПОИСК.РЕШЕНИЯ.ВЫПОЛНИТЬ(1)"
запускает команду Поиск решения (Solver) на выполнение. Значение параметра, равное 1, указывает на то, что по завершении работы команды на экран не выводится диалоговое окно Результаты поиска решения (Solver Results) и в этом окне переключатель установлен в положение Сохранить найденное решение (Keep Solver Solution).
Если в диапазон B8J8 независимо от программы введены вышеупомянутые целевые функции, то программа значительно упрощается:
Sub Система()
Dim F, XY As String
Dim i, n As Integer Dim a As Double n=9 For i=l To n a=Sheets("Поиск_решения") .Cells (5, i + 1).Value F="R8C" & LTrim(Str(i + 1)) XY="R6C" & LTrim(Str(i + 1)) & ":R7C" & _ LTrim(Str(i + 1))
Application.ExecuteExcel4Macro String:= _ '"[SOLVER.XLA]SOLVER'!ПОИСК.РЕШЕНИЯ.ПАРАМЕТРЫ(" & "100,100,0.000001,FALSE,FALSE,1,1,1,0.005,FALSE)" Application.ExecuteExcel4Macro String:= _ '"[SOLVER.XLA]SOLVER*!ПОИСК.РЕШЕНИЯ.OK(I"
& F & ",3,0,([qq.xls1Поиск_решения!" & XY & "))" Application.ExecuteExcel4Macro String:= _
"' [SOLVER.XLA]SOLVER * !ПОИСК.РЕШЕНИЯ.ВЫПОЛНИТЬ(1)" Next i
End Sub
Оптимальное планирование сбыта продукции
Рассмотрим следующую задачу. Фирма производит N видов продукции, аналоги которых выпускаются и другими фирмами. На основе анализа продаж можно оценить коэффициенты эффективности рекламы по каждому виду продукции (S^, показывающие, какая доля рынка принадлежит фирме в зависимости от ее затрат на рекламу. Так, если фирма тратит х,-, а ее конкуренты — у, на рекламу продукции i, то объем сбыта составит:
v,= -Aivj_. х, + а.
Примем издержки производства и сбыта (исключая затраты на рекламу) такими, что если фирма продает свою продукцию /-го вида в количестве Уь то ее валовая прибыль составит gjVj, где g, — прибыль с реализации единицы продукции. Таким образом, чистая прибыль фирмы равна:
N c ^ gjSj xt
N
Предположим, что фирма решила потратить на рекламу сумму не более X. Таким образом, на переменные х, накладываются следующие ограничения:
NN
N
N
х, > 0 , / е [1, 7V].
Необходимо найти оптимальное распределение средств на рекламу, максимизирующее валовую прибыль.
Для решения этой задачи создайте рабочую книгу с рабочим листом сбыт (рис. 7.57) и двумя листами окон диалога диалог! и диалог2, на которых создайте диалоговые окна, показанные на рис. 7.58 и 7.59, соответственно.
Рис. 7.57. Планирование сбыта продукции
Рис. 7.58. Диалоговое окно на листе Диалог!
Рис. 7.59.Диалоговое окно на листе Диалог2Рис. 7.59.Диалоговое окно на листе Диалог2
Рис. 7.59.
Диалоговое окно на листе Диалог2
Рис. 7.59.
Диалоговое окно на листе Диалог2
На листе модуля введите следующую программу:
Function P(s, g, х, a As Variant, n As Integer) As Double Dim i As Integer Dim t As Double t = 0 For i = 1 To n t = t + g(i) * s(i) * x(i) / (x(i) + a(i)) Next i For i = 1 To n t = t - x(i) Next i P = t
End Function
Sub Окно()
Sheets("Диалог!").Show End Sub
Sub Ввод()
Dim n, M As Integer n = CInt(Sheets("Диалог!").EditBoxes(1).Text) M = CInt(Sheets("Диалог!").EditBoxes(2).Text) Sheets("Сбыт").Cells(9, 2).Value = n Sheets("Сбыт").Cells(8, 2).Value = M End Sub
Sub DoSpinnerl()
With ActiveDialog
.Spinners(1).Min = 1 .Spinners(1).Max = 6
.EditBoxes(1).Text = CStr(.Spinners(1).Value) End With
End Sub
Sub BackSpinnerl()
With ActiveDialog .Spinners(1).Value = CInt(.EditBoxes(1).Text) End With
End Sub
Sub BackSpinner2()
With ActiveDialog .Spinners(2) .Value = CInt(.EditBoxes (2) .Text)
End With
End Sub
Sub DoSpinner2()
With ActiveDialog .EditBoxes(2).Text = CStr(.Spinners(2).Value) End With
End Sub
Sub Второй_ввод()
Dim n, M, i As Integer n = Sheets("Сбыт").Cells(9, 2).Value M = Sheets("Сбыт").Cells(8, 2).Value With Sheets("Диалог2") .Labels(2).Text = CStr(n) .Labels(6).Visible = False .Labels(8).Text = CStr(M)
End With
With Sheets("Диалог2") For i = 1 To n .EditBoxes(i).Visible = True .EditBoxes(i + 6).Visible = True .EditBoxes(i + 12).Visible = True
Next i
For i = n + 1 To 6 .EditBoxes(i).Visible = False
.EditBoxes(i + 6).Visible = False
.EditBoxes(i + 12).Visible = False Next i For i = 1 To 6
.EditBoxes(i + 18).Visible = False Next i
End With
Sheets("Диалог2").Show
End Sub
Sub Расчет()
Dim n, M As Integer
Dim F, TT, R2L, R2R, H, 1 As String
Dim s, g, x, a As Variant
Dim Ar As Object
Dim Q As Double
Set Ar = Range("Al").CurrentRegion Num = Ar.Columns.Count
Range(Cells(1, 2), Cells(4, Num)).Clear n = Sheets("Сбыт").Cells(9, 2).Value
Range(Cells(4, 2), Cells(4, n + 1)).NumberFormat = "0.00" M = Sheets("Сбыт").Cells(8, 2).Value F = "R6C2" TT = "R4C2:R4C" & LTrim(CStr(n + 1)) R2R = "=R8C2" R2L = "R7C2"
With Sheets("Диалог2")
For i = 1 To n
Sheets("Сбыт").Cells(1, 1 + i).Value = _
.EditBoxes(i).Text
Sheets("Сбыт").Cells(2, 1 + i).Value = _ .EditBoxes(i + 6).Text
Sheets("Сбыт").Cells(3, 1 + i).Value = _ .EditBoxes(i + 12).Text
Next i
End With
' в переменную 1, в зависимости от величины п, ' вводится имя последнего столбца,
' содержащего значения векторов д, а и S
Select Case n
= 1
1 - ."B"
= 2
1 = "C"
= 3
1 = "D"
= 4
1 = "E"
= 5
1 = "F"
= 6
1 = "G"
= 7
1 = "H"
End Select
Sheets("Сбыт").Cells(6, 2).FormulaLocal = _ "=P(B1:" & 1 & "1;B3:" & 1 & "3;B4:" & 1 & _ "4;B2:" & 1 & **2;B9)"
Sheets("Сбыт").Cells(7, 2).FormulaLocal = _ "=СУММ(В4:" & 1 & "4)"
Application.ExecuteExcel4Macro String:= _ "*[SOLVER.XLA]SOLVER*!ПОИСК.РЕШЕНИЯ.OK(!" _ & F & ",l,0, ( [pr5.xls]Сбыт!" & TT & "1)"
Application.ExecuteExcel4Macro String:= _
"'[SOLVER.XLA]SOLVER*!ПОИСК.РЕШЕНИЯ.ДОБАВИТЬ( ! " & TT & ",3,""=0"")"
Application.ExecuteExcel4Macro String:= _ "'[SOLVER.XLA]SOLVER'!ПОИСК.РЕШЕНИЯ.ДОБАВИТЬ(!" _ & R2L & ",1,""" & R2R & """)"
Application.ExecuteExcel4Macro String:= _ "'[SOLVER.XLA]SOLVER*!ПОИСК.РЕШЕНИЯ.ПАРАМЕТРЫ" & "(100, 100, 0.000001,FALSE,FALSE,1,1,1,0.05,FALSE) "
Application.ExecuteExcel4Macro String:= _
"*[SOLVER.XLA]SOLVER'!ПОИСК.РЕШЕНИЯ.ВЫПОЛНИТЬ(2) " Sheets("Сбыт").Cells(4, 2 + n).Clear
With Sheets("Диалог2")
.Labels(6).Visible = True
For i = 1 To n
.EditBoxesd + 18).Visible = True
Q = Sheets("Сбыт").Cells(4, 1 + i).Value Q = Format(Q, "Fixed")
.EditBoxesd + 18).Text = CStr(Q)
Next i
End With
End Sub
Процедуры данной программы выполняют следующие функции:
р
Вычисляет чистую прибыль фирмы
Окно
Назначена кнопке Количество типов продукции и максимальный расход на рекламу. Активизирует диалоговое окно на листе Диалог!
Ввод
Назначена кнопке ОК диалогового окна на листе Диалог!.
Осуществляет ввод данных в ячейки рабочего листа Сбыт
DoSpinnerl, BackSpinnerl, DoSpinner2, BackSpinner2
Назначены счетчикам диалогового окна на листе Диалог! для ввода с их помощью данных
Второй_ввод
Назначена кнопке Ввод S, a, g и расчет оптимальных затрат. Активизирует диалоговое окно на листе Диалог2
Расчет
Назначена кнопке Вычислить диалогового окна на листе Диа- лог2. Производит расчет оптимальных вложений" средств и заполнение рабочего листа Сбыт
Приведем некоторые пояснения к программе.
В программе использовано свойство visible, задающее видимое и невидимое состояния графического объекта. Управление этим свойством определяет вид диалогового окна. Например, окно диалога на листе Диалог2 (рис. 7.59) с пятью типами продукции при вводе данных имеет вид, показанный на рис. 7.60, а при выводе — вид, показанный на рис. 7.61.
Команда
Application.ExecuteExce!4Macro String:= _
"'[SOLVER.XLA]SOLVER'!ПОИСК.РЕШЕНИЯ.ДОБАВИТЬ( ! " _
& R2L & ",!,""" & R2R & """)"
задает ограничения в диалоговом окне Поиск решения (Solver).
Рис. 7.60.Диалоговое окно на листе Диалог2 при вводе данныхРис. 7.60.Диалоговое окно на листе Диалог2 при вводе данных
Рис. 7.60.
Диалоговое окно на листе Диалог2 при вводе данных
Рис. 7.60.
Диалоговое окно на листе Диалог2 при вводе данных
Рис. 7.61.Диалоговое окно на листе Диалсг2 при выводе данныхРис. 7.61.Диалоговое окно на листе Диалсг2 при выводе данных
Рис. 7.61.
Диалоговое окно на листе Диалсг2 при выводе данных
Рис. 7.61.
Диалоговое окно на листе Диалсг2 при выводе данных
Строковой переменной R2L присвоена ссылка на диапазон ячеек, вводимых в поле Ссылка на ячейку (Cell Reference), а переменной R2R присвоена ссылка на диапазон ячеек, вводимых в поле Ограничение (Constraint) диалогового окна Добавление ограничения (Add Constraint). Тип ограничения задается цифрой, а именно:
Целое
Программирование рекламной кампании
В данном разделе рассмотрим задачу программирования рекламной кампании, рассмотренную в разделе 4.10. Напомним, что в этой задаче фирма еженедельно оценивает, как обстоят дела со сбытом одного из видов своей
продукции и дает оценку: отличную ("о" — состояние 1), хорошую ("х" — состояние 2) или удовлетворительную ("у" — состояние 3). Необходимо принять решение о целесообразности рекламирования этой продукции с целью расширения ее сбыта. Приведенные на рис. 7.62 в диапазонах B3:D5 и B6:D8 матрицы 7я и 7й определяют переходные вероятности без рекламы и при ее наличии в течение любой недели.
А Г
в
с
в . 1
Е ] F
" GF
Н' ч f
1 ■
Варианты
Р (Вероятности)
R (Прибыль)
Вычислить
2
U
X
У
0К
У ,.
3
0
0.2:
0.5
0.3
70006000
3000
4
1 X
0
0.5.
0.5
05000
1000
5
У
о;
0
1
0:0.
-1000
6
0
0 3:
0.6
0 1
60005000
-1000
7
2 x
о г
0.6
0.3
70004000
0
ч
8
У
0.05;
0.4
0.55
60003000
2000
9
। (Состояние)
F(3.i)
К
F(2j)
к F(V0
к
10
1
5300:
i
8190
2 10735.5
2
11
2
31 оо:
2
5610
2' 7922.5
2
12
3
400
2
2125
2 4222 25
2
V
h| «
И ^ХРеклама
2,М
.............
1 ?и
Рис. 7.62. Программирование рекламной кампании
Соответствующие доходы заданы матрицами R' и R2 в диапазонах E3:G5 и E6:G8. Процедура Реклама находит оптимальную рекламную кампанию на последующие N недель. Результаты расчета приведены на рис. 7.62, где F(n, i) — оптимальный ожидаемый доход за недели л, л+1, ..., N при начальном состоянии L Если k = 1, то нет необходимости рекламировать продукцию, а если к = 2, то ее рекламировать надо.
Sub Реклама()
Dim FP(1 То 3) As Double* m вектор
Dim F(1 To 3) As Double' m вектор
Dim №(1 To 3, 1 To 2) As Double ' m x s матрица Dim i, j, k, N, t, tt, s, m As Integer Dim p, r, g As Double 1 s - количество матриц перехода 1 m - количество состояний в матрице перехода ' N - количество временных периодов s = 2: m = 3: N = 3 For t = 1 То s For i = 1 To m
NU(i, t) = 0 For j = 1 To m
p = Cells(i + 2 + (t - l)*m, j + 1).Value r = Cells(i + 2 + (t - l)*m, j + m + 1).Value NU(i, t) = NU(i, t) + p*r Next j
Next i
Next t
в массив NU вводятся ожидаемые прибыли на первом шаге For i = 1 То ш F(i) = О Next i For t = N To 1 Step -1 For i = 1 To m FP(i) = F(i) Next i For i = 1 To m F(i) = NU(i, 1) For j = 1 To m
p = Cells(i + 2, j + 1).Value F(i) = F(i) + p*FP(j) Next j к = 1 For tt = 2 To s g = NU(i, tt) For j = 1 To m p = Cells(i + 2 + m*(tt - 1), j + 1).Value g=g+P*FP(j) Next j If g > F(i) Then F(i) = g к = tt End If Next tt
Cells(i + 3 + m * s, 2*N+3-2*t-l).Value = F(i) Cells (i + 3 + m * s, 2*N + 3- 2*t).Value = к Next i
Next t
End Sub
Упражнения
Задания на вычисление комиссионных, программирование сценариев и оптимальное управление запасами
Составить таблицу начисления премии по итогам работы сети и магазинов с месяца А по месяц В по следуюшему правилу:
Если продукции продано не меньше, чем на С руб., то комиссионные составляют /%
За первое место дополнительно начисляется j\%, за второе место — /2% и т. д., за k-е место дополнительно начисляется у^%
Вариант
С
i
ь
/2
/3
/о
n
А
В
1
23 000
1
з
1,5
3
Май
Июль
2
44 000
2
4
2
4
Июнь
Август
3
65 000
3
5
2,5
1,25
5
Июль
Ноябрь
4
86 000
4
6
з
1,5
0,75
6
Август
Февраль
5
107 000
5
7
3,5
1,75
0,88
7
Май
Декабрь
6
128 000
1
з
1,5
0,75
0,38
8
Октябрь
Январь
7
149 000
2
4
2
1
0,50
3
Ноябрь
Май
8
170 000
3
5
2,5
1,25
0,63
4
Декабрь
Май
9
191 000
4
6
з
1,5
5
Январь
Май
10
212 000
5
7
3,5
6
Февраль
Июнь
Составить таблицу начисления премии по итогам работы сети и магазинов с месяца А по месяц В по следующему правилу: если продукции продано меньше, чем на С[ руб., то премия составляет i\% от стоимости реализованной продукции; если продукции продано не меньше, чем на Q руб., по меньше, чем на С2 руб., то премия составляет /2%, и т. д.; если продукции продано не меньше, чем на Ск руб., то премия составляет ik+\%- N, А и В берутся из задания (а).
Вариант
с.
с2
Сз
fi
*2
/з
1
10 000
20 000
1
1,5
2,3
2
20 000
40 000
2
3,0
4,5
3
30 000
60 000
120 000
3
4,5
6,8
7,4
4
40 000
80 000
160 000
4
6,0
9,0
9,9
5
50 000
100 000
200 000
5
7,5
11,3
12,4
6
60 000
120 000
240 000
6
9,0
13,5
14,9
7
70 000
140 000
280 000
1
1,5
2,3
2,5
8
80 000
160 000
320 000
2
3,0
4,5
5,0
9
90 000
180 000
360 000
3
4,5
6,8
7,4
10
100 000
200 000
4
6,0
9,0
Составить ведомость расчета прибыли от товара, производимого из п видов комплектующих. В этой ведомости учесть к вариантов стоимости комплектующих и стоимость работы по комплектации. В качестве стоимостей взять любые двузначные числа.
Вариант
1
2
3
4
5
6
7
8
9
10
п
2
4
5
6
3
4
5
6
3
4
к
3
4
5
6
7
8
9
10
11
12
Рассмотрим следующую простую модель управления запасами. Уличный продавец покупает журналы у издательства по цене А руб. за штуку, а продает по цене В руб./шт. Если товар не реализован, то продавец возвращает его издательству по цене С руб. за штуку. Считаем, что продавец реализует журнал пачками по т штук. Продавец заметил, что за отчетный период он не реализовал ни одной пачки Ру раз, одну пачку — Р\ раз и т. д., к пачек — Р^ раз и при этом более Р^ пачек он никогда не продавал. Определить оптимальный объем закупки журналов, максимизирующий ожидаемую прибыль.
Вариант
А
В
С
т
Ро
Р,
Р2
Рз
Р4
Ps
1
18
20
10
3
3
10
17
21
15
3
2
17
22
9
4
2
7
14
10
4
3
19
24
8
5
3
8
16
14
9
4
(продолжение)
Вариант
АВСтРоPiР2 Рз Рд Ps
4
21261064615127
5
2028975111518113
6
1930836919157
7
1620114151621174
8
1522105• 241217115
9
142496391421146
10
1526774617147
Задания по работе с массивами
Пусть С — строка, состоящая из Пс элементов, и Gc — квадратная матрица «сх «с-
Вариант 1
(а) Построить
С^Й =С^Й =C2(z), i<j, sin(C(z)C(/ - у» + C\i), i>j,
С^Й =
С^Й =
где nc = 3 и С = (3, 4, 1).
(b) Вычислить
3 - ^ i=i3 - ^ i=i
3 - ^ i=i
3 - ^ i=i
где х, у — векторы с п компонентами,где х, у — векторы с п компонентами,b — матрица размерности м,b — матрица размерности м,причем п = 4, т = 2,причем п = 4, т = 2,
где х, у — векторы с п компонентами,
где х, у — векторы с п компонентами,
b — матрица размерности м,
b — матрица размерности м,
причем п = 4, т = 2,
причем п = 4, т = 2,
Вариант 2(а) ПостроитьВариант 2(а) ПостроитьGAun =GAun =sin2(C(0), i < j,CU-j) + cos(C(z)), i >j,sin2(C(0), i < j,CU-j) + cos(C(z)), i >j,где пр = 4 и С = (2, 4, 1, 7).где пр = 4 и С = (2, 4, 1, 7).(b) Вычислить(b) Вычислить
Вариант 2
(а) Построить
Вариант 2
(а) Построить
GAun =
GAun =
sin2(C(0), i < j,
CU-j) + cos(C(z)), i >j,
sin2(C(0), i < j,
CU-j) + cos(C(z)), i >j,
где пр = 4 и С = (2, 4, 1, 7).
где пр = 4 и С = (2, 4, 1, 7).
(b) Вычислить
(b) Вычислить
где а — вектор из т компонентов, с — матрица размерности пуп, причем п = 3, т = 4,
Г2Г2а = (3, 1, 2, 3)а = (3, 1, 2, 3)с — 2с — 2(2(22 4'4 65 3>2 4'4 65 3>
Г2
Г2
а = (3, 1, 2, 3)
а = (3, 1, 2, 3)
с — 2
с — 2
(2
(2
2 4'
4 6
5 3>
2 4'
4 6
5 3>
Вариант 3
Построить
IC(/) + ' + j1’ i "J ^3’ GAi,j) =
\са-П+Са)\ i-j>3, где nc = 5 и С = (6, 4, 2, 7, 6).
Вычислить /7пт т
+ 2^^2 + 5
3 + ^У1
где х, у — векторы из п компонентов, b — матрица размерности тхт, причем п = 4, т = 2,где х, у — векторы из п компонентов, b — матрица размерности тхт, причем п = 4, т = 2,(1, 2, 7, 4), j’ = (1, 7, 2, 3),6 =(1, 2, 7, 4), j’ = (1, 7, 2, 3),6 =42 5J42 5JВариант 4(а) ПостроитьВариант 4(а) ПостроитьGtUJ)GtUJ)C(OCU), i<j+2,C(i-j)2C(i), i>j+2.C(OCU), i<j+2,C(i-j)2C(i), i>j+2.где nc = 4 и C = (1, 2, 1, 7).где nc = 4 и C = (1, 2, 1, 7).(b) Вычислить(b) Вычислитьгде a — вектор из m компонентов, с —где a — вектор из m компонентов, с —п = 3, т = 4,п = 3, т = 4,матрица размерности пхп, причемматрица размерности пхп, причема = (3, 1. 2, 3),а = (3, 1. 2, 3),'22.2'22.22 4'4 65 3>2 4'4 65 3>Вариант 5(а) ПостроитьВариант 5(а) ПостроитьGAiJ) =GAiJ) =fsin(C(0)C(7), i<j + 2,fsin(C(0)C(7), i<j + 2,\CU-j)-C(i)\, i>J + 2,\CU-j)-C(i)\, i>J + 2,
где х, у — векторы из п компонентов, b — матрица размерности тхт, причем п = 4, т = 2,
где х, у — векторы из п компонентов, b — матрица размерности тхт, причем п = 4, т = 2,
(1, 2, 7, 4), j’ = (1, 7, 2, 3),6 =
(1, 2, 7, 4), j’ = (1, 7, 2, 3),6 =
4
2 5J
4
2 5J
Вариант 4
(а) Построить
Вариант 4
(а) Построить
GtUJ)
GtUJ)
C(OCU), i<j+2,
C(i-j)2C(i), i>j+2.
C(OCU), i<j+2,
C(i-j)2C(i), i>j+2.
где nc = 4 и C = (1, 2, 1, 7).
где nc = 4 и C = (1, 2, 1, 7).
(b) Вычислить
(b) Вычислить
где a — вектор из m компонентов, с —
где a — вектор из m компонентов, с —
п = 3, т = 4,
п = 3, т = 4,
матрица размерности пхп, причем
матрица размерности пхп, причем
а = (3, 1. 2, 3),
а = (3, 1. 2, 3),
'2
2
.2
'2
2
.2
2 4'
4 6
5 3>
2 4'
4 6
5 3>
Вариант 5
(а) Построить
Вариант 5
(а) Построить
GAiJ) =
GAiJ) =
fsin(C(0)C(7), i<j + 2,
fsin(C(0)C(7), i<j + 2,
\CU-j)-C(i)\, i>J + 2,
\CU-j)-C(i)\, i>J + 2,
где nc= 6 и C= (1, 3, 1, 7, 2, 2).
Вычислить
»n( m mnA(n
^ =+2X^ + XX^' 2 + X V- ~2 1 + X Xiyi
i=\(=1<1=1 /=1Д /=17ki=l )
1515где x, у — векторы из п компонентов, b — матрица размерности тхт, причем п = 4, т = 2,
1
5
1
5
х = (1, 2, 7, 4), ^ = (1, 7, 2, 3),6 =
Вариант 6
(а) Построить
СДгЙ =СДгЙ =ЗС(0-2С(Д /<У + 2,ЗС(0-2С(Д /<У + 2,\aj-j) - с(о3|, />у+2,\aj-j) - с(о3|, />у+2,
СДгЙ =
СДгЙ =
ЗС(0-2С(Д /<У + 2,
ЗС(0-2С(Д /<У + 2,
\aj-j) - с(о3|, />у+2,
\aj-j) - с(о3|, />у+2,
где пр — 7 и С = (1, 4, 1, 3, 4, 5, 7).
(Ь) Вычислить(Ь) Вычислить
(Ь) Вычислить
(Ь) Вычислить
где а — вектор из т компонентов, с — матрица размерности пхп, причем п = 3, т = 4,
<2<2а = (3, 3, 1, 3)а = (3, 3, 1, 3)с = 2с = 2(2(22 4'4 65 3>2 4'4 65 3>
<2
<2
а = (3, 3, 1, 3)
а = (3, 3, 1, 3)
с = 2
с = 2
(2
(2
2 4'
4 6
5 3>
2 4'
4 6
5 3>
Вариант 7Вариант 7(а) Построить(а) ПостроитьСДцЙ -СДцЙ -C(z)cos2(C(j)), /<7 + 1, |С(/-У)3-С(0|, />7 + 1,C(z)cos2(C(j)), /<7 + 1, |С(/-У)3-С(0|, />7 + 1,где пс= 4 и С= (1, 4, 8, 7).где пс= 4 и С= (1, 4, 8, 7).
Вариант 7
Вариант 7
(а) Построить
(а) Построить
СДцЙ -
СДцЙ -
C(z)cos2(C(j)), /<7 + 1, |С(/-У)3-С(0|, />7 + 1,
C(z)cos2(C(j)), /<7 + 1, |С(/-У)3-С(0|, />7 + 1,
где пс= 4 и С= (1, 4, 8, 7).
где пс= 4 и С= (1, 4, 8, 7).
(Ь) Вычислить(Ь) Вычислить
(Ь) Вычислить
(Ь) Вычислить
Сс0,Л =Сс0,Л =
Сс0,Л =
Сс0,Л =
где х, у — векторы из п компонентов, причем п = 4,
л = (1, 2, 7, 4), у = (1, 7, 2, 3)
Вариант 8
Построить
sin(C(i) + CU)), i< J + l ,
C(i-j) + 3C(i)-7C(j), i>j+l.
где nc = 5 и C = (2, 9, 1, 7, 3).
Вычислить
1 + ^i
где a — вектор из m компонентов, с — матрица размерности nxn, причем п = 2, т = 4,
Вариант 9
Построить
ГЗС(0 + 2С(;), i<j+2,
‘°’J’ " |sin(C(z - j» +1 3 C^ - 7 C(j) |, i > j + 2 , где nc = 6 и C= (1, 2, 1, 7, 8, 2).
Вычислить
где x, у — векторы из п компонентов, причем п = 4,
хЦт, 5, 7, 4),у = (2, 4, 2, 3) .
Вариант 10
Построить
СДцЙ -СДцЙ -> У + 1,> У + 1,|C(0-5C(/)|, z<y + l, C(z - у) + 4 sin(C(0) - 7 C(j)
СДцЙ -
СДцЙ -
> У + 1,
> У + 1,
где nc = 7 и С = (5, 1, 1,7, 1,2, 1).
Вычислить
//\
/ии иtnп п
$= i + jr^, i + XX^ -1-Х^+ 4XXfv’
< z=i / v ,=| м 7,=|'=• /='
где а — вектор из т компонентов, с — матрица размерности пхп, причем п = 3, т = 4,
"5 2 4'
а = (2, 1, 1, 3)а = (2, 1, 1, 3)с =с =1 4 2
а = (2, 1, 1, 3)
а = (2, 1, 1, 3)
с =
с =
7 3 5,
Задания на работу с базами данных
Построить диалог построения базы данных (рис. 7.63), имеющий п полей ввода, т раскрывающихся списков, к групп по два флажка, р групп по два переключателя и q полей ввода со счетчиками, используя следующую таблицу:
Вариант
п
т
к
Р
q
1
2
4
2
2
2
2
3
3
3
3
2
3
4
2
4
2
3
4
2
2
4
4
3
5
3
3
3
2
4
6
4
4
2
4
4
7
2
3
2
2
3
8
3
2
2
3
2
9
4
4
3
4
3
10
4
3
3
4
2
Рис. 7.63. Пример окна диалога построения базы данных
Задания на нахождение оптимального раскроя
Продукция бумажной фирмы выпускается в виде бумажных рулонов стандартной длины, равной L футам. По специальным заказам фирма поставляет потребителям рулоны и других размеров, для чего производится раскрой стандартных рулонов. Необходимо удовлетворить заказ, минимизируя отходы.
Вариант
L
Дл1
Шт1
Дл2
Шт 2
ДлЗ
ШтЗ
Дл4
Шт 4
1
22
3
100
5
150
6
320
7
320
2
23
3
120
4
160
5
325
6
330
3
24
4
140
5
170
6
330
8
340
4
25
4
160
6
180
7
335
8
350
5
26
5
180
6
190
8
340
9
360
6
27
7
200
8
200
9
345
10
370
7
28
4
220
6
210
9
350
11
380
8
29
5
240
7
220
9
355
10
390
9
30
4
260
11
230
12
360
13
400
10
18
3
280
4
240
5
365
6
410
Задания на определение оптимальных капиталовложений
Фирма по производству быстрого питания намерена вложить капитал в размере А млн. руб. в расширение производства. Фирма имеет п филиалов, расположенных в различных городах. В каждом из этих филиалов проведено изучение рынка и найдены математические ожидания прибыли как функции капиталовложений. Необходимо выработать оптимальный план капиталовложений, максимизирующий ожидаемую прибыль.
Вариант 1
Филиалы
Млн. руб.
0
1
2
3
4
5
6
I
0
0,31
0,45
0,65
0,69
0,90
1,02
II
0
0,22
0,41
0,55
0,65
0,75
0,80
111
0
0,18
0,24
0,40
0,50
0,62
0,73
IV
0
0,20
0,39
0,42
0,48
0,53
0,56
V
0
0,17
0,33
0,42
0,48
0,53
0,56
Вариант 2
Филиалы
Млн. руб.
0
1
2
3
4
5
6
I
0
0,31
0,45
0,65
0,69
0,90
1,02
II
0
0,22
0,41
0,55
0,65
0,75
0,80
III
0
0,18
0,24
0,40
0,50
0,62
0,73
IV
0
0,20
0,39
0,42
0,48
0,53
0,56
V
0
0,17
0,33
0,42
0,48
0,53
0,56
Вариант 3
Филиалы
Млн. руб.
0
1
2
3
4
5
6
1
0
0,13
0,13
0,14
0,14
0,15
0.15
11
0
0,14
0,15
0,15
0,15
0,15
0,15
III
0
0,12
0,12
0,13
0,13
0,13
0,14
IV
0
0,15
0,17
0,19
0,21
0,23
0,25
V
0
0,12
0,12
0,13
0,13
0,14
0.14
VI
0
0,13
0,14
0,14
0,15
0,15
0,16
Вариант 4
Филиалы
Млн. руб.
0
1
2
3
4
5
6
7
I
0
0,13
0,13
0,14
0,14
0,15
0,15
0,16
II
0
0,11
0,12
0,12
0,12
0,12
0,12
0,12
II!
0
0,13
0,13
0,14
0,14
0,14
0,15
0,15
IV
0
0,14
0,16
0,18
0,20
0,22
0,24
0,27
V
0
0,13
0,13
0,14
0,14
0,15
0,15
0,16
VI
0
0,12
0,13
0,13
0,14
0,14
0,15
0,15
Вариант 5
Филиалы
Млн. руб.
0
1
2
3
4
5
I
0
0,15
0.15
0,16
0,16
0,17
II
0
0,16
0,17
0,17
0,17
0,17
III
0
0,15
0,15
0,16
0,16
0,16
IV
0
0,17
0,19
0,21
0,23
0,25
V
0
0,16
0,16
0,17
0,17
0,18
Вариант 6
Филиалы
Млн. руб.
0
1
2
3
4
5
6
1
0
0,20
0,21
0,21
0,22
0,22
0,23
11
0
0,21
0,22
0,22
0,23
0,23
0,24
111
0
0,19
0,19
0,20
0,20
0,21
0,21
IV
0
0,18
0,20
0,22
0,24
0,26
0,29
V
0
0,21
0,21
0,22
0,22
0,23
0,23
VI
0
0,23
0,24
0,24
0,25
0,26
0,26
Вариант 7
Филиалы
Млн. руб.
0
1
2
3
4
5
6
7
I
0
0,11
0,11
0,12
0,12
0,13
0,13
0,14
II
0
0,12
0,13
0,13
0,13
0,13
0,13
0,13
111
0
0,18
0,18
0,19
0,19
0,20
0,20
0,20
IV
0
0,20
0,22
0,24
0,26
0,28
0,31
0,33
V
0
0,17
0.17
0,18
0,18
0,19
6,19
0,20
VI
0
0,17
0,18
0,18
0,19
0,19
0,20
0,21
Вариант 8
Филиалы
Млн. руб.
0
1
2
3
4
5
6
I
0
0,31
0,32
0,32
0,33
0,33
0,34
II
0
0,29
0,30
0,31
0,32
0,32
0,33
111
0
0,29
0,29
0,30
0,30
0,31
0,31
IV
0
0,28
0,30
0,32
0,34
0,37
0,39
V
0
0,32
0,33
0,33
0,34
0,34
0,35
Вариант 9
Филиалы
Млн. руб.
0
1
2
3
4
5
6
I
0
0,15
0,15
0,16
0,16
0,17
0,17
II
0
0,14
0,15
0,15
0,15
0,15
0,15
111
0
0,16
0,16
0,17
0,17
0,17
0,18
IV
0
0,12
0,14
0,16
0,18
0,20
0,22
V
0
0,16
0,16
0,17
0,17
0,18
0,18
Вариант 10
Филиалы
Млн. руб.
0
1
2
3
4
5
I
0
0,34
0,35
0,35
0,36
0,37
II
0
0,32
0,33
0,34
0,35
0,36
111
0
0,32
0,33
0,33
0,34
0,34
IV
0
0,29
0,31
0,33
0,35
0,38
V
0
0,33
0,34
0,34
0,35
0,35
VI
0
0,34
0,35
0,35
0,36
0,37
Приложение А
Отладка программ
При написании программ часто допускаются те иди иные ошибки. На некоторые ошибки VBA сразу указывает, выдавая сообщение об ошибке синтаксиса (рис. А.1).
Q Тайл Дравг ЁВД; Вставка Выполнить Дереис й но 2-|S| х|
Г ""^Z 3f“3 *l*|s| elMil®!Jghdehti Я $Ы id jeiMigiB^iitis^^
Sub DD()
If ActiveCell.Value = 1 Then ActiveCell.Font.Colorindex * 3
^правка |^правка |Microsoft ExcelMicrosoft ExcelElse ActiveCell.Font
^правка |
^правка |
Microsoft Excel
Microsoft Excel
End If
E jetted hst separator or)E jetted hst separator or)End Sub
E jetted hst separator or)
E jetted hst separator or)
>r>rFunction GG(x As Double Dim i As Integer Dim a() As Double N = y.Rows.Count ReDim a(l To N) i = Application.Rank(x, y, 0) i = Format(i, "#") GG - i
>r
>r
‘ Lilli 11/ Лист2\Нолцл..- T^M J
Рис. А.1. Пример сообщения об ошибке (о недостаче скобок в выражении)
Такие ошибки обычно легко исправить, т. к. их местоположение локализовано и указана их возможная причина.
Другой тип ошибок возникает при запуске программ (рис. А.2).
Рис. А.2. Диалоговое окно Ошибка макроса
При нажатии кнопки Справка (Help) VBA предложит возможные причины появления данной ошибки. Нажатие кнопки Перейти активизирует лист модуля в том месте, где допущена ошибка, с выделением ее синим цветом (рис. А.З).
Рис. А.З. Лист модуля с выделенной ошибкой
В данном случае ошибка вызвана тем, что переменной число типа integer было присвоено слишком большое значение. Для того чтобы исправить эту ошибку, достаточно присвоить переменной число тип Long.
Щелчок на кнопке Отладка (Debug) открывает окно Отладка (Debug), в котором место ошибки выделено рамкой (рис. А.4).
Рис. А.4. Окно Отладка
Наиболее коварными являются логические ошибки (когда программа работает, но выдает неверные результаты). В этом случае очень полезными являются средства отладки, которые позволяют лучше понять, что действительно происходит в программе, проследить за ее работой шаг за шагом. Окно Отладка (Debug) вызывается нажатием клавиш <Ctrl>+<G> или командой Вид, Окно отладки (View, Debug Window).
Окно Отладка (Debug) разбито на две панели: нижняя панель называется Панель кода (Code Рапе) и выполняет роль листа модуля, а верхняя панель может отображать одну из двух вкладок: Проверка (Immediate) или Значение (Watch).
Вкладка Значение (Watch) позволяет отслеживать изменения значений выбранных переменных
Вкладка Проверка (Immediate) предназначена для тестирования одного оператора, проверки значения переменной. Текст, введенный на этой вкладке, не изменяет текста программы, записанного на листе модуля. Вводимый оператор выполняется по нажатию клавиши <Enter>. Рассмотрим конкретные примеры работы с вкладкой Проверка (Immediate) (рис. А.5).
В окне Отладка (Debug) на вкладке Проверка (Immediate) введите следую- ший оператор присваивания:
Рис. А.5. Работа с вкладкой Проверка окна Отладка
При нажатии клавиши < Enter > VBA выполнит этот оператор, т. е. переменной х будет присвоено значение 2. Для того чтобы проверить, какое значение присвоено переменной х, на новой строке введите оператор
print х
который при нажатии клавиши <Enter> выведет на вкладке Проверка (Immediate) значение этой переменной. Оператор print не позволяет выводить значение на листе модуля, однако, используя конструкцию
Debug.Print имя_переменной
можно вывести это значение на вкладке Проверка (Immediate).
Другим способом вывода значения выражения является использование вопросительного знака. Например, введите на вкладке Проверка (Immediate)
у = sin(x+l) ?У
VBA будет помнить значение переменной х до тех пор, пока не будет закрыто окно Отладка (Immediate). Поэтому переменной у будет присвоено значение sin(3). Для выполнения операторов после ввода каждой строки не забывайте нажимать клавишу <Enter>. После выполнения оператора ?у на вкладке Проверка (Immediate) будет выведено значение переменной у.
На вкладке Проверка (Immediate) можно выводить значения выражений также посредством диалогового окна вывода, например
MsgBox "Значение у " & CStr(Format(у,"##.###")), vblnformation
Для проверки последовательности выполнения операторов в программе необходимо поместить курсор в процедуру, которую необходимо отладить, и осуществить одно из перечисленных ниже действий:
Выбрать команду Выполнить, Выполнить пошагово (Run, Step Into)
Нажать клавишу <F8>
Нажать кнопку Войти в процедуру (Step Into) .^ (Все кнопки, упоминаемые в этом приложении, находятся на панели Visual Basic)
В результате откроется окно Отладка (Immediate), отображающее выбранную процедуру на Панели кода (Code Рапе). Первая строка процедуры будет выделена рамкой. Это означает, что она будет выполнена следующей (рис. А.6).
Рис. А.6. Пошаговая отладка программы
Для выполнения этой строки надо повторить одно из перечисленных выше действий. После выполнения последнего оператора процедуры окно Отладка (Immediate) автоматически закрывается.
Если при пошаговом выполнении программы нет необходимости отслеживать выполнение какой-либо вызываемой процедуры, ее пошаговое выполнение можно пропустить, выполнив одно из перечисленных ниже действий:
Выбрать команду Выполнить, Перешагнуть (Run, Step Over)
Нажать клавиши <Shift>+<F8>
Нажать кнопку Обойти процедуру (Step Over) [з|
Программу можно выполнять по шагам с любого места, используя точку прерывания, которую устанавливают в программе, предварительно поместив курсор в нужной строке и выполнив одно из следующих действий:
Выбрать команду Выполнить, Точка останова (Run, Toggle Breakpoint)
Нажать клавишу <F9>
Нажать кнопку Точка останова (Toggle Breakpoint)
После установки точки прерывания цвет строки меняется на коричневый (рис. А.7).
Рис. А.7. Точка прерывания
После указания точек прерывания запуск программы производится одной из следующих операций:
Выбрать команду Выполнить, Начать (Run, Start)
Нажать клавишу <F5>
Нажать кнопку Выполнить макрос (Run Macro)J
Программа прервется на месте, где установлена точка прерывания. Для удаления точки прерывания надо поместить курсор в строке с точкой прерывания и повторить одно из описанных выше действий по ее установке.
Отметим, что можно размещать точки прерывания программно на листе модуля, используя операторы stop.
При пошаговой отладке программы можно отслеживать изменения значений переменных с помощью вкладки Значение (Watch) окна Отладка (Immediate). Для этого надо выделить переменную в программе на Панели кода и выполнить команду Сервис, Добавление контрольного значения (Tools, Add Watch) (рис. А.8).
у Файл Прае» а £йа Scrota Е^шслнит, gepewc Дкно 2,-1^1 *^
I ~* з г ™з * I * ы siyjiQ ^1%М^^ - *1 у I ъ -| J2MgLsML£j Jd3dsL<d ^Ы.Мз] яНЫ.^dJM Г 3 2М
Для получения справки натмите клавишу FtNUL
Рис. А.8. Диалоговое окно Добавление контрольного значения
После нажатия кнопки ОК данная переменная помещается на вкладку Значение (Watch). Для того чтобы добавить наблюдения за другой переменной, надо повторить с ней описанные выше действия или выбрать ее и щелкнуть кнопку Контрольное значение (Instant Watch) ^j. Щелчок, на кнопке Добавить (Add) открывшегося диалогового окна Просмотр значения выражения (Instant Watch) (рис. А.9) добавит новую переменную на вкладку Значение (Watch).
Рис. А.9. Диалоговое окно Просмотр значения выражения
После этого закройте окно Отладка (Immediate) и выполните в пошаговом режиме программу. Теперь текущие изменения выбранных переменных будут отображаться на вкладке Значение (Watch) (рис. А. 10).
Рис. А. 10. Отображение текущих значений выбранных переменных
Для удаления переменной с вкладки Значение (Watch) достаточно расположить курсор на строке с этой переменной и нажать клавишу <Delete>. С помощью команды Сервис, Изменить контрольное значение (Tools, Change Watch) можно изменить тестируемую переменную.
Приложение ВПриложение В
Приложение В
Приложение В
Функции рабочего листа Excel
В данном приложении содержится список основных функций рабочего листа Excel. Для получения более подробной информации о конкретной функции и ее аргументах выберите ее в диалоговом окне Мастер функций (Function Wizard) и нажмите кнопку Справка (Help).
Таблица В.1. Функции категории Математические (Math&Trig)
Функция (рус.)
Функция (англ.)
Назначение
ABS
ABS
Возвращает модуль (абсолютную величину) числа (см. раздел 2.1)
ACOS
ACOS
Возвращает арккосинус числа. Если нужно преобразовать результат из радиан в градусы, то умножьте его на 18О/ПИ() (см. раздел 2.1)
ACOSH
ACOSH
Возвращает гиперболический арккосинус числа (см. раздел 2.1)
ASIN
ASIN
Возвращает арксинус числа (см. раздел 2.1)
ASINH
ASINH
Возвращает гиперболический арксинус числа (см. раздел 2.1)
ATAN
ATAN
Возвращает арктангенс числа (см. раздел 2.1)
ATAN2
ATAN2
Возвращает арктангенс для заданных координат X и Y (см. раздел 2.1)
ATANH
ATANH
Возвращает гиперболический арктангенс числа (см. раздел 2.1)
Таблица В. 1 (продолжение)
Функция (рус.)
Функция (англ.)
Назначение
cos
cos
Возвращает косинус заданного угла (см. раздел 2.1)
COSH
COSH
Возвращает гиперболический косинус числа
EXP
EXP
Возвращает число "е", возведенное в указанную степень (см. раздел 2.1)
LN
LN
Возвращает натуральный логарифм числа
LOG
LOG
Возвращает логарифм числа по заданному основанию. Если основание опущено, то оно полагается равным 10 (см. раздел 2.1)
LOGIC
LOGIC
Возвращает десятичный логарифм числа (см. раздел 2.1)
SIN
SIN
Возвращает синус заданного угла (см. раздел 2.1)
SINH
SINH
Возвращает гиперболический синус числа
TAN
TAN
Возвращает тангенс заданного угла (см. раздел 2.1)
TANH
TANH
Возвращает гиперболический тангенс числа
ГРАДУСЫ
DEGREES
Преобразует радианы в градусы
ЗНАК
SIGN
Возвращает 1, если число положительное, 0, если число равно 0 и -1, если число отрицательное
КОРЕНЬ
SQRT
Возвращает положительное значение квадратного корня из неотрицательного числа
МОБР
MINVERSE
Возвращает обратную матрицу (см. раздел 3.2)
МОПРЕД
MDETERM
Возвращает определитель матрицы (см. раздел 3.2)
МУМНОЖ
MMULT
Возвращает произведение матриц (см. раздел 3.2)
НЕЧЁТ
ODD
Возвращает число, округленное до ближайшего нечетного целого
ОКРВВЕРХ
CEILING
Возвращает результат округления с избытком до ближайшего числа, кратного точности
Таблица ВЛ (продолжение)
Функция (рус.)
Функция (англ.)
Назначение
ОКРВНИЗ
FLOOR
Возвращает результат округления числа до заданной точности с недостатком
ОКРУГЛ
MROUND
Округляет число до указанного количества десятичных разрядов
ОКРУГЛВВЕРХ
ROUNDUP
Округляет число до ближайшего большего по модулю целого
ОКРУГЛВНИЗ
ROUNDDOWN
Округляет число до ближайшего меньшего по модулю целого
ОСТАТ
MOD
Возвращает остаток от деления числа на делитель
СТЕР
TRUNC
Усекает число до целого, отбрасывая его дробную часть
пи
PK )
Возвращает значение числа л (см. раздел 2.1)
ПРОИЗВЕЛ
PRODUCT
Возвращает произведение чисел, заданных в качестве аргументов
ПРОМЕЖУТОЧ
НЫЕ .ИТОГИ
SUBTOTAL
Возвращает промежуточный итог в список или базу данных
РАДИАНЫ
RADIANS
Преобразует градусы в радианы
РИМСКОЕ
ROMAN
Преобразует число из арабской записи в римскую
СЛЧИС
RAND
Возвращает равномерно распределенное случайное число, большее либо равное 0 и меньшее 1
СТЕПЕНЬ
POWER
Возвращает результат возведения числа в степень
СУММ
SUM
Возвращает сумму всех чисел, входящих в список аргументов (см. раздел 4.7)
СУММЕСЛИ
SUMIF
Возвращает сумму значений в ячейках, специфицированных заданным критерием
СУММКВ
SUMSQ
Возвращает сумму квадратов аргументов (см. раздел 7.5)
СУММКВРАЗН
SUMXMY2
Возвращает сумму квадратов разностей соответствующих значений в двух массивах (см. раздел 7.5)
Таблица В. 1 (окончание)
Функция (рус.)
Функция (англ.)
Назначение
СУММПРОИЗВ
SUMPRODUCT
Возвращает сумму произведений соответствующих элементов массивов (см. раздел 4.7)
СУММРАЗНКВ
SUMX2MY2
Возвращает сумму разностей квадратов соответствующих значений в двух массивах (см. раздел 7.5)
СУММСУММКВ
SUMX2PY2
Возвращает сумму сумм квадратов соответствующих элементов двух массивов (см. раздел 7.5)
СЧЁТЕСЛИ
COUNTIF
Возвращает количество непустых ячеек заданного диапазона, удовлетворяющих заданному критерию (см. раздел 4.8)
СЧИТАТЬПУСТОТЫ
COUNTBLANK
Возвращает количество пустых ячеек в заданном диапазоне
ФАКТР
FACT
Возвращает факториал числа
ЦЕЛОЕ
INT
Возвращает число, округленное до ближайшего меньшего целого
ЧЁТН
EVEN
Возвращает число, округленное до ближайшего четного целого
ЧИСЛКОМЕ
COMBIN
Возвращает количество комбинаций для заданного числа объектов
Таблица В.2. Функции категории Дата и время (Date & Time)
Функция (рус.)
Функция (англ.) Назначение
ВРЕМЗНАЧ
TIMEVALUEВозвращает порядковый номер для указан
ного времени в текстовом формате
ВРЕМЯ
TIMEВозвращает порядковый номер для указан
ного времени
год
YEARВозвращает год, соответствующий указан
ной дате
ДАТА
dateВозвращает порядковый номер указанной
даты (см. раздел 4.8)
ДАТАЗНАЧ
datevalueВозвращает порядковый номер указанной
даты, представленной в текстовом формате
Таблица В.2 (окончание)
Функция (рус.)
Функция (англ.)
Назначение
ДЕНЬ
DAY
Возвращает день месяца указанной даты
ДЕНЬНЕД
WEEKDAY
Возвращает день недели указанной даты
ДНЕЙ360
DAYS360
Возвращает количество дней между двумя датами на основе 360-дневного года
МЕСЯЦ
MONTH
Возвращает месяц, соответствующий указанной дате
МИНУТЫ
MINUTE
Возвращает минуты, соответствующие указанной дате
СЕГОДНЯ
TODAY
Возвращает текущую дату в числовом формате
СЕКУНДЫ
SECOND
Возвращает секунды, соответствующие указанной дате
ТДАТА
NOW
Возвращает текущую дату и время в числовом формате
ЧАС
HOUR
Возвращает час, соответствующий указанной дате
Таблица В.З. Функции категории Логические (Logical)
Функция (рус.)
Функция (англ.)
Назначение
ЕСЛИ
IF
Возвращает первое значение, если логическое выражение при вычислении дает значение ИСТИНА, и второе значение, если ложь (см. раздел 2.2)
И
AND
Возвращает значение истина, если все аргументы имеют значение ИСТИНА; возвращает значение ЛОЖЬ, если хотя бы один аргумент имеет значение ложь (см. раздел 2.2)
ИЛИ
OR
Возвращает ИСТИНА, если хотя бы один из аргументов имеет значение ИСТИНА; возвращает ЛОЖЬ, если все аргументы имеют значение ЛОЖЬ (см. раздел 2.2)
ИСТИНА
TRUE
Возвращает логическое значение ИСТИНА (см. раздел 2.2)
Таблица В.З (окончание)
Функция (рус.)
Функция (англ.)
Назначение
ложь
FALSE
Возвращает логическое значение ЛОЖЬ (см. раздел 2.2)
НЕ
NOT
Меняет на противоположное логическое
значение аргумента (см. раздел 2.2)
Таблица В.4. Функции категории Ссылки и массивы (Reference)
Функция (рус.)
Функция (англ.)
Назначение
АДРЕС
ADDRESS
Возвращает адрес ячейки в виде текста, используя номер строки и номер столбца
ВНР
VLOOKUP
Просматривает левый столбец массива в поисках определенного значения и возвращает значение из указанной ячейки
ВЫБОР
CHOOSE
Возвращает значение из списка аргументов с данным номером индекса
ГПР
HLOOKUP
Просматривает верхнюю строку массива в поисках определенного значения и возвращает значение из указанной ячейки
ДВССЫЛ
INDIRECT
Возвращает значение, находящееся в ячейке, ссылка на которую находится в указанной ячейке
ИНДЕКС
INDEX
Возвращает значение указанной ячейки или массив значений в аргументе массив (см. раздел 7.9.2)
ОБЛАСТИ
AREAS
Возвращает количество областей в ссылке
П0ИСКП03
MATCH
Возвращает относительную позицию элемента массива, который соответствует указанному значению указанным образом (см. раздел 4.10)
ПРОСМОТР
LOOKUP
Ищет значения в векторе или массиве. Функция ПРОСМОТР имеет две синтаксические формы: вектор и массив
СМЕЩ
OFFSET
Возвращает ссылку заданной высоты и ширины, отстоящую от другой ссылки на заданное количество строк и столбцов
Таблица В.4 (окончание)
Функция (рус.)
Функция (англ.)
Назначение
СТОЛБЕЦ
COLUMN
Возвращает номер столбца по заданной ссылке
СТРОКА
ROW
Возвращает номер строки по заданной ссылке
ТРАНСП
TRANSPOSE
Возвращает транспонированный массив (см. раздел 3.2)
ЧИСЛСТОЛБ
COLUMNS
Возвращает количество столбцов в ссылке
ЧСТРОК
ROWS
Возвращает количество строк в ссылке
Таблица В.5. Функции категории Текстовые (Text)
Функция (рус.)
Функция (англ.)
Назначение
ДЛСТР
LEN
Возвращает количество символов в текстовой строке
ЗАМЕНИТЬ
REPLACE
Заменяет часть текстовой строки на другую текстовую строку
ЗНАЧЕН
VALUE
Преобразует текст в число
КОДСИМВ
CODE
Возвращает числовой код первого символа в текстовой строке
ЛЕВСИМВ
LEFT
Возвращает первые символы текстовой строки
НАЙТИ
FIND
Находит вхождение одной текстовой строки в другую и возвращает номер символа, с которого начинается первое вхождение искомой строки
ПЕЧСИМВ
CLEAN
Удаляет из текста все непечатные символы
ПОВТОР
REPT
Повторяет текст заданное число раз
ПОДСТАВИТЬ
SUBSTITUTE
Заменяет текст в строке
ПОИСК
SEARCH
Возвращает позицию первого вхождения символа или текстовой строки при поиске слева направо
ПРАВСИМВ
RIGHT
Возвращает последние символы текстовой строки
Таблица B.5 (окончание)
Функция (рус.)
Функция (англ.)
Назначение
ПРОПИСИ
UPPER
Делает все буквы в тексте прописными
ПРОПНАЧ
PROPER
Первая буква в тексте, а также все первые буквы, следующие за символами, отличными от букв, делаются прописными. Все прочие буквы в тексте делаются строчными
ПСТР
MID
Возвращает заданное число символов из строки текста, начиная с указанной позиции
РУБЛЬ
DOLLAR
Преобразует число в текст, используя денежный формат с округлением до заданного числа десятичных знаков
СЖПРОБЕЛИ
TRIM
Удаляет из текста все пробелы, за исключением одиночных пробелов между словами
СИМВОЛ
CHAR
Возвращает символ с заданным кодом
СОВПАЛ
EXACT
Сравнивает две строки текста и возвращает значение ИСТИНА, если они в точности совпадают и ложь — в противном случае
СТРОЧН
LOWER
Преобразует символы в текстовой строке из верхнего регистра в нижний
СЦЕПИТЬ
CONCATENATE
Объединяет несколько текстовых элементов в один
т
T
Если значение является текстом или ссылается на текст, то функция Т возвращает само это значение. Если значение не является текстом и не ссылается на текст, то функция т возвращает "" (пустой текст)
ТЕКСТ
TEXT
Преобразует значение в текст в заданном числовом формате (см. раздел 2.7)
ФИКСИРОВАННЫЙ
FIXED
Округляет число до заданного количества десятичных цифр, форматирует число в десятичном формате с использованием запятых и точек и возвращает результат в виде текста
Таблица В.6. Функции категории Финансовые (Finance)
Функция (рус.)
Функция (англ.)
Назначение
АМГД(стоимость; остаточная стоимость; время эксплуатации; период)
SYD
Возвращает годовую амортизацию имущества для указанного периода (см. раздел 4.6)
АМР(стоимость; остаток; период)
SLN
Возвращает величину непосредственной амортизации имущества за один период (см. раздел 4.6)
ЕЗ(ставка; кпер; плата; нз; тип)
FV
Возвращает будущее значение вклада на основе периодических постоянных платежей и постоянной процентной ставки (см. раздел 4.5)
ВЫДОХ(значения; прогноз)
IRR
Возвращает внутреннюю скорость оборота для ряда последовательных операций с наличными, представленными числовыми значениями (см. раздел 4.2)
ДДОБ(нач_стоимость; ост_стоимость;
время_эксплуатации; период;
коэффициент)
DDB
Возвращает величину амортизации имущества для указанного периода, используя метод двукратного учета амортизации или иной явно указанный метод (см. раздел 4.6)
ДОБ(нач_стоимость; ост_стоимость ; время_эксплуатации; период; месяц)
DB
Возвращает амортизацию имущества на заданный период, используя метод постоянного учета амортизации (см. раздел 4.6)
КПЕР(ставка; платеж; нз; бз; тип)
NPER
Возвращает общее количество периодов выплаты для данного вклада на основе периодических постоянных выплат и постоянной процентной ставки (см. раздел 4.5)
МВСД(значения;
ф_ставка; р_ставка)
MIRR
Возвращает модифицированную внутреннюю скорость оборота средств для ряда последовательных периодических операций с наличными
НОРМА(кпер; выплата; нз; бз; тип; нач_прибл)
RATE
Возвращает процентную ставку за один период при выплате ренты (см. раздел 4.5)
Таблица В.6 (окончание)
Функция (рус.)Функция (англ.)
Назначение
НПЗ(ставка;NPV
значение!; значение2; ...)
Возвращает чистый текущий объем вклада, вычисляемый на основе ряда последовательных поступлений наличных и нормы амортизации (см. раздел 4.2)
ОСНПЛАТ(ставка;РРМТ
Возвращает величину выплаты на дан-
период; кпер; нз; бз; тип)
ный период на основе периодических постоянных платежей и постоянной процентной ставки (см. раздел 4.4)
ПДОБ(стоимость;VDB
остаток; период;
Возвращает значение амортизации имущества за данный период, включая
нач_период;
конкретные периоды, используя метод
кон_период;
двойного процента со снижающегося
коэфф;
без_переключения)
остатка или иной явно указанный метод
ПЗ(ставка; кпер; PV
Возвращает текущий объем вклада
выплата; бз; тип)
(см. раздел 4.3)
ПЛПРОЦ(ставка;IPMT
Возвращает платежи по процентам за
период; кпер; нз; бз; тип)
данный период на основе периодических постоянных выплат и постоянной процентной ставки (см. раздел 4.4)
ППЛАТ(ставка;РМТ
Возвращает величину выплаты за один
кпер; нз; бз; тип)
период годовой ренты на основе постоянных выплат и постоянной процентной ставки (см. раздел 4.1)
Таблица В.7. Функции категории Работа с базой данных (Database)
Функция (рус.) Функция (англ.)
Назначение
ЕДДИСПDVAR
Оценивает дисперсию генеральной совокупности по выборке, используя числа в указанном поле всех записей базы данных, удовлетворяющих критерию
ЕДДИСППDVARP
Вычисляет дисперсию генеральной совокупности, используя числа в указанном поле всех записей базы данных, удовлетворяющих критерию
Таблица В.7 (окончание)
Функция (рус.)
Функция (англ.)
Назначение
БДПРОИЗВЕД
DPRODUCT
Перемножает значения в указанном поле всех записей, удовлетворяющих критерию
БВСУММ
DSUM
Суммирует числа в указанном поле всех записей базы данных, удовлетворяющих критерию
БИЗВЛЕЧЬ
DGET
Извлекает отдельное значение из базы данных, удовлетворяющее критерию
БСЧЁТ
DCOUNT
Подсчитывает количество ячеек, содержащих числа, во всех записях базы данных, удовлетворяющих критерию
БСЧЁТА
DCOUNTA
Подсчитывает непустые ячейки в указанном поле всех записей базы данных, удовлетворяющих критерию
ДМАКС
ОМАХ
Возвращает наибольшее число в указанном поле всех записей базы данных, удовлетворяющих критерию
дмин
DMIN
Возвращает наименьшее число в указанном поле всех записей базы данных, удовлетворяющих критерию
ДСРЗНАЧ
DAVERAGE
Возвращает среднее значение в указанном поле всех записей, удовлетворяющих критерию
ДСТАНДОТКЛ
DSTDEV
Возвращает стандартное отклонение для выборки из генеральной совокупности, используя числа в указанном поле всех записей базы данных, удовлетворяющих критерию
ДСТАНДОТКЛП
DSTDEVP
Возвращает стандартное отклонение генеральной совокупности, используя числа в указанном поле всех записей базы данных, удовлетворяющих критерию
Таблица В.8. Функции категории Проверка свойств и значений (Information)
Функция (рус.)
Функция (англ.) Назначение
ЕЛОГИЧ
islogicalВозвращает логическое значение истина,
если проверяемая величина является логическим значением; в противном случае возвращается логическое значение ЛОЖЬ (см. раздел 7.17)
Таблица B.8 (продолжение)
Функция (рус.)
Функция (англ.)
Назначение
ЕНД
ISNA
Возвращает логическое значение ИСТИНА, если проверяемая величина является значением ошибки #н/д; в противном случае возвращается логическое значение ложь (см. раздел 7.17)
ЕНЕТЕКСТ
ISNOTEXT
Возвращает логическое значение ИСТИНА, если проверяемая величина не является текстом; в противном случае возвращается логическое значение ЛОЖЬ (см. раздел 7.17)
ЕОШ
ISERR
Возвращает логическое значение ИСТИНА, если проверяемая величина является одним из возможных ошибочных значений Excel, за исключением #Н/Д; в противном случае возвращается логическое значение ложь (см. раздел 7.17)
ЕОШИБКА
ISERROR
Возвращает логическое значение истина, если проверяемая величина является одним из возможных ошибочных значений Excel; в противном случае возвращается логическое значение ЛОЖЬ (см. раздел 7.17)
ЕПУСТО
ISBLANK
Возвращает логическое значение ИСТИНА, если проверяемая величина является ссылкой на пустую ячейку; в противном случае возвращается логическое значёние ложь (см. раздел 7.17)
ЕССЫЛКА
ISREF
Возвращает логическое значение ИСТИНА, если проверяемая величина является ссылкой; в противном случае возвращается логическое значение ЛОЖЬ (см. раздел 7.17)
ЕТЕКСТ
ISTEXT
Возвращает логическое значение ИСТИНА, если проверяемая величина является текстом; в противном случае возвращается логическое значение ЛОЖЬ (см. раздел 7.17)
ЕЧИСЛО
ISNUMBER
Возвращает логическое значение ИСТИНА, если проверяемая величина является числом; в противном случае возвращается логическое значение ЛОЖЬ (см. раздел 7.17)
ИНФОРМ
INFO
Возвращает информацию о текущей операционной среде
Таблица В.8 (окончание)
Функция (рус.)
Функция (англ.) Назначение
нд
NAВозвращает значение ошибки #н/д. #н/д,
которое означает, что "нет доступного значения"
тип
typeВозвращает тип значения
ТИП.ОШИБКИ
error.typeВозвращает номер, соответствующий од
ному из возможных ошибочных значений Excel
ч
NВозвращает значение, преобразованное в
число
ЯЧЕЙКА
CELLВозвращает информацию о формате, мес
тоположении или содержимом левой верхней ячейки в ссылке
Таблица В.9. Функции категории Статистические (Statistical)
Функция (рус.)
Функция (англ.)
Назначение
ЕРАСП
FDISP
-Возвращает F-распределение вероятности
ЕРАСПОБР
FINV
Возвращает обратное значение для F-pac- пределения вероятностей
ZTECT
ZTEST
Возвращает двустороннее Р-значение z-теста
БЕТАОБР
BETAINV
Возвращает обратную функцию к интегральной функции плотности бета-вероятности
БЕТАРАСП
BETADIST
Возвращает интегральную функцию плотности бета-вероятности
БИНОМРАСП
BINOMDIST
Возвращает отдельное значение биномиального распределения
ВЕЙБУЛЛ
WEIBULL
Возвращает распределение Вейбулла
ВЕРОЯТНОСТЬ
PROB
Возвращает вероятность того, что значение из интервала находится внутри заданных пределов
ГАММАНЛОГ
GAMMALN
Возвращает натуральный логарифм гамма функции Г(х)
Таблица В.9 (продолжение)
Функция (рус.)
Функция (англ.)
Назначение
ГАММАОБР
GAMMAINV
Возвращает обратное гамма-распределение
ГАММАРАСП
GAMMADIST
Возвращает гамма-распределение
ГИПЕРГЕОМЕТ
HYPGEOMDIST
Возвращает гипергеометрическое распределение
ДИСП
VAR
Возвращает дисперсию по выборке
ДИСПР
VARP
Возвращает дисперсию для генеральной совокупности
ДОВЕРИТ
CONFIDENCE
Возвращает доверительный интервал для среднего генеральной совокупности
КВАДРОТКЛ
DEVSQ
Возвращает сумму квадратов отклонений точек данных от их среднего
КВАРТИЛЬ
QUARTILE
Возвращает квартиль набора данных
КВПИРСОН
RSQ
Возвращает квадрат коэффициента корреляции Пирсона
КОВАР
COVAR
Возвращает ковариацию, т. е. среднее произведений отклонений для каждой пары точек данных
КОРРЕЛ
CORREL
Возвращает коэффициент корреляции (см. раздел 7.5)
КРИТБИНОМ
CRITBINOM
Возвращает наименьшее значение, для которого интегральное биномиальное распределение больше или равно заданному критерию
ЛГРФПРИБЛ
LOGEST
Возвращает экспоненциальное уравнение регрессии (см. раздел 5.5.3)
ЛИНЕЙН
LINEST
Возвращает линейное уравнение регрессии (см. раздел 5.5.2)
ЛОГНОРМОБР
LOGINV
Возвращает обратную функцию логарифмического нормального распределения
ЛОГНОРМРАСП
LOGNORMDIST
Возвращает интегральное логарифмическое нормальное распределение
МАКС
MAX
Возвращает максимальное значение из списка аргументов (см. раздел 4.10)
Таблица В.9 (продолжение)
функция (рус.)
Функция (англ.)
Назначение
МЕДИАНА
MEDIAN
Возвращает медиану заданного набора чисел
МИН
MIN
Возвращает наименьшее значение в списке аргументов
МОДА
MODE
Возвращает наиболее часто встречающееся значение набора данных
НАИБОЛЬШИЙ
LARGE
Возвращает k-е наибольшее значение из множества данных (см. раздел 7.11)
НАИМЕНЬШИЙ
SMALL
Возвращает к-е наименьшее значение в множестве данных
НАКЛОН
SLOPE
Возвращает наклон линии линейной регрессии (см. раздел 5.5.2)
НОРМАЛИЗАЦИЯ
STANDARDIZE
Возвращает нормализованное значение для распределения, характеризуемого средним и стандартным отклонением
НОРМОБР
NORMINV
Возвращает обратное нормальное распределение для указанного среднего и стандартного отклонения
НОРМРАСП
NORMDIST
Возвращает нормальную функцию распределения для указанного среднего и стандартного отклонения
НОРМСТОБР
NORMSINV
Возвращает обратное значение стандартного нормального распределения
НОРМСТРАСП)
NORMSDIST
Возвращает стандартное нормальное интегральное распределение
ОТРБИНОМРАСП
NEGBIMOMDIST
Возвращает отрицательное биномиальное распределение
ОТРЕЗОК
INTERCEPT
Возвращает отрезок, отсекаемый на оси линией линейной регрессии (см. раздел 5.5.2)
НЕРЕСТ
PERMUT
Возвращает количество перестановок для заданного числа объектов, которые выбираются из общего числа объектов
ПЕРСЕНТИЛЬ
PERCENTILE
Возвращает k-ю персентиль для значений из интервала
Таблица B.9 (продолжение)
Функция (рус.)
Функция (англ.)
Назначение
ПИРСОН
PEARSON
Возвращает коэффициент корреляции
Пирсона
ПРЕДСКАЗ
FORECAST
Возвращает предсказанное значение функции в данной точке на основе уравнения линейной регрессии (см. раздел 5.5.2)
ПРОЦЕНТРАНГ
PERCENTRANK
Возвращает процентное содержание значения в множестве данных
ПУАССОН
POISSON
Возвращает распределение Пуассона
РАНГ
RANK
Возвращает ранг числа в списке чисел. Ранг числа — это его величина относительно других значений в списке (см. раздел 4.7)
РОСТ
GROWTH
Возвращает значения в соответствии с экспоненциальным уравнением регрессии (см. раздел 5.5.3)
СКОС
SKEW
Возвращает асимметрию распределения
СРГАРМ
HARMEAN
Возвращает среднее гармоническое множества данных
СРГЕОМ
GEOMEAN
Возвращает среднее геометрическое значений
СРЗНАЧ
AVERAGE
Возвращает среднее (арифметическое) значение (см. раздел 4.7)
СРОТКЛ
AVEDEV
Возвращает среднее абсолютных значений отклонений точек данных от среднего
СТАНДОТКЛОН
STDEV
Возвращает стандартное отклонение по выборке
СТАНДОТКЛОНП
STDEVP
Возвращает стандартное отклонение по генеральной совокупности
CTO1IIYX
STEXY
Возвращает стандартную ошибку предсказанных значений у для каждого значения х в регрессии
СТЬЮДРАСП
TDIST
Возвращает (-распределение Стьюдента
СТЬЮДРАСПОБР
TINV
Возвращает обратное распределение Стьюдента для заданного числа степеней свободы
Таблица В.9 (окончание)
Функция (рус.)
Функция (англ.)
Назначение
СЧЁТ
COUNT
Возвращает количество чисел в списке аргументов (см. раздел 7.5)
СЧЁТЗ
COUNTA
Возвращает количество непустых значений в списке аргументов (см. раздел 7.5)
ТЕНДЕНЦИЯ
TREND
Возвращает значения в соответствии с линейным уравнением регрессии (см. раздел 5.5.2)
ТТЕСТ
TTEST
Возвращает вероятность, соответствующую критерию Стьюдента
УРЕЗСРЕДНЕЕ
TRIMMEAN
Возвращает усеченное среднее значение
ФИШЕР
FISHER
Возвращает преобразование Фишера
ФИШЕРОБР
FISHERINV
Возвращает обратное преобразование Фишера
ФТЕСТ
FTEST
Возвращает результат F-теста
ХИ2ОБР
CHIINV
Возвращает обратную функцию для ^-распределения
ХИ2РАСП
CHIDIST
Возвращает одностороннюю вероятность Х2-рас пределения
ХИ2ТЕСТ
CHITEST
Возвращает тест на независимость
ЧАСТОТА
FREQUENCY
Возвращает распределение частот в виде вертикального массива
ЭКСПРАСП
EXPONDIST
Возвращает экспоненциальное распределение
ЭКСЦЕСС
KURT
Возвращает эксцесс множества данных
Литература
Бунин Э. Excel Visual Basic для приложений. М.: Бином, 1996, 351 с.
Карлберг К. Excel 5.0 для Windows в вопросах и ответах. СПб.: BHV — Санкт-Петербург, 1995, 411 с.
Карлберг К. Бизнес-анализ с помощью Excel. Киев: Диалектика, 1997, 448 с.
Комягин В. Б. Программирование в Excel 5 и Excel 7 на языке Visual Basic. М.: Радио и связь, 1996, 319 с.
Комягин В. Б., Коцюбинская А. О. Excel 7 в примерах. М.: Нолидж, 1996, 429 с.
Николь Н., Альбрехт Р. Электронные таблицы Excel 5.0. М.: Эком, 1995, 343 с.
Николь Н., Альбрехт Р. Электронные таблицы Excel 5.0 для квалифицированных пользователей. М.: Эком, 1995, 301 с.
Персон Р. Microsoft Excel 97 в подлиннике. Том 1, II. СПб.: BHV — Санкт-Петербург, 1997, 1272 с.
Таха X. Введение в исследование операций. Том I. М.: Мир, 1985, 479 с.
Уокенбах Д. Библия пользователя Excel 7.0. М.: Эком, 1996, 565 с.
Фойц С. Windows 95 для пользователя. Киев: BHV, 1995, 557 с.
V Гарнаев
,»Н|
•Яш^ '*•1111 V
'^кч^^
Использование MS Excel и VBA в экономике и финансах
Мощные средства финансового анализа^*
Моделирование atoHOMiiMeclyy сценариев
<^ ^^<#^<^®щ»^?1^ше™а л°^е 100 примеров
Мечта человечества иметь универсальное, мощное, гибкое и удобное средство, позволяющее быстро и аффективно рееать самые разнообразные зкономические и финансовые задачи, воплотм сь в Excel Visual as с for Applications существенно обогатил и усилил Excel.
В дачи таге читателю раскрываются безграничныеВ дачи таге читателю раскрываются безграничныежжтжжтшли Excel и Visual Basicшли Excel и Visual Basic
В дачи таге читателю раскрываются безграничные
В дачи таге читателю раскрываются безграничные
жжт
жжт
шли Excel и Visual Basic
шли Excel и Visual Basic
for Applied, Книга снег мене так, эд прочитав ее, даже начинакирп пользователь сможет быстро еозда№.аз|*большом
Кч якй tri г^чичааою рум да» к действию и щншеадШ
в лриаимх здаахненедмп и финансов.[
Подсол овка отчетной aokyi^gfjgj^Ukt^^y^ ч
Фикции финмютаоанаяД^^^
Работа с баз< ми данных^S-
Решение задач оптимизации • экономике и^ецедЛменте
Принципы и примеры создания современных i риложенуй от расчета Краткосрочной ссуды до нахоАдени оптимального вклада капиталовложений
Упражнения, закрепляющ ie разобранный материал
ISBN 5-8206-0024-Х