RESCUER Н. В. БИЛЬФЕЛЬД, М. Н. ФЕЛЬКЕР МЕТОДЫ MS EXCEL ДЛЯ РЕШЕНИЯ ИНЖЕНЕРНЫХ ЗАДАЧ УЧЕБНОЕ ПОСОБИЕ Издание второе, стереотипное САНКТПЕТЕРБУРГ • МОСКВА • КРАСНОДАР 2021 УДК 004.42 ББК 32.973.26018.2я723 Б 61 Бильфельд Н. В. Методы MS Excel для решения инженерных задач : учебное пособие для СПО / Н. В. Бильфельд, М. Н. Фель кер. — 2е изд., стер. — СанктПетербург : Лань, 2021. — 164 с. — Текст : непосредственный. ISBN 9785811475735 Пособие содержит четыре взаимосвязанных раздела: простейшие вычисления в таблицах, использование стандартных формул, построение графиков; работа с массивами данных, построение сводных таблиц дан ных, поиск решений, анализ «Что — если», решение оптимизационных задач; использование макрокоманд и основы программирования в VBA; разработка приложений с использованием визуальных компонентов, создание собственных интерфейсов. Рассмотрены основные режимы работы в MS Excel. Теоретический материал иллюстрирован примерами решения задач различной сложности с подробными комментариями. Подробно изложены основы разработки приложений в среде VBA, про граммирование элементов интерфейса. Предназначено для студентов, обучающихся по техническим направ лениям подготовки среднего профессионального образования. УДК 004.42 ББК 32.973.26018.2я723 Рецензенты: С. Я. ЕГОРОВ — доктор технических наук, профессор кафедры компьютерноинтегрированных систем в машиностроении Тамбовского государственного технического университета; Н. В. МИТЮКОВ — доктор технических наук, профессор кафедры ракетной техники Ижевского государственного технического университета им. М. Т. Калашникова. Обложка П. И. ПОЛЯКОВА © Издательство «Лань», 2021 © Н. В. Бильфельд, М. Н. Фелькер, 2021 © Издательство «Лань», художественное оформление, 2021 Введение Excel является мощным и универсальным средством решения задач, возникающих в различных областях деятельности. Имея мощный набор формул из различных предметных областей, Excel позволяет с одинаковой легкостью решать как бухгалтерские и финансовые задачи, так и технические и статистические задачи достаточно высокой сложности. Также Excel позволяет работать с элементарными базами данных. На практике 60–70% задач можно решить именно с помощью элементарных баз данных. Также с помощью Excel удобно составлять различные сметы, калькуляции, прайс-листы и т. п. Информация, хранящаяся в базах данных многих популярных форматов, может быть импортирована в Excel, нужным образом обработана, а затем экспортирована в какую-либо другую базу данных. Встроенный язык программирования Visual Basic for Application (VBA) позволяет легко создавать собственные алгоритмы. Простота языка программирования компенсируется огромным множеством функций Excel. Подводя итог вышесказанному, можно сделать вывод, что начинающий пользователь может совершенствовать свои знания как в области простейших расчетов, так и программирования и визуализации данных практически до бесконечности. Данное пособие рассматривает только основы работы с Excel, в основном базирующиеся на конкретных примерах, освоив которые студент сможет решать простейшие задачи в различных прикладных областях знаний и далее самостоятельно ориентироваться в океане неограниченных возможностей данной программы. 3 Часть 1 1. Основные элементы электронной таблицы Excel Файл, с которым работает Excel, называется книгой. Книга, как правило, состоит из нескольких рабочих листов, которые могут содержать таблицы, тексты, диаграммы, рисунки. Рис. 1. Элементы таблицы Строка в рабочем листе идентифицируется именем (цифрой), которое появляется на левой стороне рабочего листа. Столбец в рабочем листе также идентифицируется именем (буквами латинского алфавита), которое появляется вверху рабочего листа. Рабочий лист книги Excel может содержать до 65 536 строк и 256 столбцов. Чтобы переименовать лист, необходимо выполнить двойной щелчок на его ярлычке, вследствие чего имя листа отобразится инверсно. Такое имя можно редактировать. Ячейка – основной элемент таблицы – имеет свой уникальный адрес, состоящий из номера столбца и строки, например Е4. Каждая ячейка содержит один элемент информации, будь то цифровое значение, текст или формула. 2. Ввод данных и форматирование таблиц • • • • В ячейку таблицы могут помещаться: текстовая информация; числовая информация; формула; дата. 4 По умолчанию текстовая информация выравнивается по левому краю, даты и числовая информация – по правому. Информацию в ячейке можно выровнять другим способом, используя инструменты выравнивания: «Главная > Выравнивание». Информацию в ячейках можно представлять в различных форматах. Для этого необходимо выполнить: «Главная > Число > Формат ячеек». Информацию в ячейке можно представить в нескольких строках. Для этого необходимо выполнить: «Главная > Выравнивание > Перенос текста». Пример для выполнения 1 Введите в ячейки А1:А6 число 23,687. Используя форматирование, представьте его, как показано на рисунке 2. Рис. 2. Форматирование чисел Пример для выполнения 2 Введите в ячейку A1 текст «Пример переноса по словам». Выполните «Главная > Выравнивание > Перенос текста». Вызовите контекстное меню «Формат ячеек». Выберите вкладку «Выравнивание». Установите выравнивание по вертикали и горизонтали «По центру». Растяните ячейку так, чтобы текст выглядел как на рисунке 3. Рис. 3. Перенос текста по словам Использование списков Для быстрого ввода информации в ячейки можно использовать списки. В Excel имеются списки названий месяцев, дней недели и др. Для этого используется функция автозаполнения. Функция «Автозаполнение» позволяет заполнять данными область ячеек по определенным правилам. Excel осуществляет поиск правил заполнения введенных данных для того, чтобы определить значения пустых ячеек. Если 5 вводится одно начальное значение образца заполнения, то выделяется одна ячейка, если список с интервалом изменения данных, то необходимо выделить две ячейки, заполненные соответствующими данными. 1. Введите данные в начальную ячейку или смежные ячейки (если задается правило заполнения). 2. Выберите ячейку или ячейки, в которых установлено правило заполнения. 3. Установите курсор мыши на «Маркере заполнения» (рис. 4), маленьком квадратике в правом нижнем углу активной ячейки. 4. Перетащите мышью «Маркер заполнения» (по горизонтали или по вертикали) до последней ячейки, которую хотите заполнить по образцу. 5. Отпустите кнопку мыши. Рис. 4. Маркер заполнения активной ячейки Есть один полезный прием автозаполнения – это перетаскивание маркера заполнения при нажатой правой клавише мыши. При этом появляется контекстное меню, которое поможет выбрать способ автозаполнения (рис. 5). Рис. 5. Контекстное меню автозаполнения Если информация не является списком, то произойдет обычное копирование (например, если в ячейке конкретное число). Числовые списки можно сформировать самостоятельно, если «растягивать» сразу две ячейки, в которые помещены различные числа. Также можно создавать свои списки. Для этого введем в ячейки A1:A4 времена года: Весна Лето Осень Зима 6 Выполним: «Office > Параметры Excel > Основные > Изменить списки». В окне «Импорт списка из ячеек» выделим необходимый диапазон и нажмем кнопку «Импорт». Установка ширины строк и столбцов Установить ширину строк или столбцов можно из меню «Главная > Ячейки > Формат > Ширина столбца (строки)». В открывшемся окне можно установить числовое значение ширины или высоты. Объединение ячеек Служит для формирования различных заголовков. Для этого необходимо выделить диапазон ячеек и выполнить: «Главная > Выравнивание > Объединить». Пример для выполнения 3 Введите в ячейку A1 слово «Месяц». Введите в ячейку А2 слово «Январь». Используя списки, сформируйте все месяцы. Введите в ячейку A3 число 1, а в ячейку B3 число 2. Используя списки, сформируйте все номера месяцев. Объедините ячейки А1:L1. Встаньте на ячейку I2 и выполните «Главная > Ячейки > Формат > Ширина столбца». Запомните ширину столбца (8,43). Выделите столбцы A:L и установите ширину столбца, равную 8,43 (одинаковую для всех столбцов). Расположите информацию по центру ячеек. Обведите таблицу. В результате должна получиться таблица, фрагмент которой приведен на рисунке 6. Рис. 6. Фрагмент таблицы с месяцами Построение формул Формула – это математическое выражение, которое создается для вычисления результата и которое может зависеть от содержимого других ячеек. Формула в ячейке может содержать данные, ссылки на другие ячейки, а также обозначение действий, которые необходимо выполнить. 7 Использование ссылок на ячейки позволяет пересчитывать результат по формулам, когда происходят изменения содержимого ячеек, включенных в формулы. В Excel формулы начинаются со знака =. Скобки ( ) могут использоваться для определения порядка математических операций. Excel поддерживает следующие арифметические операции: • сложение (+); • умножение (*); • нахождение процента (%); • вычитание (–); • деление (/); • экспонента (^). Операторы сравнения: • равно (=); • меньше (<); • больше (>); • меньше или равно (<=); • больше или равно (>=); • не равно (<>). Операторы связи: • диапазон (:); • объединение (;); • оператор соединения текстов (&). Таблица 1 Примеры формул Формула =27+36 =А1+А2-А3 =45%*А3, =СУММ(А1:А5), =МАКС(А3:А5) =(А1+А2)/А3 Составляющие элементы Цифры Ссылки на ячейки Цифры и ссылки на ячейки Предварительно определенные функции Ссылки на ячейки при заданном порядке действий Пример для выполнения 4 Вставить и вычислить формулу: 25–2А13+А3. Предварительно введите любые числа в ячейки А1 и A3. Выберите необходимую ячейку, например В1, в которой будет вычисляться формула. Начните ввод формулы со знака =. Введите число 25, затем оператор (знак –). Далее введите число 2 и опертор (знак *). 8 Введите ссылку на первый операнд, например щелчком мыши на нужную ячейку А1. Введите знак ^ и число 3. Введите следующий оператор (знак +). Щелкните мышью в той ячейке, которая является вторым операндом в формуле. Таким образом, в ячейке В1 получаем формулу: = 25 – 2*А1^3 + А3. Завершите ввод формулы нажатием клавиши Enter. В ячейке В1 получите результат. 3. Копирование и модификация Диапазоны Диапазон – это несколько смежных ячеек, например A1:C8. Копировать можно: • ячейку в ячейку; • ячейку в диапазон ячеек; • диапазон ячеек в диапазон ячеек. При копировании диапазона в диапазон диапазоны должны быть кратны. Копирование можно осуществлять либо из контекстного меню, либо используя функцию автозаполнения, либо комбинацией клавиш Ctrl+C Ctrl+V, либо из главного меню «Главная > Буфер обмена». При копировании можно указать, что копировать (значения, формат и т. д.). «Главная > Буфер > Вставить > Специальная вставка» Переносить можно • ячейку в ячейку; • диапазон в диапазон. При переносе диапазона в диапазон диапазоны должны быть равны. Перенос можно осуществлять либо из контекстного меню, либо «перетаскиванием» за край ячейки, либо комбинацией клавиш Ctrl+X Ctrl+V, либо из главного меню «Главная > Буфер обмена». Абсолютная и относительная адресация формул Адрес ячеек можно вводить с помощью клавиатуры на любом регистре – верхнем или нижнем. Однако гораздо удобнее вводить адреса ячеек щелчком мыши по этой ячейке. Обозначение ячейки, составленное из номера столбца и номера строки, называется относительным адресом (относительной ссылкой) или просто ссылкой или адресом. Например, А1, где А – номер столбца, 1 – номер строки. Ссылки на диапазон (блок) ячеек состоят из адреса ячейки, находящейся в левом верхнем углу прямоугольного блока ячеек, двоеточия и адреса ячейки, находящейся в правом нижнем углу этого блока, например: А1:С12; 9 А7:Е7 – весь диапазон находится в одной строке; С3:С9 – весь диапазон находится в одном столбце. Чтобы ввести ссылку на всю строку или столбец, нужно набрать номер строки или букву столбца дважды и разделить их двоеточием, например: А:А, 2:2 или А:В, 2:4. Для обозначения адреса ячейки с указанием листа используется имя листа и восклицательный знак, например: Лист2!В5, Итоги!В5. Для обозначения адреса ячейки с указанием книги используются квадратные скобки, например: [Книга1]Лист2!А1. Относительная адресация ячеек используется в формулах чаще всего по умолчанию. При копировании формул в Excel действует правило относительной ориентации ячеек, суть которого состоит в том, что при копировании формулы табличный процессор автоматически смещает адрес в соответствии с относительным расположением исходной ячейки и создаваемой копии. При копировании в нижележащие ячейки формулы из ячейки D2, содержащей относительные ссылки, происходит автоматическая настройка адресов в соответствии с правилом относительной ориентации ячеек. Абсолютный адрес ячейки (абсолютную ссылку) используют в том случае, если при копировании формулы ссылка на ячейку не должна изменяться. Абсолютная ссылка создается из относительной ссылки путем вставки знака доллара ($) перед заголовком столбца и/или номером строки, например: $А$1. Абсолютная адресация ячеек используется, например, при вычислении процентов (доли) отдельных компонентов относительно какого-либо числа (суммы). Адрес суммы должен быть постоянным (абсолютным), а адреса других компонентов вычисления должны быть относительными. Иногда используют смешанный адрес, где остается постоянной только один из компонентов, например $В7 – не будет изменяться номер столбца, В$7 – не будет изменяться номер строки. Изменение типа ссылки для редактируемого адреса производится с помощью клавиши F4. Пример для выполнения 5 Создать таблицу квадратов чисел от 0 до 9 с шагом 0,1. Используя списки, заполните ячейки A2:A11 и B1:K1 числами от 0 до 9. Введите в ячейку B2 формулу: =($A2+B$1/10)^2. Скопируйте данную формулу во все ячейки. В результате должна получиться таблица, приведенная на рисунке 7. 10 Рис. 7. Таблица квадратов чисел Пример для выполнения 6 Самостоятельно создайте таблицу для вычисления функции «тангенс». Для этого занести в ячейку В1 формулу таким образом, чтобы ее можно было скопировать во все ячейки. Наименование функции TAN. Аргумент должен быть в радианах (умножить на ПИ и разделить на 180). Вид таблицы приведен на рисунке 8. Проверьте, что тангенс 45 градусов равен единице. Рис. 8. Таблица тангенсов 4. Стандартные функции Стандартные функции находятся на вкладке «Формулы > Библиотека функций». Формулы разбиты на несколько групп: Финансовые, логические, дата и время и т. д. Перечень всех функций приведен в приложении 1. 11 Использование математических функций Пример для выполнения 7 Вставьте в ячейку А1 математическую функцию СЛЧИС(). Скопировать ее в диапазон А2:А10. Используя «Специальную вставку», перекопируйте весь диапазон как значения. Вычислите сумму, среднее значение, максимум и минимум для диапазона A1:A10. Фрагмент таблицы приведен на рисунке 9. Рис. 9. Использование стандартных функций Чтобы сгенерировать случайное число из указанного диапазона, можно использовать формулу =ОКРУГЛ(ОТБР((L-K+1);0)*СЛЧИС()+K;0), где L – нижняя граница диапазона; K – верхняя граница диапазона. Функция ОКРУГЛ округляет число с указанной точностью. Функция ОТБР отбрасывает дробную часть числа. Данной функцией удобно пользоваться при тестировании таблиц, чтобы не вводить вручную большие массивы информации. Пример для выполнения 8 Сгенерировать число из заданного диапазона, указанного в ячейках D1 и D2. Поместите в ячейки D1 и D2 нижнюю и верхнюю границы диапазона. Поместите в ячейку А1 формулу =ОКРУГЛ(ОТБР(($D$1-$D$2+1);0)*СЛЧИС()+$D$2;0). Скопируйте ее в диапазон А2:А10. В результате получится таблица, приведенная на рисунке 10. Рис. 10. Генерирование случайных чисел При каждом нажатии клавиши F9 значение чисел будет меняться. 12 Использование логических функций Очень часто используется логическая функция ЕСЛИ. Формат функции следующий: ЕСЛИ(<Условие>;<Вывести, если условие выполняется>;<Вывести, если условие не выполняется>). Пример для выполнения 9 В ячейках А1 и В1 два числа. Найти сумму чисел, если первое число меньше второго, и разность, если первое число больше второго. Для этого в ячейку С1 поместите формулу =ЕСЛИ(A1<B1;A1+B1;A1-B1). Пример для выполнения 10 Создать таблицу оплаты электроэнергии по показаниям счетчика. При занесении показаний счетчика в колонку C текущего месяца они должны автоматически попадать в колонку B следующего месяца. Если в колонку C не введены показания, то в колонке D должен выводиться 0. Рис. 11. Учет электроэнергии Создайте таблицу, приведенную на рисунке 11. Введите показания счетчика в ячейки B4 и С4. Поместите в ячейку B5 формулу =C4. Скопируйте формулу в ячейки B6:B15. Поместите в ячейку D4 формулу =ЕСЛИ(C4=0;0;(C4-B4)*$B$1). Скопируйте формулу в ячейки D5:D15. Пример для выполнения 11 Усложним предыдущую задачу. В таблице учета электроэнергии определить сумму электроэнергии за год, при этом учесть, что с какого-то месяца тариф на электроэнергию может измениться. 13 Рис. 12. Учет электроэнергии при изменении тарифа Создайте таблицу, приведенную на рисунке 12. Поместите в ячейку D18 формулу: =СУММ(D6:D17). Поместите в ячейку B7 формулу =C6. Скопируйте формулу в ячейки B8:B17. Поместите в ячейку D6 формулу =ЕСЛИ(C6=0;0;ЕСЛИ(A6<$B$3;(C6-B6)*$B$1;(C6-B6)*$B$2))). Скопируйте формулу в ячейки D7:D17. Использование временных функций Пример для выполнения 12 Имеется таблица с указанием срока выполнения конкретных мероприятий и факта выполнения. Подсчитать, сколько осталось дней до завершения каждого мероприятия на текущую дату. Вывести одно из примечаний: В процессе. Выполнено в срок. Выполнено не в срок. Не выполнено. Создайте таблицу, приведенную на рисунке 13. 14 Рис. 13. Контроль выполнения мероприятий В ячейку B1 поместите функцию =СЕГОДНЯ(). В ячейку D4 поместите функцию =ДНЕЙ360($B$1;B4;1). Скопируйте ячейку D4 в ячейки D5:D8. В ячейку E4 поместите формулу: =ЕСЛИ(И(C4=0;D4>0);"В процессе"; ЕСЛИ(C4<>0;ЕСЛИ(B4-C4>=0;"Выполнено в срок"; "Выполнено не в срок");"Не выполнено")) Скопируйте ячейку E4 в ячейки E5:E8. Использование формул массивов Формулы массивов позволяют использовать в качестве аргументов функций диапазоны ячеек. Для ввода таких формул используется комбинация клавиш Shift+Contr+Enter. Пример для выполнения 13 Имеется массив данных в ячейках А1:А10 (рис. 14). Рис. 14. Использование формул массивов Необходимо найти сумму положительных и сумму отрицательных чисел. Введите в ячейку D1 формулу: =СУММ(A1:A10+ABS(A1:A10))/2. Нажмите комбинацию клавиш: Shift+Contr+Enter. В результате формула приобретет вид: {=СУММ(A1:A10+ABS(A1:A10))/2}. Фигурные скобки говорят о том, что это формула массива. 15 Чтобы найти сумму отрицательных чисел, поступите аналогичным образом: − введите в ячейку D2 формулу: =СУММ(A1:A10-ABS(A1:A10))/2; − нажмите комбинацию клавиш: Shift+Contr+Enter. Пример для выполнения 14 Имеется несмежный диапазон данных в ячейках В3:В6 и D3:D6 (рис. 15). Рис. 15. Определение количества чисел, больших N Необходимо подсчитать количество чисел, больших N. Занесите в ячейку B1 значение N, а в ячейку В8 следующую формулу: =СУММ(ЕСЛИ(B3:B6>B1;1;0);ЕСЛИ(D3:D6>B1;1;0)). Нажмите комбинацию клавиш Shift+Contr+Enter. В результате в ячейке В8 выведется количество значений, больших 6. Использование финансовых функций Пример для выполнения 15 Рис. 16. Расчет амортизационных отчислений 16 Powered by TCPDF (www.tcpdf.org) Подсчитайте амортизационные отчисления за 10 лет по годам. Создайте таблицу, приведенную на рисунке 16. Введите в ячейку B6 формулу =АСЧ($B$1;$B$2;$B$3;A6). Скопируйте формулу в ячейки B7:B15. Поместите в ячейку B16 формулу: =СУММ(B6:B15). Для проверки поместите в ячейку B17 формулу: =B1-B2. Значения в ячейках B16 и B17 должны совпадать. 5. Сортировка и фильтрация данных Сортировка Сортировка данных выполняется из меню «Главная > Редактирование > Сортировка и фильтр». Сортировать данные можно как по одному столбцу, так и по нескольким столбцам. Пример для выполнения 16 Рис. 17. Таблица для сортировки Рис. 18. Форма установок для сортировки 17 Используя списки, создайте таблицу, приведенную на рисунке 17. Встаньте на ячейку E2 и выполните контекстное меню «Сортировка > Сортировка от максимального к минимальному». Восстановите данные. Для этого встаньте на ячейку A2 и выполните контекстное меню «Сортировка > Сортировка от минимального к максимальному». Выполните контекстное меню «Сортировка > Настраиваемая сортировка». При этом откроется форма сортировки. Введите в поля формы значения, приведенные на рисунке 18. При этом отсортированные данные должны выглядеть как на рисунке 19. Снова восстановите данные. Рис. 19. Отсортированная таблица Фильтрация Фильтры позволяют выводить не все данные таблицы, а только те данные, которые необходимы. Для установки фильтра необходимо выделить заголовки таблицы и выполнить меню «Главная > Редактирование > Сортировка и фильтр > Фильтр >». Для отмены фильтра необходимо выполнить аналогичную команду. Для создания сложных фильтров можно при нажатии на стрелочку фильтра выбрать опцию «Текстовые фильтры» для строковых данных и «Числовые фильтры» для числовых данных. При назначении фильтров можно использовать шаблоны с символами: • * – любое количество любых символов; • ? – любой один символ. Пример для выполнения 17 Вывести строки, для которых временем года является лето. Выделите заголовки таблицы. 18 Выполните меню «Главная > Редактирование > Сортировка и фильтр > Фильтр >». Кликните по стрелке у столбца «Время» и установите флажок только у опции «Лето». Пример для выполнения 18 Вывести строки, для которых температура выше 20 градусов. Кликните по стрелке у столбца «Градусы» и выберите опцию «Числовые фильтры > Больше». Заполните форму, как показано на рисунке 20. Рис. 20. Установки для числового фильтра Самостоятельно создайте следующие фильтры. Вывести все строки, для которых день начинается с буквы «В». Вывести все месяцы, которые заканчиваются на «ь». Вывести все дни, у которых вторая буква «о». Вывести все дни, у которых вторая буква «о» и температура больше 15 градусов. Назначить фильтр можно, также выполнив команду «Вставка > Таблицы > Таблица». Таблица упрощает сортировку, фильтрацию и форматирование связанных данных. При выполнении данной команды появляется дополнительное меню «Работа с таблицами > Конструктор», позволяющее производить операции над всей таблицей. Пример для выполнения 19 Выделите таблицу, приведенную на рисунке 17. Выполните меню «Вставка > Таблицы > Таблица». Выполните появившееся меню «Работа с таблицами > Конструктор». На вкладке «Параметры стилей таблиц» установите флажок «Строка итогов». На вкладке «Стили таблиц» выберите красно-розовый стиль. В результате получим таблицу, приведенную на рисунке 21. 19 Рис. 21. Создание таблицы взаимосвязанных данных Промежуточные итоги Такие стандартные функции, как сумма, минимум, максимум и среднее не чувствительны к установленным фильтрам. Для того чтобы результат формулы реагировал на установленный фильтр, необходимо использовать формулу «Промежуточные итоги». Первый аргумент этой формулы – это номер функции, который может принимать значения, приведенные в таблице 2. Второй аргумент – диапазон значений. Таблица 2 Коды функций для функции «Промежуточные итоги» 1 2 3 4 5 6 7 8 9 10 11 СРЗНАЧ СЧЁТ СЧЁТЗ МАКС МИН ПРОИЗВЕД СТАНДОТКЛОН СТАНДОТКЛОНП СУММ ДИСП ДИСПР Пример для выполнения 20 Откройте таблицу, приведенную на рисунке 17. Установите фильтр. В ячейки D15:D18 поместите функции: =СУММ(E2:E13) 20 =МАКС(E2:E13) =МИН(E2:E13) =СРЗНАЧ(E2:E13) соответственно. В ячейки E15:E18 поместите функции: =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(109;E2:E13) =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(4;E2:E13) =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(5;E2:E13) =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(1;E2:E13) соответственно. Если в таблице не установлены фильтры, то значения в ячейках D15:D18 и E15:E18 будут одинаковыми. Установите фильтр для вывода времени года «Зима». Обратите внимание, что значения в отдельных ячейках столбцов D и E изменились, как показано на рисунке 22. Рис. 22. Вывод промежуточных итогов 6. Использование имен переменных Использование имен переменных повышает наглядность формул. Задать имя переменной можно, выполнив меню «Формулы > Определенные имена > Присвоить имя». Посмотреть, где находится переменная в таблице, можно, выбрав ее имя из раскрывающегося списка (рис. 23). Удалить имя переменной можно, выполнив меню: «Формулы > Диспетчер имен > Удалить». Пример для выполнения 21 Создайте таблицу, приведенную на рисунке 24. Встаньте на ячейку B1 и выполните «Формулы > Определенные имена > Присвоить имя». В открывшемся окне присвойте имя «Курс_доллара». Аналогично присвойте имя «Курс_Евро» ячейке B2. Введите в ячейку С5 формулу =B5/Курс_доллара. Скопируйте формулу в ячейки С6:C8. 21 Введите в ячейку D5 формулу =B5/Курс_Евро. Скопируйте формулу в ячейки D6:D8. Рис. 23. Выбор имени переменной из списка Рис. 24. Таблица стоимости товаров Пример для выполнения 22 Создайте таблицу, приведенную на рисунке 25. Выделите диапазон A2:A9 и присвойте ему имя «Приход». Выделите диапазон B2:B9 и присвойте ему имя «Расход». Выделите диапазон С2:С9, введите формулу =Приход-Расход и нажмите комбинацию клавиш Shift+Ctrl+Enter. В результате формула примет вид формулы массива и заключится в фигурные скобки. Пример для выполнения 23 Необходимо поэлементно перемножить два массива одинакового размера. Создайте массивы М1 и М2, приведенные на рисунке 26. Выделите диапазон A2:B3 и присвойте ему имя «M1». Выделите диапазон D2:E3 и присвойте ему имя «M2». 22 Выделите диапазон G2:H3, введите формулу =M1*M2 и нажмите комбинацию клавиш Shift+Ctrl+Enter. Рис. 25. Таблица остатков Рис. 26. Поэлементное умножение массивов 7. Построение простых диаграмм и графиков Для построения графиков используется меню «Вставка > Диаграммы». Далее выбирается тип диаграммы. Пример для выполнения 24 Постройте гистограмму средней температуры по временам года и годам. Для этого создайте таблицу, приведенную на рисунке 27. Рис. 27. Средняя температура по временам года Выделите диапазон A3:D6. Выполните «Вставка > Диаграммы > Гистограмма» и выберите пиктограмму «Гистограмма с группировкой». Выделите область построения. При этом станет доступным меню «Работа с диаграммами». Активизируйте вкладку «Стили диаграмм» и выберите «Стиль 2». Активизируйте вкладку «Макеты диаграмм» и выберите «Ма23 кет 3». Выделите заголовок диаграммы и измените его на заголовок «Средняя температура». Выделите подзаголовок «Ряд 1». Выполните контекстное меню «Выбрать данные». Выделите в списке «Ряд 1», нажмите кнопку «Изменить» и в поле «Имя ряда» введите новое название «2010». Аналогично измените подзаголовки «Ряд 2» и «Ряд 3». В результате должна получиться гистограмма, приведенная на рисунке 28. Рис. 28. Гистограмма температуры по годам и временам года Самостоятельно постройте объемную 2011 года, приведенную на рисунке 29. Осень; 8 круговую диаграмму для Зима; -15 Лето; 22 Весна; 18 Рис. 29. Диаграмма температуры за 2011 г. Обратите внимание, что круговые диаграммы можно строить только для одного столбца данных. Для построения диаграммы при нажатой клавише Ctrl выделите диапазоны A3:A6 и С3:С6. Пример для выполнения 25 Постройте график изменения температуры по месяцам. Для этого создайте таблицу, приведенную на рисунке 30. 24 Рис. 30. Таблица температуры по месяцам Выделите диапазон A2:B10. Выполните «Вставка > Диаграммы > График» и выберите пиктограмму «График». В результате получится график, приведенный на рисунке 31. 30 20 10 -10 -20 Декабрь Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь 0 Ряд1 -30 -40 Рис. 31. График изменения температуры по месяцам Обратите внимание, что диаграмма «График» отображает развитие процесса во времени (по датам, годам или категориям). Если второй столбец данных является функцией от первого, то необходимо использовать диаграмму «Точечная». В качестве примера постройте синусоиду. Для этого выполните следующие действия. Создайте таблицу, приведенную на рисунке 32. В ячейку B2 поместите формулу =SIN(A2*ПИ()/180). Скопируйте формулу в необходимые ячейки столбца B. Выделите диапазон A2:B38. Выполните «Вставка > Диаграммы > точечная» и выберите пиктограмму «Точечная с гладкими кривыми». В результате получится график, приведенный на рисунке 33. 25 Рис. 32. Таблица для построения синусоиды 1,5 1 0,5 0 Ряд1 0 100 200 300 400 -0,5 -1 -1,5 Рис. 33. График синусоиды Пример для выполнения 26 Аналогично строятся несколько графиков в одной системе координат. Создайте таблицу, приведенную на рисунке 34. В ячейку B6 поместите формулу =ОКРУГЛ(ОТБР(($B$2-$B$3+1);0)*СЛЧИС()+$B$3;0). Скопируйте формулу в ячейки B7-B17. В ячейку B6 поместите формулу =ОКРУГЛ(ОТБР(($C$2-$C$3+1);0)*СЛЧИС()+$C$3;0). Скопируйте формулу в ячейки C7-C17. Выделите диапазон B7-C17. Выполните «Вставка > Диаграммы > График > График». В результате получится диаграмма, приведенная на рисунке 35. Выделите левый столбец оцифровки диаграммы. Выполните контекстное меню «Формат оси». Отключите кнопки «Авто». 26 Установите фиксированные значения: минимальное – 25, максимальное – 5. Рис. 34. Таблица изменения курса по месяцам 45 43 41 39 37 35 Доллар 33 Евро 31 29 27 25 1 2 3 4 5 6 7 8 9 10 11 12 Рис. 35. График курса валюты При изменении диапазона в ячейках B2-C3 будут меняться как значения в таблице, так и графики. 27 Часть 2 1. Работа со структурами данных Создание структуры в автоматическом режиме Под структурой понимается группировка отдельных строк или столбцов таблицы, рассмотренная ранее. Структуру можно создать автоматически, если правильно расположить формулы подсчета промежуточных итогов. Пример для выполнения 1 Создайте таблицу, приведенную на рисунке 1. Сделайте необходимое объединение ячеек, расположение и выравнивание текста. Рис. 1. Таблица для создания структуры Поместите в ячейку E3 формулу =СУММ(B3:D3). Скопируйте формулу в ячейки E4:E14 и I3:14. Для одновременного копирования в разные диапазоны при выделении нового диапазона держите нажатой клавишу Ctrl. Поместите в ячейку B7 формулу =СУММ(B3:B6). Скопируйте формулу в ячейки C7:D7 и F7:H7. Поместите в ячейку D14 формулу =СУММ(B8:B13). Скопируйте формулу в ячейки C14:D14 и F14:H14. Поместите в ячейку J3 формулу =СУММ(E3;I3). Обратите внимание, что аргументы в формуле разделены точкой с запятой. 28 Скопируйте формулу в ячейки J4:J15. Поместите в ячейку B15 формулу =СУММ(B14;B7). Скопируйте формулу в ячейки C15:I15. Чтобы посмотреть формулы в ячейках, выполните «Формулы > Зависимости формул» и нажмите кнопку «Показать формулы». Вернуться в исходное состояние можно, повторив указанную команду. Теперь все готово, чтобы автоматически создать структуру. Для этого выполните «Данные > Структура». Раскройте список «Группировать» и выберите «Создание структуры». Данные теперь будут выглядеть как на рисунке 2. Рис. 2. Таблица с созданной структурой Для удаления структуры выполните «Данные > Структура». Раскройте список «Разгруппировать» и выберите «Удалить структуру». Использование промежуточных итогов для создания структуры Процесс создания структуры можно ускорить, если использовать вставку промежуточных итогов. К сожалению, автоматическое формирование промежуточных итогов Excel осуществляет только по строкам. Рассмотрим пример формирования той же структуры меньшими затратами. Пример для выполнения 2 Создадим таблицу, приведенную на рисунке 3. Заметим, что в данной таблице нет строк с итогами по строкам, как на рисунке 1. 29 Рис. 3. Таблица для создания структуры Поместите в ячейку E3 формулу =СУММ(B3:D3). Скопируйте формулу в ячейки E4:E12 и I3:I12. Для одновременного копирования в разные диапазоны при выделении нового диапазона держите нажатой клавишу Ctrl. Поместите в ячейку J3 формулу =СУММ(I3;E3). Скопируйте формулу в ячейки J4:J12. Заметим, что больше копирование формул, в отличие от примера 1, нам не понадобится. Выделите столбцы B:D и выполните «Данные > Cтруктура > Группировать». Аналогично сгруппируйте столбцы F:H. Аналогично сгруппируйте столбцы B:I. В результате получили структуру по вертикали. Рис. 4. Формирование промежуточных итогов 30 Чтобы получить структуру по горизонтали, встаньте на ячейку B3 таблицы и выполните «Данные > Структура > Промежуточные итоги» и заполните форму, приведенную на рисунке 4. На данной форме отметьте все столбцы, кроме столбца «Магазин», не забудьте убрать флажок «Заменить текущие итоги» и нажмите кнопку «Ок». В результате получите аналогичную структуру, как и в примере 1. Заметим, что в ячейке B7 теперь находится не формула суммы, а формула =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;B3:B6). Следовательно, итоги будут чувствительны к фильтрам. Встаньте на ячейку A1 и выполните «Данные > Сортировка и фильтр > Фильтр». Занесите данные в колонку «Январь», как показано на рисунке 5. Рис. 5. Таблица с созданной структурой и фильтрами Заметим, что общий итог в колонке «Январь» составляет 88 единиц. Раскройте фильтр для месяца «Январь», выберите «Числовой фильтр > Больше» и заполните форму, приведенную на рисунке 6. Заметим, что после установленного фильтра общий итог в колонке «Январь» составит уже 61 единицу. Рис. 6. Форма для установки фильтра 31 2. Работа со списком как с базой данных Список – это диапазон ячеек, в котором нет пустых строк или столбцов. Ячейки в списке имеют заголовки. По краям списка должны быть пустые столбцы и строки. В сложном списке выделяют три диапазона: «База», «Критерии» и «Выборка». Использование формы данных Для работы с формой данных ее необходимо добавить на панель быстрого доступа. Для этого щелкните стрелку на панели быстрого доступа и выберите элемент «Другие команды». В открывшемся окне «Параметры Excel» в поле «Выбрать команды из» выберите из раскрывающегося списка «Все команды». В предлагаемом списке выберите кнопку «Форма» и щелкните элемент «Добавить». Теперь данные можно вводить, используя форму ввода. Пример для выполнения 3 Создайте таблицу, приведенную на рисунке 7. Рис. 7. Таблица-список Задайте имя «База» диапазону A2:F12 (см. «Часть 1. Использование имен переменных»). Задайте имя «Критерий 1» диапазону A15:F16. Задайте имя «Критерий 2» диапазону A15:F17. Задайте имя «Критерий 3» диапазону A15:G16. Задайте имя «Выборка» диапазону A20:F30. 32 Powered by TCPDF (www.tcpdf.org) Имена нам понадобятся для дальнейшей фильтрации данных. Встаньте на любую ячейку таблицы и выберите пиктограмму «Форма». Внешний вид формы приведен на рисунке 8. С помощью формы можно осуществлять навигацию по данным, добавлять и удалять данные. Если данные в каком-либо поле формы будут изменены, при нажатии кнопки «Добавить» эти изменения вступят в силу. После нажатия кнопки «Добавить» поля формы очищаются для ввода добавляемых данных. Если ни в одно поле формы данные не были внесены, то при нажатии кнопки «Добавить» ничего не происходит (нельзя добавить пустую строку). Одним из недостатков формы данных является то, что данные нельзя добавлять на основе шаблона (необходимо заново вводить значения всех полей). С помощью формы данных можно осуществлять поиск как вперед, так и назад. Для этого нажмите кнопку «Критерии». Введите в поле «Страна» букву «Р». Теперь при нажатии кнопок «Далее» или «Назад» мы будем перемещаться только по записям, у которых в поле «Страна» указана «Россия». Чтобы отменить критерий, снова нажмите кнопку «Критерии», а затем кнопку «Очистить». Фильтрация данных в списках В списках можно использовать все ранее рассмотренные способы фильтрации данных. Дополнительно можно организовывать фильтры со сложными критериями, которые находятся непосредственно в разделе «Критерии». Отфильтрованные данные в этом случае можно автоматически копировать в указанную область. Рис. 8. Форма для работы с данными Пример для выполнения 4 Введите в разделе «Критерии» в столбце «Страна» значение «Украина». В столбце «Индекс» введите значение «>260000». 33 Выполните «Данные > Сортировка и фильтр > Дополнительно». Заполните открывшуюся форму, как показано на рисунке 9. Рис. 9. Форма установки расширенного фильтра После нажатия кнопки «Ok» отфильтрованные данные скопируются в область «Фильтр». Здесь важно понимать, что критерии, набранные в одной строке, работают по условию «И», при этом все указанные условия должны быть удовлетворены. Критерии, набранные в нескольких строках, работают по условию «ИЛИ». При указании диапазона критерия на форме (рис. 9) важно, чтобы диапазон был указан точно. В частности, если критерии указаны в одной строке, а выбранный диапазон составляет две строки, то фильтр работать не будет. Заголовки полей также входят в диапазон критерия. Установите фильтр для вывода только имен «Игорь» и «Лена». Для этого удалите предыдущие критерии. Поместите данные имена в раздел «Критерии» в столбец «Имя» (каждое имя в свою строку). Выполните «Данные > Сортировка и фильтр > Дополнительно». Заполните открывшуюся форму, как показано на рисунке 9, при этом в поле «Диапазон условий» укажите «Критерий 2». Как быть, если условие «И» необходимо выполнить для одного поля, например необходимо вывести строки для индексов в указанном диапазоне? Для этого добавьте в таблицу критериев еще один столбец с аналогичным заголовком «Индекс». В первый столбец введите значение «>250000». Во второй столбец введите значение «<300000», как показано на рисунке 10. Рис. 10. Фильтрация по «И» для одного поля Выполните «Данные > Сортировка и фильтр > Дополнительно» и заполните форму, как показано на рисунке 11. 34 Рис. 11. Заполнение формы фильтра Как видно из рисунка 11, вместо имен диапазонов можно указывать диапазоны непосредственно. В частности для поля «Диапазон условий» можно было указать «Критерий 3». 3. Работа с листами, защита, консолидация данных Данные могут располагаться на нескольких листах. Имена листов выведены на ярлычках в нижней части окна рабочей книги. Для того чтобы быстро вставить новый лист после существующих листов, щелкните ярлык «Вставить лист» в нижней части экрана. Чтобы вставить новый лист перед существующим листом, выберите ярлык этого листа и выполните «Главная > Ячейки», откройте раскрывающийся список «Вставить» и выберите «Вставить лист». Для удаления листа выполните контекстное меню «Удалить». Для переименования листа выполните контекстное меню «Переименовать». Пример для выполнения 5 Создайте таблицу, приведенную на рисунке 12. Рис. 12. Таблица для расчета зарплаты 35 В ячейку D3 поместите формулу =C3*1/100. В ячейку E3 поместите формулу =C3*13/100. В ячейку F3 поместите формулу =C3-D3-E3. Переименуем лист и назовем его «Начисления». Постройте диаграмму, отражающую начисления каждого сотрудника. Для этого выделите ячейки с фамилиями и, удерживая нажатой клавишу Ctrl, выделите ячейки с суммой (столбец F). Выполните «Главная > Вставка > Диаграммы > Круговая > Объемная круговая». Выберите шестой макет диаграммы. Измените заголовок диаграммы на «Начисления». В результате должна получиться диаграмма, приведенная на рисунке 13. Начисления Иванов 8% 9% 13% Иванова 10% 9% 11% 9% 8% 6% 9% 8% Китова Котов Круглова Леонов Петров Сидоров Рис. 13. Диаграмма начислений Используя контекстное меню, вырежьте диаграмму и вставьте ее на второй лист. Переименуйте лист, содержащий диаграмму, в «Диаграмма». Для проверки связи между диаграммой и данными перейдите на лист «Начисления». Вставьте в середину таблицы новую строку и занесите данные. Перейдите на лист «Диаграмма». Новые данные должны отразиться в диаграмме. Перейдите на третий лист. Переименуйте его в «Детские». Встаньте на ячейку A2 и введите формулу =Начисления!B3. Скопируйте ячейку A2 в ячейки A3:A12. Теперь если на листе «Начисления» внести изменения, то они отразятся и на листе «Детские». В ячейку B2 поместите формулу =Начисления!G3*300. Сделайте шапку к таблице, как на рисунке 14. Установите фильтр. Отфильтруйте те записи, сумма которых не равна нулю. 36 Рис. 14. Таблица ведомости Защита ячеек По умолчанию все ячейки листа защищены, но сама защита не активна. Чтобы активизировать защиту, выполните: «Рецензирование > Защитить лист». Теперь все ячейки листа стали недоступными для изменения в них данных. Как правило, на рабочих листах защищают только формулы, а ячейки для ввода данных оставляют незащищенными. Для снятия защиты с данных выполните следующие действия. Перейдите на лист «Начисления». Удерживая клавишу Ctrl, выделите столбцы A, B, C и G. Выполните «Главная > Число». В открывшейся форме выберите вкладку «Защита» и уберите флажок перед строкой «Защищаемая ячейка». Выполните «Рецензирование > Защитить лист». Теперь ячейки, содержащие формулы, стали недоступны. Аналогично защитите формулы на листе «Детские». Защищая лист «Детские», поставьте флажок перед опцией «Использование автофильтра», как показано на рисунке 15, чтобы фильтр остался доступным. Рис. 15. Опции защиты листа 37 Консолидация данных Под консолидацией подразумевается объединение данных. Как правило, эти данные расположены на разных листах или в разных книгах. Рассмотрим расчет сальдо с использованием консолидации. Пример для выполнения 6 Переименуйте «Лист 1» в «Приход» и создайте на нем таблицу, приведенную на рисунке 16. Рис. 16. Таблица прихода Переименуйте «Лист 2» в «Расход» и создайте на нем таблицу, приведенную на рисунке 17. Переименуйте «Лист 3» в «Сальдо». Встаньте в ячейку A1. Выполните «Данные > Работа с данными» и выберите пиктограмму «Консолидация». Выберите в раскрывающемся списке функцию «Сумма». Перейдите на лист «Приход». Выделите диапазон A2:B50. Нажмите кнопку «Добавить». Рис. 17. Таблица расхода 38 Аналогично добавьте данные с листа «Расход». Установите флажок «Значение левого столбца». В результате форма должна быть заполнена, как показано на рисунке 18. Рис. 18. Консолидация данных Нажмите кнопку «Ok». В результате должна получиться таблица, приведенная на рисунке 19. Рис. 19. Таблица остатков Проверьте таблицу остатков, установив в таблицах прихода и расхода соответствующие фильтры и рассчитав промежуточные итоги. При изменении значений в таблицах прихода и расхода они автоматически не попадут в таблицу остатков. Чтобы эти изменения отразились в таблицах остатков, необходимо выполнить следующее. Выделить в таблице остатков столбцы A:B. Выполнить «Данные > Работа с данными» и выбрать пиктограмму «Консолидация». При этом форма будет уже заполненной. Нажмите только кнопку «Ok». Пример для выполнения 7 Если на форме консолидации (рис. 6) установить флажок «Создавать связи с исходными данными», то при изменении данных по приходу и расходу данные остатков будут изменяться, но при добавлении данных в приход или расход эти изменения не отразятся. Добавьте в книгу еще один лист «Сальдо 1». 39 Консолидируйте данные, как и в предыдущем примере, установив флажок «Создавать связи с исходными данными». В результате получится таблица, приведенная на рисунке 20. Теперь, если изменить значения в приходе или расходе, то в таблице остатков эти изменения отобразятся. Так как при практическом расчете сальдо данные не изменяются, а добавляются, удобнее использовать первый вариант расчетов. Рис. 20. Таблица остатков при сохранении связей 4. Создание сводных таблиц Сводная таблица – это интерактивная таблица, которая объединяет большие объемы данных, используя выбранный формат и метод вычисления. Сводные таблицы используются прежде всего для объединения данных в группы и отображения зависимостей одних данных от других. Пример для выполнения 8 Создайте таблицу, приведенную на рисунке 21. Выполните «Вставка > Сводная таблица». Выделите диапазон таблицы с заголовками. Отметьте опцию «На новый лист», как показано на рисунке 22. В результате откроется конструктор создания сводных таблиц, приведенный на рисунке 23. В область «Названия строк» поместите поле «Магазин». В область «Названия столбцов» поместите поле «Напиток». В область «Значения» поместите поле «Сумма». В область «Фильтр отчета» поместите поля «Месяц» и «Наименование». Выполните «Работа со сводными таблицами > Стили сводных таблиц» и выберите стиль «Нет». 40 Выполните «Работа со сводными таблицами > Макет > Макет отчета» и выберите «Показать в табличной форме». В результате получим таблицу, приведенную на рисунке 24. Для обновления данных таблицы выполните контекстное меню «Обновить». Как видно из рисунка 24, в сводной таблице имеется фильтр по строкам (магазинам), фильтр по столбцам (напиткам), а также фильтры, накладываемые на всю таблицу. Это фильтры «Месяц» и «Наименование». Используя различные фильтры, получите следующие данные: • в каких магазинах есть водка «Градус»; • в каких магазинах есть коньяк «Квинт»; • на какую сумму продали водку за первый квартал и в каких магазинах. Рис. 21. Таблица продаж по магазинам Рис. 22. Создание сводных таблиц (шаг 1) 41 Рис. 23. Конструктор сводных таблиц Рис. 24. Сводная таблица в разрезе магазин – напиток Создайте сводную таблицу, где в строках были бы напитки, а в столбцах – месяцы. В качестве фильтров используйте магазины и напитки. В результате должна получиться сводная таблица, приведенная на рисунке 25. Используя данную таблицу, определите: • в какие месяцы и на какую сумму продали пива; • в каком месяце в магазине «Ирина» продавался коньяк. 42 Рис. 25. Сводная таблица в разрезе напиток – месяц Форматирование сводных таблиц При создании сводных таблиц можно использовать различные стили и макеты. Также в качестве строк или столбцов можно использовать несколько полей. Пример для выполнения 9 Создайте сводную таблицу на базе таблицы, приведенной на рисунке 21, используя в качестве строк поля «Магазин» и «Напиток». Фрагмент конструктора приведен на рисунке 27. Выполните «Работа со сводными таблицами > Параметры». На вкладке «Показать или скрыть» активизируйте опции «Список полей», «Кнопки +.-» и «Заголовки полей». Выполните «Работа со сводными таблицами > Конструктор». Рис. 26. Параметры поля значений На вкладке «Стили сводной таблицы» выберите стиль «Средний 3». На вкладке «Параметры стилей сводной таблицы» установите флажки для опций «Заголовки строк» и «Заголовки столбцов». 43 На вкладке «Макет» из списка «Пустые строки» выберите «Вставить пустую строку после каждого элемента». На вкладке «Макет» из списка «Промежуточные итоги» выберите «Показывать все промежуточные итоги в нижней части группы». На вкладке «Макет» из списка «Общие итоги» выберите «Включить для строк и столбцов». На вкладке «Макет» из списка «Макет отчета» выберите «Показать в табличной форме». В результате получится таблица, приведенная на рисунке 28. Рис. 27. Конструктор для создания сводной таблицы Используя перечисленные выше инструменты, можно гибко менять вид сводной таблицы. Рассмотрим следующий пример. Выполните «Работа со сводными таблицами > Конструктор». На вкладке «Макет» из списка «Макет отчета» выберите «Показать в сжатой форме». Нажмите кнопки «–» перед всеми магазинами так, чтобы они превратились в «+». На вкладке «Макет» из списка «Пустые строки» выберите «Удалить пустую строку после каждого элемента». В результате получится сводная таблица, приведенная на рисунке 29. 44 Рис. 28. Сводная таблица после форматирования Рис. 29. Сводная таблица после модификации Вычисление сальдо с помощью сводных таблиц Вычисление сальдо было рассмотрено при консолидации данных в примере 6. Еще удобнее это сделать с использованием сводных таблиц. Пример для выполнения 10 Для вычисления сальдо необходимо создать сводную таблицу, использующую консолидацию данных. Для этого нужно подключить мастер сводных таблиц и диаграмм, выполнив следующие действия. Активизируйте кнопку «Office» и нажмите кнопку «Параметры Excel». 45 Выберите раздел «Настройка». В раскрывающемся списке «Выбрать команды» выберите «Все команды». В нижнем списке выберите «Мастер сводных таблиц и диаграмм». Нажмите кнопки «Добавить» и «Ok». Теперь ярлык «Мастера» появится на полосе быстрого запуска, как показано на рисунке 30. Рис. 30. Пиктограмма мастера сводных таблиц Переименуйте «Лист 1» в «Приход» и создайте таблицу, приведенную на рисунке 31. Установите на таблицу фильтр. В ячейку E1 поместите формулу: =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;B:B). Рис. 31. Таблица прихода Переименуйте «Лист 2» в «Расход» и создайте таблицу, приведенную на рисунке 32. Установите на таблицу фильтр. В ячейку E1 поместите формулу: =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;B:B). 46 Рис. 32. Таблица расхода Рис. 33. Этап 2 из 3 создания сводной таблицы Переименуйте «Лист 3» в «Сальдо». Встаньте на ячейку A1. Активизируйте пиктограмму «Мастер сводных таблиц и диаграмм». Выберите опцию «В нескольких диапазонах консолидации». Нажмите кнопку «Далее». Выберите опцию «Создать одно поле страницы». Нажмите кнопку «Далее». Перейдите на лист «Приход». Выделите столбцы A:B. Нажмите кнопку «Добавить». Перейдите на лист «Расход». Выделите столбцы A:B. Нажмите кнопку «Добавить». В результате должна получиться форма, приведенная на рисунке 33. Нажмите кнопку «Далее» и затем кнопку «Готово». Встаньте на любую ячейку сводной таблицы. В окне «Значения» откройте список «Количество по полю значения», выберите «Параметры полей значений» и функцию «Сумма», нажмите «Ok». 47 В результате получится сводная таблица, приведенная на рисунке 34. Рис. 34. Начальный вариант сводной таблицы Для вычисления сальдо столбцы и строки с итоговыми суммами нам не нужны. Чтобы их удалить, выполните следующее. Выберите вкладки «Работа со сводными таблицами > Конструктор > Макет > Общие итоги» и активизируйте строку «Отключить для строк и столбцов». Обведите ячейки сводной таблицы. В результате получится сводная таблица, приведенная на рисунке 35. Рис. 35. Промежуточный вариант сводной таблицы Заметим, что действительные имена полей при создании сводных таблиц на основе консолидации не переносятся. Изменим названия столбцов и строк на действительные имена полей непосредственно в таблице. Для этого кликнем по ячейке «Названия строк» и введем «Фамилия». Аналогично изменим ячейку «Названия столбцов» на «Сумма» и «Сумма по полю Значение» на «Сумма по полю Данные». И последнее, что осталось сделать, это скрыть строку «Пусто». Данная строка образовалась в результате того, что в выбранном диапазоне по приходу и расходу мы выделили полностью столбцы A и B. Это было сделано для того, чтобы в дальнейшем при добавлении строк на листы «Приход» или «Расход» эти изменения отобразились в сводной таблице. Выделите восьмую строку и выполните контекстное меню «Скрыть». В результате получится сводная таблица, приведенная на рисунке 35. 48 Powered by TCPDF (www.tcpdf.org) Рис. 36. Окончательный вариант сводной таблицы Тестирование Любую разработанную таблицу желательно протестировать, т. е. проверить, насколько правильно она работает. Для тестирования нашей таблицы перейдите на лист «Приход» и установите фильтр, чтобы выводился один Петров. В ячейке E1 должна появиться сумма, равная 12 единицам. Аналогично отфильтруйте данные в таблице расхода. Суммарный расход по Петрову должен составить –15 (минус 15) единиц. Нетрудно подсчитать значение, которое должно отобразиться в сводной таблице (12 – 15 = 3). Рис. 37. Суммарный приход Еще один вариант проверить суммарный приход и расход – это в сводной таблице в раскрывающемся списке «Страница» выбрать «Объект 1» для прихода или «Объект 2» для расхода. В результате получим все суммы по приходу, приведенные на рисунке 37, либо все суммы по расходу, приведенные на рисунке 38. Рис. 38. Суммарный расход Восстановите вычисление сальдо, выбрав в раскрывающемся списке опцию «Все». 49 Самое главное, что необходимо проверить, будут ли попадать в сводную таблицу строки, добавленные в приход или расход. Добавьте в конец таблицы прихода строку «Блинов» c суммой 5 единиц, а в конец таблицы расхода – эту же фамилию с суммой минус 2 единицы. Встаньте на любую ячейку сводной таблицы и выполните контекстное меню «Обновить данные». В результате фамилия Блинов должна добавиться в сводную таблицу с остатком 3 единицы. Построение диаграмм для сводных таблиц При построении диаграмм для сводных таблиц предыдущих версий Excel необходимо соблюдать следующие правила. Не отображайте в таблице промежуточные и общие итоги, поскольку это разорвет диапазон данных. Не используйте более двух полей для элементов строки и столбцов. Перед созданием диаграммы полностью выделите сводную таблицу за исключением полей «Фильтр отчета». В Excel 2007 можно встать на любую ячейку таблицы и выполнить «Работа со сводными таблицами > Параметры > Сводная диаграмма» и в открывшемся окне выбрать необходимую диаграмму. Пример для выполнения 11 Откройте сводную таблицу, приведенную на рисунке 24. Отмените все фильтры. Выполните «Работа со сводными таблицами > Параметры > Сводная диаграмма» и выберите «Гистограмма с группировкой». В результате получится диаграмма, приведенная на рисунке 39. Одновременно на лист выведется форма фильтров, приведенная на рисунке 40, с помощью которой можно управлять диаграммой. Выберите в качестве магазина магазин «Веста», и вид диаграммы сразу изменится, как показано на рисунке 41. 350 300 250 Вино 200 Водка 150 Коньяк 100 Пиво 50 0 Веста Ирина Караван Магнит Рис. 39. Диаграмма по магазинам и напиткам 50 Рис. 40. Фильтр для сводной таблицы 120 100 80 Вино 60 Водка 40 Коньяк 20 Пиво 0 Веста Рис. 41. Диаграмма по магазинам и напиткам с установленным фильтром Заметьте, что данные изменились не только в диаграмме, но и в самой таблице. Отмените все фильтры. Выполните «Работа со сводными таблицами > Параметры > Сводная диаграмма» и выберите «Круговая диаграмма». В результате получится диаграмма, приведенная на рисунке 42. Вино Веста Ирина Караван Магнит Рис. 42. Круговая диаграмма 51 Обратите внимание, что в круговой диаграмме одновременно может отображаться только один напиток, хотя никаких фильтров не установлено. Диаграммы удобны не для точного количественного анализа, а для сравнительного качественного анализа. В частности по диаграмме на рисунке 41 сразу можно сказать, что больше всего вина в магазине «Ирина», а в магазине «Магнит» его вообще нет. Если необходимо вывести другой напиток, выберите соответствующий фильтр. В частности, на рисунке 43 показана круговая диаграмма по напитку «Коньяк». Коньяк Веста Ирина Караван Магнит Рис. 43. Круговая диаграмма по напитку «Коньяк» Из диаграммы на рисунке 43 видно, что коньяк есть во всех магазинах и примерно половина этого напитка находится в магазине «Караван». Откройте сводную таблицу, приведенную на рисунке 25. Отмените все фильтры. Выполните «Работа со сводными таблицами > Параметры > Сводная диаграмма» и выберите «Гистограмма с накоплением». В качестве фильтра установите только первые три месяца. В результате получится диаграмма, приведенная на рисунке 44. 250 200 150 3 100 2 1 50 0 Вино Водка Коньяк Рис. 44. Гистограмма с накоплением 52 Из диаграммы видно, что вино продавалось только во втором месяце, коньяк – только в третьем месяце, а водка – в течение всего квартала. Откройте сводную таблицу, приведенную на рисунке 29. Выполните «Работа со сводными таблицами > Параметры > Сводная диаграмма» и выберите «Цилиндрическая с группировкой». Нажмите кнопку «+» так, чтобы открылись магазины «Веста» и «Магнит». В результате получится диаграмма, приведенная на рисунке 45. Итог 350 300 250 200 150 100 50 0 Итог Вино Водка Коньяк Пиво Веста Водка Коньяк Ирина Караван Магнит Рис. 45. Диаграмма по магазинам и напиткам 5. Анализ электронных таблиц с помощью сценария «Что – если» Анализ «Что – если» – это поиск ответов на такие вопросы, как: «Что будет, если процентная ставка кредита поднимется с 8,5 до 9%?» или «Что будет, если мы поднимем цену на нашу продукцию на 5%?». Анализ «Что – если» вручную Метод основан на принципе: есть одна или несколько ячеек для ввода информации, ссылка на которые используется в одной или нескольких ключевых ячейках с формулами. Пример для выполнения 12 Создайте таблицу, приведенную на рисунке 46. В ячейку B10 поместите формулу =B4*(1-B5). В ячейку B11 поместите формулу =ПЛТ(B7/12;B6;-B10). В ячейку B12 поместите формулу =B11*B6. В ячейку B13 поместите формулу =B12-B4. Изменяя значения в ячейках B4:B7, анализируйте изменение результатов в ячейках B10:B13. 53 Рис. 46. Расчет ипотечной ссуды Пример для выполнения 13 Как будет меняться ток в диагонали моста (рис. 47) при изменении напряжения питания и значений резисторов мостовой схемы? Создайте таблицу, приведенную на рисунке 48. Рис. 47. Мостовая схема Рис. 48. Расчет тока в диагонали мостовой схемы Присвойте ячейкам B1-B5 и B7 имена U, R_1, R_2, R_3, R_4 и I для дальнейшего удобства вычислений. Поместите в ячейку B7 формулу =(-U*(R_1*R_3-R_2*R_4))/(R_1*R_2*(R_3+R_4)+R_3*R_4*(R_1+R_2)). 54 Изменяйте значения резисторов, наблюдая за изменением тока в диагонали. Убедитесь, что при равенстве плеч R1=R2 и R3=R4 ток в диагонали моста равен нулю. Диспетчер сценариев Диспетчер сценариев – основной инструмент выполнения анализа «Что – если». С помощью диспетчера сценариев можно создать несколько наборов исходных данных (в диспетчере они называются изменяемыми ячейками) для моделирования различных ситуаций и присвоить имя каждому набору. Пример для выполнения 14 Смоделируйте ситуации для различных значений напряжения и сопротивлений резисторов и для мостовой схемы, приведенной на рисунке 46, при которых ток в диагонали моста будет равен 5 амперам. Откройте файл с таблицей, приведенной на рисунке 48. Выполните «Данные > Работа с данными». Из раскрывающейся пиктограммы «Анализ „Что – если“» выберите «Диспетчер сценариев». Нажмите кнопку «Добавить». В качестве названия сценария введите какое-нибудь имя, например «М1». В качестве изменяемых ячеек введите диапазон B1:B5. Заполнение формы приведено на рисунке 49. Нажмите кнопку «Ok». В результате откроется форма, приведенная на рисунке 49. Рис. 49. Форма изменения сценария В качестве значений ячеек введите 25, 2, 10, 2, 10 и нажмите «Ok». Аналогично создайте следующий сценарий, например «М2», со значениями 28, 2, 7, 2, 7. Создайте таким образом 10–12 сценариев. В результате форма будет выглядеть так, как показано на рисунке 51. 55 Теперь остается только выбрать необходимый сценарий и нажать кнопку «Вывести». Результаты расчетов тут же отобразятся в таблице. Рис. 50. Значения ячеек сценария Рис. 51. Диспетчер с созданными сценариями На основе сценария можно сформировать отчет. Нажмите кнопку «Отчет». В результате выведется форма, приведенная на рисунке 52. Рис. 52. Выбор отчета по сценарию Выберите «Структура» и нажмите кнопку «Оk». В результате сформируется отчет, приведенный на рисунке 53. Аналогично сформируйте отчет по сценарию в виде сводной таблицы. 56 Рис. 53. Отчет по сценарию в виде структуры Создание таблиц подстановки с одной ячейкой исходных данных В таблице подстановки с одной ячейкой исходных данных приводятся результаты расчетов по одной или нескольким формулам при различных значениях входящего в эту формулу параметра. Таблицу можно расположить в любом месте рабочей книги. Левый столбец содержит различные значения входящего в формулу параметра. Верхняя строка содержит формулы или (чаще всего) ссылки на ячейки с формулами, по которым рассчитывается результат. Пример для выполнения 15 Откройте таблицу, приведенную на рисунке 46. Необходимо узнать, как будут меняться наши расчетные данные при изменении процентной ставки от 7 до 9% с шагом 0,25. Создайте заготовку таблицы, приведенную на рисунке 54. Рис. 54. Заготовка таблицы подстановок: 1 – исходные данные; 2 – формулы или ссылки на формулы. 57 В ячейки E3-E11 поместите значения процентов. Обратите внимание, что 7% эквивалентно числу 0,07. В ячейки F2:I2 поместите ссылки на формулы, например в ячейке F2 будет =B10, в ячейке G2 – =B11 и т. д. Выделите диапазон E2:I11. Выполните «Данные > Работа с данными». Из раскрывающейся пиктограммы «Анализ „Что – если“» выберите «Таблица данных». Поместите в окно «Подставлять значения по строкам» значение $B$7, как показано на рисунке 55, и нажмите «Ok». Рис. 55. Настройка таблицы данных В результате получится таблица, приведенная на рисунке 56. Если встать на какую-нибудь ячейку таблицы, например F3, то видно, что в данную ячейку поместилась формула массива {=ТАБЛИЦА(;B7)}. Заметим, что в строке 8% данные соответствуют нашим расчетным данным. Если изменить исходные данные, например первый взнос установить не 20, а 25%, то произойдет перерасчет всей таблицы подстановок. Рис. 56. Заполненная таблица подстановок Пример для выполнения 16 Рассмотрим еще один технический пример. Имеется электрическая схема, приведенная на рисунке 57. 58 Рис. 57. Электрическая схема для расчета Исходные данные для расчета: U = 20; R1 = 4; R2 = 5; R3 = 6. Определить токи I1, I2, I3. Расчет производим по следующим формулам. Эквивалентное сопротивление: R 2 ⋅ R3 + R1 ; R 2 + R3 U I1 = ; R U 1 = R1* I1 ; U 2 = U − U1 ; U2 ; I2 = R2 U2 . I3 = R3 R12 = Введите исходные данные и расчетные значения в таблицы, приведенные на рисунке 58. Рис. 58. Пример расчета электрической схемы В ячейки B7-B12 поместите следующие формулы: =B3+((B4*B5)/(B4+B5)); =B2/B7; 59 =B8*B3; =B2-B9; =B10/B4; =B10/B5. Определите, как будут изменяться токи при изменении сопротивления резистора R1 от 1 до 10. Для этого выполните следующие действия. Поместите в ячейки D3-D12 значения от 1 до 10. Поместите в ячейки E2-G2 формулы =B8; =B10; =B11 соответственно. Выделите диапазон D2:G12. Выполните «Данные > Работа с данными». Из раскрывающейся пиктограммы «Анализ „Что – если“» выберите «Таблица данных». Поместите в окно «Подставлять значения по строкам» значение $B$7 и нажмите «Ok». Постройте графики для изменения токов. Для этого выделите диапазон E3:G12 и выполните «Вставка > График > График». В результате получится график, приведенный на рисунке 59. 6,00 4,00 Ряд1 2,00 Ряд2 Ряд3 0,00 1 2 3 4 5 6 7 8 9 10 Рис. 59. График изменения токов при изменении R1 Как видно из графика, при увеличении R1 токи уменьшаются нелинейно. 4,00 3,00 Ряд1 2,00 Ряд2 1,00 Ряд3 0,00 1 2 3 4 5 6 7 8 9 10 Рис. 60. График изменения токов при увеличении U Аналогично проанализируйте изменения токов при увеличении напряжения от 15 до 24 В. Постройте график изменения токов. В результате должен получиться график, приведенный на рисунке 60. Как видно из графика, при увеличении напряжения токи увеличиваются линейно. 60 Создание таблиц подстановки с двумя ячейками исходных данных Таблица подстановки с двумя ячейками исходных данных позволяет отобразить на экране результаты расчетов при изменении двух входных параметров. Исходные данные записываются в левом столбце и верхней строке, а формула только в одной левой верхней ячейке. Пример для выполнения 17 Необходимо определить, как будет меняться месячная плата (см. табл. на рис. 46), при изменении процентной ставки с 7 до 9% с шагом 0,25 и изменении первого взноса с 23 до 26% с шагом 1. Поместите на новый лист таблицу, приведенную на рисунке 45. Создайте таблицу подстановки, как показано на рисунке 61. Поместите в ячейку D2 формулу =B11. Рис. 61. Заготовка таблицы подстановки: 1 – массив исходных данных для первого параметра; 2 – массив исходных данных для второго параметра; 3 – формула или ссылка на ячейку с формулой. Выделите диапазон D2:H11. Выполните «Данные > Работа с данными». Из раскрывающейся пиктограммы «Анализ „Что – если“» выберите «Таблица данных». В результате откроется окно, приведенное на рисунке 62. Поместите в окно «Подставлять значения по столбцам» значение $B$5. Поместите в окно «Подставлять значения по строкам» значение $B$7. Нажмите «Ok». Рис. 62. Настройка таблицы данных 61 В результате получим таблицу, приведенную на рисунке 63. Рис. 63. Таблица подстановки с двумя параметрами Обратите внимание, что на пересечении строки 8% и столбца 25% получим то же значение месячной платы, что и в расчетной таблице. Пример для выполнения 18 Самостоятельно создайте таблицу подстановки для электрической схемы, приведенной на рисунке 57. Необходимо узнать, как будет меняться ток I1 при увеличении напряжения от 15 до 24 В и уменьшении сопротивления R2 от 8 до 3 Ом. Таблица с результатами приведена на рисунке 64. Рис. 64. Таблица подстановки с двумя значениями 6. Подбор параметра Подбор параметра – это анализ «Что – если» наоборот. В предыдущем случае рассматривался процесс изучения выходного результата от изменения исходных данных. Теперь данный процесс рассматривается с обратной сто62 роны, т. е. нахождения исходных данных, которые, будучи подставленными в формулы, дадут необходимые значения в ячейке результата. Подбор параметра для одной ячейки Выполнить процедуру подбора параметра для одной ячейки довольно просто. Иногда эту задачу называют обратной. Excel определяет то значение во входной ячейке, которое даст желаемый результат в выходной ячейке. Пример для выполнения 19 Вернитесь к таблице расчета ипотечной ссуды (рис. 65). Необходимо узнать, при какой процентной ставке месячная плата будет составлять 1000 руб. Установите для ячейки B7 формат «два десятичных знака после запятой». Выполните «Данные > Работа с данными». Из раскрывающейся пиктограммы «Анализ „Что – если“» выберите «Подбор параметра». Заполните открывшуюся форму, как показано на рисунке 66. Рис. 65. Таблица расчета ипотечной ссуды Рис. 66. Форма подбора параметра В поле «Установить в ячейке» указывается ссылка на формулу, по которой ведется расчет рассматриваемого параметра. 63 В поле «Значение» указывается значение, которое должно являться результатом при вычислении по данной формуле. В поле «Изменяя значение ячейки» указывается ссылка на ячейку, которая является одним из входных параметров формулы. После нажатия кнопки «Ok» получим таблицы, приведенные на рисунке 67. Рис. 67. Результат подбора параметра Из таблицы видно, для того чтобы месячная плата составляла 1000 руб., необходима процентная ставка 6,3%. Пример для выполнения 20 Для схемы, приведенной на рисунке 57, определить, при каком напряжении питания ток I1 будет составлять 4 А. Заполните диалоговое окно, как показано на рисунке 68. Рис. 68. Диалоговое окно подбора параметра В результате получим таблицу, приведенную на рисунке 69. Из таблицы видно, для того чтобы получить ток, равный 4 А, необходимо напряжение питания, равное 26,91 В. К сожалению, Excel не всегда сможет найти решение, так как решения может просто не существовать. Тогда окно «Результат подбора параметра» сообщит об этом. Если программа сообщает, что не может найти решение, а вы уверены, что оно существует, можно попробовать следующее: 64 Powered by TCPDF (www.tcpdf.org) • измените величину в подбираемой ячейке на значение, более близкое к решению, и выполните команду еще раз; • измените параметр «Предельное число итераций» на большее значение. Кнопка «Office > Параметры Excel > Формулы > Число итераций». Еще раз убедитесь, что выходная ячейка действительно зависит от входной. Рис. 69. Результат подбора параметра 7. Процедура поиска решения В Excel предусмотрен еще один мощный инструмент – «Поиск решения», который позволяет расширить процедуру подбора параметра следующим образом. Указывать несколько изменяемых ячеек. Находить решение, при котором значение в определенной ячейке достигает максимума или минимума. Получить несколько решений задачи. Пример для выполнения 21 Имеется таблица производства товаров, приведенная на рисунке 70. Рис. 70. Таблица производства товаров 65 В ячейке D3 находится формула =B3*C3. Как видно из таблицы, максимальный доход приносит товар С, так как он имеет максимальную себестоимость. Но при реальном производстве имеются конкретные ограничения. Общий объем производства – всего 300 изделий в день. Компании нужно произвести не менее 50 изделий А для выполнения существующего заказа. Компании нужно выполнить не менее 40 изделий В для выполнения планового заказа. Поскольку сбыт изделий С сравнительно небольшой, то должно быть изготовлено не более 40 единиц данного изделия. Необходимо определить, сколько единиц каждого изделия нужно произвести, чтобы получить максимальную прибыль. Выполните «Данные > Анализ > Поиск решения». В результате откроется форма, приведенная на рисунке 71. Установите в поле «Установить целевую ячейку» значение D6. Это ячейка, в которой необходимо получить максимальный доход. Установите опцию «Максимальное значение», так как мы хотим получить максимальный доход. В поле «Изменяемые ячейки» укажите B3:B5. Это ячейки, значения которых должны измениться таким образом, чтобы получить максимальный доход. Далее укажите «Ограничения задачи». Все ограничения добавляются по одному. Нажмите кнопку «Добавить». Заполните открывшуюся форму, как показано на рисунке 72. Рис. 71. Форма поиска решения 66 Рис. 72. Форма ввода ограничений В данном случае мы ввели ограничение на общий выпуск товаров. Аналогично введите ограничения на каждый вид изделия, как показано в таблице 1. Таблица 1 Ограничения Сокращенная запись Объем выпуска 300 единиц B6 = 300 Не менее 50 изделий A B3 >= 50 Не менее 40 изделий B B >= 40 Не более 40 изделий C B5 <= 40 После ввода последнего ограничения щелкните по кнопке «Оk». Вы вернетесь к диалоговому окну «Поиск решения», которое должно выглядеть, как показано на рисунке 70. Нажмите на кнопку «Выполнить». В результате выведется диалоговое окно, приведенное на рисунке 73. Рис. 73. Диалоговое окно выполнения поиска решения Выберите опцию «Сохранить найденное решение» и нажмите кнопку «Оk». В результате показатели в таблице примут значения, как показано на рисунке 74. Рис. 74. Результат поиска решения 67 Из таблицы видно, что максимальный доход может составить 5310 единиц при соответствующих количествах выпускаемых изделий, приведенных в столбце «Количество». Пример для выполнения 22 Для электрической схемы, приведенной на рисунке 56, необходимо подобрать такие значения резисторов, чтобы общий ток I1 составлял 4 А. При этом сопротивления резисторов могут быть только целыми числами в интервале 2–20 Ом. Откройте таблицу, приведенную на рисунке 57. Выполните «Данные > Анализ > Поиск решения». Заполните форму, как показано на рисунке 75. В окне «Ограничения» не видны значения для резистора R3. Не забудьте добавить их по аналогии с остальными резисторами. Полученные значения резисторов приведены на рисунке 76. Процедура поиска решения по сравнению с подбором параметра является достаточно сложной. По этой причине большинство пользователей Excel не применяют это средство. И все же многие пользователи считают, что овладение этим мощным средством стоит времени, затраченного на его изучение. В связи с этим рассмотрим еще несколько примеров, чтобы усвоить данный материал. Рис. 75. Подбор параметров для электрической схемы Рис. 76. Значения резисторов для получения указанного тока 68 Пример для выполнения 23 (транспортная задача) В данной задаче производится поиск альтернативных способов перевозки грузов при сохранении минимальных общих расходов на перевозку. В таблице «Число перевозок от завода к складу» (рис. 77) указаны три завода и пять складов. Необходимо оптимизировать значения в диапазоне В6:F8, которые являются количеством перевозок от соответствующего завода к соответствующему складу. В ячейках B9:F9 подсчитайте суммы по соответствующим столбцам, а в ячейках G6:G9 – суммы по соответствующим строкам. Рис. 77. Число перевозок и затраты на перевозку В таблице «Затраты на перевозку от завода к складу» указаны соответствующие затраты. Например, затраты на перевозку от завода 2 к складу 3 составляют 4 единицы (ячейка D14). Поместите в ячейку В17 формулу «=B6*B13+B7*B14+B8*B15». Формула выражает общую стоимость перевозок от всех заводов к складу 1. Скопируйте формулу С17-F17. В ячейке G17 подсчитайте сумму строки 17, т. е. стоимость перевозок от всех заводов ко всем складам. Цель оптимизации ячеек В6:F8 – получение минимального значения в ячейке G17 при соблюдении ограничений, указанных в условии задачи. Создайте таблицы ограничений, приведенные на рисунке 78. Выполните «Данные > Анализ > Поиск решения». Заполните форму, как показано на рисунке 79. Первое условие В6:F8 >= 0 говорит о том, что количество перевозок в оптимизируемом диапазоне не может быть отрицательным. 69 Рис. 78. Таблицы ограничений Рис. 79. Подбор параметров для транспортной задачи Второе условие B9:F9 >= B27:B31 говорит о том, что суммарное количество перевозок к каждому складу должно быть больше или равно количеству потребляемой складами продукции. Третье условие G6:G8<= B21:B23 говорит о том, что суммарное потребление продукции складами от каждого завода должно быть меньше или равно выпускаемой каждым заводом продукции. В таблицах на рисунках 76 и 77 ячейки обозначены разными цветами. Красным – оптимизируемая (целевая) ячейка. Зеленым – изменяемые ячейки. Синим – ячейки, на которые наложены ограничения. Желтым – ячейки, в которые занесены значения ограничений. В результате получим таблицу, приведенную на рисунке 80. 70 Рис. 80. Оптимизированная таблица Пример для выполнения 24 (планирование расписания) Администрации фирмы требуется составить график работы персонала. При этом необходимо обеспечить следующие условия: каждый из сотрудников должен иметь 5 рабочих дней в неделю и 2 выходных подряд, при этом (исходя из специфики работы фирмы) имеются некоторые требования к минимальному количеству работающих сотрудников для каждого из дней недели. Весь обслуживающий персонал имеет одинаковую зарплату. Требуется определить минимальное количество сотрудников (а тем самым минимальный фонд зарплаты) и определить график предоставления им выходных дней так, чтобы требования к минимальному количеству работающих были выполнены. Создайте таблицу, приведенную на рисунке 81. Рис. 81. Таблица формирования графика работы 71 Рис. 82. Заполнение формы «Поиск решения» Введите исходные данные: А4:А10 – выходные дни; С4:С10 – число занятых – количество работников, имеющих данный график работы; Е4:К10 – 0 – выходной день, 1 – рабочий день (в соответствии с диапазоном А4:A10); Е14:К14 – минимальное количество работающих сотрудников по дням недели; С15 – почасовая зарплата работников. В ячейку С13 поместите формулу =СУММ(C4:C10). В ячейку С16 поместите формулу =40*C13*C15, где число 40 – количество часов в неделю. В ячейки Е13:К13 необходимо поместить суммы из диапазона С4:С10. Данные суммы соответствуют сотрудникам, не имеющим в этот день выходной. Для этого используем формулу массива. Поместите в ячейку Е13 формулу =СУММ($C$4:$C$10*E4:E10) и нажмите комбинацию клавиш Shift+Ctrl+Enter. Скопируйте формулу в ячейки F13:K13. Выполните «Данные > Анализ > Поиск решения». Заполните форму, как показано на рисунке 82. В результате произойдет пересчет диапазона С4:С10 и соответственно Е13:К13, как показано на рисунке 83. 72 Рис. 83. Таблица после оптимизации Пример для выполнения 25 (распределение ресурсов) Рис. 84. Производство игрушек Компания производит пять различных игрушек, для которых используется шесть видов материалов в различных количествах. Например, для выпуска игрушки «И-1» требуется 3 единицы голубой краски, 2 единицы белой краски, три единицы древесины и 1 единица клея. Как распределить ресурсы или, другими словами, в каком количестве необходимо изготовить каждую игрушку для получения максимальной прибыли? Заполните таблицу, как показано на рисунке 84. В диапазон ячеек B4-F9 поместите потребность материалов на изготовление конкретной игрушки. 73 В ячейки G4-G9 поместите наличие каждого материала. В ячейки B10-F10 поместите значение прибыли от выпуска каждой игрушки. В ячейки B11-F11 поместите количество выпускаемых игрушек. Данную строку в дальнейшем необходимо оптимизировать так, чтобы в ячейке B13 получить максимальную прибыль. В ячейку B12 поместите формулу =B10*B11. Это будет общая прибыль от выпуска игрушки «И-1». В ячейку B13 поместите формулу =СУММ(B12:F12). Данную ячейку в дальнейшем необходимо максимизировать. В ячейку H4 поместите формулу =B4*B$11+C4*C$11+D4*D$11+E4*E$11+F4*F$11. Это будет суммарная потребность в каждом материале для указанного количества выпускаемых игрушек. Скопируйте формулу в ячейки H5:H9. Значения в ячейки B11:F11 помещены из следующих соображений: • сначала поместите во все ячейки значения, равные единице; • затем увеличивайте значение ячейки С11 до тех пор, пока все остатки не станут положительными (по принципу максимальное количество самой дорогой игрушки). Рис. 85. Заполнение формы «Поиск решения» Аналогично будем увеличивать значение ячейки E11 и, наконец, F11. В результате получим максимальную прибыль, равную 5435 единицам. Выполните «Данные > Анализ > Поиск решения». Заполните форму, как показано на рисунке 85. Для решения нашей задачи достаточно следующих ограничений: • количество выпускаемых игрушек может быть только целым числом; • количество выпускаемых игрушек не может быть отрицательным числом. 74 Остатки используемых материалов не могут быть отрицательным числом. В результате оптимизации получим таблицу, приведенную на рисунке 86. Максимальная прибыль составит 12 350 единиц. Рис. 86. Оптимизированная таблица 75 Часть 3 1. Введение в язык макрокоманд VBA Макрос в широком смысле – это программа, которая автоматизирует некоторые функции Excel. После написания и отладки макроса его можно вызвать одной командой, чтобы автоматически выполнить процессы, отнимающие много времени. Макросы можно создавать двумя способами: • используя так называемый магнитофон для записи последовательности выполняемых действий; • написание кода макроса вручную. Первый способ очень простой и не требует знаний языка макрокоманд. Второй способ намного сложнее, но настолько же эффективнее. Рассмотрим запись последовательности макрокоманд. Пример для выполнения 1 Вспомните пример 3 в первой части. Там создавалась простейшая таблица с месяцами. Ниже приведен пронумерованный текст этого примера. 1. Введите в ячейку A1 слово Месяц. 2. Установите для ячейки A1 жирный шрифт. 3. Введите в ячейку А2 слово Январь. Используя списки, сформируйте все месяцы. 4. Введите в ячейку A3 число 1, а в ячейку B3 число 2. Используя списки, сформируйте все номера месяцев. 5. Объедините ячейки А1:L1. 6. Растяните ячейку I2 таким образом, чтобы Сентябрь в нее входил полностью. 7. Встаньте на ячейку I2 и выполните «Главная > Ячейки > Формат > Ширина столбца». Запомните ширину столбца (8,43). 8. Выделите столбцы A:L и установите ширину столбца, равную 8,43 (одинаковую для всех столбцов). 9. Расположите информацию по центру ячеек. 10. Обведите таблицу. Автоматизируйте этот пример. Для этого необходимо выполнить следующие действия. Выполните «Разработчик > Код > Запись макроса», при этом откроется форма, приведенная на рисунке 1. Согласитесь с предлагаемым именем макроса и нажмите кнопку «Ok». Выполните пункты 1–9 по созданию таблицы. Выполните «Разработчик > Код > Остановить запись». Перейдите на чистый лист. Выполните «Разработчик > Код» и нажмите кнопку «Макросы». 76 Выберите в открывшемся окне «Макрос1» и нажмите кнопку «Выполнить». В результате Excel повторит все сделанные вами шаги, и таблица выведется заново. Рис. 1. Запись макроса Модули Каким образом Excel смог повторить все ваши шаги? Не стоит труда догадаться, что он где-то их запомнил в виде команд. Рис. 2. Текст модуля 77 Посмотрите, каким образом он их запомнил. Для этого выполните «Разработчик > Код» и нажмите кнопку «Visual Basic». В левом верхнем окне откройте папку «Modules» и выберите «Module 1». В результате вы увидите код (текст) программы, приведенный на рисунке 2. Надо сказать, что код, генерируемый автоматически, содержит много лишнего и нуждается в оптимизации. Если вы не знаете, как реализуется та или другая команда, то использование данного подхода весьма эффективно. Модуль – это специальный тип листа. Как и новый рабочий лист, новый модуль пуст. Новый модуль можно создать следующим образом. Выполните «Разработчик > Код» и нажмите кнопку «Visual Basic». Выполните меню «Insert > Module». В результате создастся новый модуль с именем Module2. Процедуры и функции Модуль состоит из процедур и функций. Процедура – это основная единица кода в VBA. Структура процедуры выглядит следующим образом: Sub <имя процедуры> () <тело процедуры> End Sub Пример для выполнения 2 Создадим простейшую процедуру, которая помещает в ячейку A4 нашей таблицы какое-нибудь число, например 88. Для этого необходимо выполнить следующие действия. Выполните «Разработчик > Код» и нажмите кнопку «Visual Basic». Откройте модуль «Module 1». Вы видите, что в модуле содержится одна процедура: Sub Макрос1(). Встаньте на конец процедуры после строки End Sub. Напишите свою процедуру: Sub Моя процедура() Cells(4, 1) = 88 End Sub Перейдите на рабочий лист Excel с таблицей. Выполните «Разработчик > Код» и нажмите кнопку «Макросы». Выберите в открывшемся окне «Моя процедура 1» и нажмите кнопку «Выполнить». В результате в ячейку A4 поместится число 88. Если вы не программист, то с первого раза понять разницу между процедурой и функцией достаточно сложно. Можно сказать, что функция – это та же самая процедура, но обладающая определенными особенностями. Первая осо78 бенность состоит в том, что если процедура – это какое-то действие (как в нашем случае – поместить в ячейку какое-нибудь число или построить график и т. д.) и ничему не равна, то функция, как принято говорить, возвращает какое-то значение. Другими словами, функция всегда чему-то равна. Вторая особенность состоит в их использовании. Если все созданные процедуры видны при активизации команды «Макросы», то функции не видны и используются по-другому. А используются они точно так же, как и стандартные функции Excel, т. е. помещаются в ячейку таблицы. Лучше всего посмотреть это на конкретном примере. Пример для выполнения 3 Создайте простейшую функцию, которая увеличивает аргумент на N единиц. Перейдите в редактор VBA и после созданной вами процедуры напишите следующую функцию: Function Inc(A, N) A=A+N Inc = A End Function Перейдите на рабочий лист. Выполните «Разработчик > Код» и нажмите кнопку «Макросы». Вы не видите свою функцию? Все верно. Ее и не должно здесь быть. Выполните еще раз вашу процедуру «Моя процедура», так, чтобы в ячейку A4 поместилось число 88, а в ячейку A7 введите =Inc(A4;2). В результате в ячейке A7 выведется число 90. Посмотрите еще раз на код функции. Еще одним важным отличием функции от процедуры является то, что вычисленное значение обязательно нужно присвоить имени самой функции: Inc = A. Напишите еще две функции для вычисления эквивалентного сопротивления при параллельном и последовательном соединении резисторов: Function RPar(R1, R2) 'Параллельное RPar = (R1 * R2) / (R1 + R2) End Function Function RPos(R1, R2) 'Последовательно RPos = R1 + R2 End Function Для использования функций подсчитайте эквивалентное сопротивление для схемы, приведенной на рисунке 55 (часть 2). 79 Для этого создайте таблицу, приведенную на рисунке 3. Рис. 3. Таблица для расчета эквивалентных сопротивлений В ячейку B5 введите формулу =RPar(B2;B3). В ячейку B6 введите формулу =RPos(B1;RPar(B2;B3)). Ключевые слова Тело процедуры или функции состоит из ключевых слов, входящих в состав VBA. Ключевые слова можно разделить на 6 категорий: объекты, свойства, методы, стандартные функции, команды, идентификаторы. Стандартные функции изменяют значение выражения, например функция Round(X,N) округляет аргумент A с заданной точностью N. Список стандартных функций VBA приведен в приложении 1. Команды – это операторы языка VBA, такие как условия, циклы и т. д. Идентификаторы – это вводимые вами переменные. Об объектах, свойствах и методах поговорим позднее. Область описания Областью описания называется часть модуля перед первой процедурой. Она содержит код, влияющий на весь модуль или рабочую книгу. Список команд приведен ниже. Option Private Module – процедуры и переменные внутри модуля доступны только в рабочей книге. Option Explicit – требует, чтобы все используемые переменные были предварительно объявлены. Option Base 0, Option Base 1 – определяет нижний диапазон массивов (0 или 1). Option Compare Binary – не различать регистры. Public <имя переменной> – описывает переменную для использования в любой процедуре рабочей книги. Private <имя переменной> – описывает переменную для использования только внутри текущего модуля. Dim <имя переменной> – эквивалентно Public. Const=<имя> – определяет константу. Declare Sub(), Declare Function – определение ссылки на модуль DLL или Windows API. 80 Powered by TCPDF (www.tcpdf.org) Type <имя> End Type – тип данных, определенный пользователем. В любом месте модуля можно написать комментарий. Комментарий начинается с апострофа. В заключение напишем две полезные функции для вычисления эквивалентного сопротивления при параллельном и последовательном соединении резисторов. 2. Объекты Объект в VBA – это часть Excel, которая может быть изменена некоторым образом. Например, объектами являются рабочие книги, рабочие листы, панели инструментов и т. д. Все, с чем вы работаете в Excel, является объектами. VBA – это объектно-ориентированный язык программирования. Сначала вы определяете объект, а затем что-то с ним делаете. Просмотр объектов Чтобы просмотреть объекты, активизируйте лист модуля и выполните меню: View > Object Browser. В результате выведется форма, приведенная на рисунке 4. Всего объектов в Excel – 128. Почти 50 объектов имеют как единственное, так и множественное число. Объекты во множественном числе называются наборами. Например, объект Worksheets (рабочие листы) включает все рабочие листы Worksheet. Перейти на конкретный лист можно одной из следующих команд: Worksheets("Лист2").Select или Worksheets(1).Select. Рис. 4. Список объектов Excel Иерархия объектов У объектов VBA имеется своя иерархия. На самом верху иерархии находится объект Application, который является экземпляром собственно 81 Microsoft Excel. Применяя к этому объекту различные методы, можно воспользоваться практически любыми командами меню Excel. Основной объект Excel — Workbook (рабочая книга). С помощью этого объекта осуществляется доступ к свойствам и структуре рабочей книги Excel. Объекты Workbook — это файлы, которые состоят из нескольких объектов, создаваемых Microsoft Excel: Worksheet (рабочий лист) и Chart (диаграмма). Объекты Worksheet и Chart содержатся в семействах Worksheets и Charts. Объекты Worksheet являются подчиненными по отношению к объекту Workbook и обеспечивают доступ к свойствам и структуре рабочих листов книги Excel. Объекты Sheet аналогичны объектам Worksheet, но входят в семейство Sheets, которое включает в себя как объекты Worksheet, так и объекты Chart, представляющие листы диаграмм в рабочей книге. Объект Range – диапазон ячеек рабочего листа Excel. Это могут быть отдельная ячейка, строка, столбец, прямоугольная область рабочего листа или несвязанный (произвольный набор ячеек) или трехмерный (включающий ячейки на нескольких рабочих листах) диапазон ячеек. Можно получить либо установить значения диапазона ячеек, определив объект Range. Таких объектов, как ячейка, строка, столбец, просто не существует. Именно объект Range со своими свойствами и методами обеспечивает работу как с отдельной ячейкой, так и с диапазоном ячеек. Для ссылки на необходимую группу ячеек можно использовать имя диапазона, состоящего из этих ячеек. Если именованные диапазоны отсутствуют на рабочем листе, можно использовать метод Cells объекта Worksheet, чтобы задать координаты ячейки или группы ячеек. Совсем не обязательно каждый раз указывать всю последовательность объектов. Например, если нужно обратиться к диапазону текущего листа, то не нужно указывать имя книги и имя листа. Обратиться к конкретной ячейке текущего листа можно одним из следующих способов: Application.Workbooks(1).Worksheets(4).Range("A1:A1") = 88 Workbooks(1).Worksheets(4).Range("A1:A1") = 88 Worksheets(4).Range("A1:A1") = 88 Range("A1:A1") = 88 Range("A1") = 88 [A1] = 88 Cells(1, 1) = 88 Обратиться к диапазону можно и как Range(Cells(1, 1), Cells(1, 1)).Value = 88. Выполнив Range(Cells(1, 1), Cells(5, 5)).Value = 88, мы поместим в диапазон A1:E5 значение 88, а выполнив Range(Cells(1, 1), Cells(1, 1)).Value = rnd(), мы поместим в диапазон A1:E5 одно и то же случайное число. Когда мы обращаемся к ячейке как Cells(N,M), в качестве первого аргумента указывается номер строки, а в качестве второго – номер столбца. Обратиться ко всему столбцу можно как Columns("A:A").Select или Columns(1).Select. 82 Обратиться ко всей строке можно как Rows(3).Select. Чтобы программа работала в текущем листе или ячейке, не нужно ссылаться на этот лист или ячейку. Для этой цели в VBA существует девять специальных объектов: ActiveCell, ActiveChart, ActiveDialog, ActiveMenuBar, ActivePane, ActivePrinter, ActiveSheet, ActiveWindow, ActiveWorkbook. Например, если необходимо поместить в активную ячейку какоенибудь число, можно использовать код ActiveCell = 88. Если вы обращаетесь к одному объекту больше одного раза, то нет необходимости набирать его снова и снова. Вместо того, чтобы начинать каждую строку с кода Workbooks(“Моя рабочая книга”).Worksheets(“Лист1”), выполните следующий код: With Workbooks(“Моя рабочая книга”).WorkSheets(“Лист1”) … <необходимый код> End Workbooks Свойства объектов Каждый объект имеет свойства, которые некоторым образом его характеризуют. Например, как человека может характеризовать рост, вес, цвет глаз, так и RowHtiht, ColumnWidth, Interior – это свойства ячейки (объект Cells или Range). Все свойства могут быть считаны, и только некоторые изменены. Пример для выполнения 4 Свойства Window Объект Window изменяет внешний вид рабочего листа на экране. Код, представленный ниже, удаляет сетку, названия строк и столбцов, ярлычки рабочих листов и уменьшает размер окна до 75%: Sub WDisplayFalse() With ActiveWindow .DisplayGridlines = False .DisplayHeadings = False .DisplayWorkbookTabs = False .Zoom = 75 End With End Sub Чтобы восстановить параметры вывода на экран, выполните процедуру: Sub WDisplayTrue() With ActiveWindow .DisplayGridlines = True .DisplayHeadings = True 83 .DisplayWorkbookTabs = True .Zoom = 100 End With End Sub Свойства Worksheet Объект Worksheet – отдельный рабочий лист. Его свойства применимы только к нему самому, а не ко всем листам. Объект обладает более чем 30 свойствами. Изменить имя листа можно, используя его свойство Name: Sub WName() ActiveSheet.Name = “Новый лист” End Sub Свойства объекта Range Объект Range используется для форматирования ячеек. Код, представленный ниже, меняет высоту строки и ширину столбца для текущей ячейки и окрашивает ячейку в желтый цвет: Sub YelRec() 'Желтый прямоугольник ActiveCell.ColumnWidth = 20 ActiveCell.RowHeight = 20 ActiveCell.Interior.Color = 65535 End Sub Свойства объекта Application Свойства данного объекта касаются каждой рабочей книги. Строка, представленная ниже, отключает перерисовку экрана при выполнении макроса, при этом макрос будет работать намного быстрее: Application.ScreenUpdating = False Очень часто необходимо указать Excel, что не нужно выдавать предупреждения типа «Сохранить изменения». Особенно это полезно, когда Excel используется как сервер автоматизации, например для печати данных, помещенных во временную таблицу из базы данных. Следующий пример закроет Excel, не выдавая никаких сообщений: Sub CloseEx() 'Закрыть Excel Application.DisplayAlerts = False Application.Quit End Sub 84 Методы объектов Каждый объект VBA имеет свои методы. Пример для выполнения 5 Методы, как правило, изменяют свойства того объекта, к которому они относятся. Например, чтобы добавить лист в рабочую книгу, выполните процедуру Sub NewSheet() Sheets.Add End Sub Рассмотрим еще несколько наиболее часто используемых методов по форматированию листов рабочей книги. Подобрать ширину столбца: Sub AutoWidth() 'Подбор ширины столбца N = ActiveCell.Column Columns(N).AutoFit 'Range("B:B").Columns.AutoFit End Sub Удалить выделенные столбцы: Sub DelCol() Selection.Delete Shift:=xlToLeft End Sub Обвести диапазон ячеек: Sub Border Selection.Borders.LineStyle = 1 End Sub Некоторые методы имеют аргументы, указывающие, как нужно выполнять то или иное действие. Например, метод Open имеет 12 аргументов, когда он применяется к рабочей книге. Первый, FileName, сообщает, какой необходимо открыть файл. Второй, UhdateLink, указывает, надо или нет обновлять внешние связи. Третий, ReadOnly, сообщает о том, открывать или нет файл только для чтения и т. д. Если вы используете один аргумент, его можно указать следующим образом: Sub OpenBook() Workbooks.Open Filename:="Интернет" End Sub 85 По умолчанию Excel ищет файл в папке «Мои документы». Вы можете установить дополнительные аргументы, разделяя их запятыми, например Workbooks.Open ReadOnly:=True, Filename:="Интернет". Вы можете просто перечислить значения аргументов, но в этом случае необходимо точно знать порядок их следования и не пропускать ни одного аргумента. Если необходимо пропустить аргумент, поставьте запятую, затем пробел и снова запятую, например: Workbooks.Open "Интернет", ,True. Метод MsgBox предназначен для вывода сообщения, например: Sub OutMsg() MsgBox "вывод сообщения" End Sub 3. Описание переменных и область их использования Каждый язык программирования использует переменные. Переменная – это символ или набор символов, которые представляют изменяемую величину. Переменные в VBA могут сохранять значения свойств и результатов вычислений. Они также могут ссылаться на другие переменные. Используйте их в том случае, если в программе необходимо снова обратиться к значению переменной. Пример для выполнения 6 Код, приведенный ниже, выведет номер строки и столбца активной ячейки: Sub RowCol() Row = ActiveCell.Row Col = ActiveCell.Column ActiveCell = Str(Row) + "-" + Str(Col) End Sub Код, приведенный ниже, выведет имя книги и листа в активной ячейке: Sub BookName () N = ActiveWorkbook.Name M = ActiveSheet.Name ActiveCell = N + "\" + M End Sub В приведенных выше примерах переменными являются Row, Col, N, M. Хотя VBA не требует обязательного описания переменных, но лучше переменные всегда описывать. Это помогает лучше понять смысл самой задачи и избежать множества ошибок. 86 Для обязательного описания переменных используйте директиву Option Explicit. Объявление простых переменных и констант Обычно перед использованием переменной производится ее объявление. При этом объявляется также тип переменной. Для этого используется оператор Dim, например Dim I As Integer, S As String. К основным простейшим стандартным типам данных относятся: Boolean Byte Date Integer Long Single Double Currency String Variant Логическая переменная Байт Дата Целое число Длинное целое число Действительное число Длинное действительное число Действительное число с четырьмя знаками после запятой Строка Любое значение Пример для выполнения 7 Написать процедуру вычисления корней квадратного уравнения. В начале модуля укажите Option Explicit: Sub Korni() 'Вычисление корней квадратного уравнения Dim A, B, C, D, Re1, Re2, Im1, Im2, Row, Col As Single A = Range("B1").Value B = Range("B2").Value C = Range("B3").Value D=B^2-4*A*C If D >= 0 Then Re1 = (-B + Sqr(D)) / (2 * A): Im1 = 0 Re2 = (-B - Sqr(D)) / (2 * A): Im2 = 0 Else Re1 = -B / 2 * A: Im1 = (-B + Sqr(Abs(D))) Re2 = -B / 2 * A: Im2 = (-B - Sqr(Abs(D))) End If Row = ActiveCell.Row Col = ActiveCell.Column Cells(Row, Col).Value = "Re1" Cells(Row, Col + 1).Value = Re1 Cells(Row, Col + 2).Value = "Im1" Cells(Row, Col + 3).Value = Im1 87 Cells(Row + 1, Col).Value = "Re2" Cells(Row + 1, Col + 1).Value = Re2 Cells(Row + 1, Col + 2).Value = "Im2" Cells(Row + 1, Col + 3).Value = Im2 End Sub Константы объявляются как: Const A=66. Значения констант не могут изменяться в процессе выполнения программы. Объявление объектов Описание объектов осуществляется как Dim C As Object. В отличие от других переменных, для присваивания значения объекту используется не знак равенства, а оператор Set. Это позволяет сократить код программы и ускорить ее работу. Пример для выполнения 8 Написать процедуру вычисления площади треугольника. В начале модуля укажите Option Explicit: Sub Treug() 'Вычисление площади треугольника Dim C As Object Dim A, H As Integer: Dim S As Single Set C = Cells A = Cells(1, 2) H = Cells(2, 2) S = (A * H) / 2 ActiveCell = S End Sub После выполнения процедуры в активной ячейке выведется значение 7,5. Если переменную S не описывать, то при запуске процедуры выведется ошибка. К сожалению, в отличие от более строгих языков программирования, VBA допускает неверное описание переменных, например: Sub Treug() Dim A, H, S As Integer: После запуска такой процедуры в активной ячейке выведется значение 8, т. е. программа автоматически преобразовала результат к целому числу. 88 Возможно и такое описание: Sub Treug() Dim A, H As Integer: Dim S As String После запуска такой процедуры в активной ячейке выведется значение 7,5, но выровненное по левому краю, т. е. программа автоматически преобразовала результат к строке. Пример для выполнения 9 В ячейки B1, B2 и B3 введены значения резисторов R1, R2 и R3. Резистор R1 соединен последовательно с параллельным соединением из R2 и R3. Напишите макрос, который бы выводил в текущую ячейку значение эквивалентного сопротивления цепи. Используйте обязательное объявление переменных. В начале модуля укажите Option Explicit Sub RR() 'Вычисление эквивалентного сопротивления Dim C As Object Dim R1, R2, R3 As Integer: Dim R As Single Set C = Cells R1 = C(1, 2) R2 = C(2, 2) R3 = C(3, 2) R = R1 + (R2 * R3) / (R2 + R3) ActiveCell = R End Sub. Объявление массивов Массив – это пронумерованное множество элементов. Массивы могут быть статическими и динамическими. Одномерный статический массив объявляется как Dim A(5) As Integer. По умолчанию нижний индекс массива равен нулю. Узнать значения нижнего и верхнего индексов массива можно с помощью функций LBound(A) и UBound(A). Пример для выполнения 10 Sub Array1() Dim A_M(5) As Integer L = LBound(A_M) H = UBound(A_M) Cells(1, 1) = L Cells(2, 1) = H End Sub 89 Если включить в описательную часть команду Option Base 1 и снова выполнить процедуру, то мы увидим, что нижний индекс равен единице. Двумерный статический массив объявляется как Dim B(5, 6) As Integer. Чтобы узнать значения нижнего и верхнего индексов второго измерения, необходимо в функциях LBound(A) и UBound(A) в качестве второго параметра указать номер измерения. Пример для выполнения 11 Sub Array2() Dim B_M(5, 4) As Integer L = LBound(B_M, 1) H = UBound(B_M, 1) Cells(1, 1) = L Cells(2, 1) = H L = LBound(B_M, 2) H = UBound(B_M, 2) Cells(3, 1) = L Cells(4, 1) = H End Sub Двумерный массив можно объявить следующим образом: Dim B_M(2 To 5, 3 To 6) As Integer. Аналогично можно объявить трехмерный массив: Dim С_M(1 To 5, 1 To 5, 1 To 5) As Integer. Динамические массивы объявляются как: Dim A_M() As Integer. Прежде чем использовать динамический массив, необходимо указать количество измерений. Для этого используется команда ReDim, например ReDim A_M(2,3.). В процессе выполнения программы можно изменить размер динамического массива, но только его верхнюю границу. При изменении размера массива стираются значения всех его элементов. Пример для выполнения 12 Сгенерируйте случайный массив из четырех элементов и выведите его на монитор. Option Base 1 Sub Array34() Dim A() As Integer ReDim A(4) Randomize A(1) = Rnd(): Cells(1, 1) = A(1) A(2) = Rnd(): Cells(2, 1) = A(2) A(3) = Rnd(): Cells(3, 1) = A(3) 90 A(4) = Rnd(): Cells(4, 1) = A(4) End Sub В результате генерируются только нули или единицы. Добавьте еще одну строку: A(5) = Rnd(): Cells(5, 1) = A(5) В результате выведется ошибка, так как массив зарезервирован только на 4 элемента. Удалите данную строку. Поставьте комментарий перед строкой описания массива ‘Dim A() As Integer В результате генерируются случайные числа в интервале от 0 до 1. Следовательно, при использовании команды ReDim массив можно не объявлять. Измените размер массива, добавив следующие команды: ReDim A(5) Cells(6, 1) = A(1) Cells(7, 1) = A(2) Cells(8, 1) = A(3) Cells(9, 1) = A(4) A(5) = Rnd(): Cells(10, 1) = A(5) После выполнения программы видно, что значения всех элементов массива обнулились. Чтобы сохранить значения элементов, необходимо использовать после ReDim команду Preserve. Запишите вместо ReDim A(5) строку ReDim Preserve A(5) и запустите программу. Все значения элементов сохранились. Область использования переменных Область использования – это та область, откуда вы можете получить доступ к переменной. VBA различает три уровня доступа: • только внутри процедуры; • только внутри модуля; • только внутри рабочей книги. Для описания переменной внутри процедуры используйте команду Dim. Для описания переменной внутри модуля используйте команду Private, например: Private A Для описания переменной, доступной всем модулям внутри рабочей книги, используйте ключевое слово Public, например: Public A 91 Пример для выполнения 13 Добавьте в рабочую книгу два модуля. В модуле 1 напишем следующий код: Public A As Integer Private B As Integer Sub Temp1() Dim C As Integer A = 88 B = 77 C = 66 Cells(1, 1) = A Cells(2, 1) = B Cells(3, 1) = C End Sub Sub Temp2() Cells(1, 1) = A Cells(2, 1) = B Cells(3, 1) = C End Sub В модуле 2 напишем процедуру: Sub Temp3() Cells(1, 1) = A Cells(2, 1) = B Cells(3, 1) = C End Sub Последовательно выполним все процедуры. В первом случае выведутся все три переменные, во втором – только две переменные А и B, а в третьем – только одна переменная A. Если необходимо, чтобы глобальная переменная A первого модуля была доступна в модуле 2, а глобальная переменная B второго модуля была доступна в модуле 1, то можно написать следующий код. Для модуля 1: Option Explicit Public A As Integer Sub Temp1() A = 88 B = 77 Cells(1, 1) = A Cells(2, 1) = B End Sub 92 Sub Temp2() Cells(1, 1) = A Cells(2, 1) = B End Sub Для модуля 2: Option Explicit Public B As Integer Sub Temp3() Cells(1, 1) = A Cells(2, 1) = B End Sub При последовательном запуске всех трех процедур выведутся обе переменные, хотя логичнее объявить обе переменные в одном модуле, например в первом: Option Explicit Public A, B As Integer 4. Аргументы в процедурах и функциях Аргументы необходимы для передачи в процедуры и функции параметров. Функцию, имеющую аргументы, можно вызвать как из другой процедуры или функции, так и использовать в ячейке рабочей книги. Пример для выполнения 14 Напишите функцию вычисления эквивалентного сопротивления для параллельного соединения резисторов: Function FPR(R1, R2) FPR = (R1 * R2) / (R1 + R2) End Function К данной функции можно обратиться из следующей процедуры. Для этого выполните процедуру: Sub OutRp() R1 = Cells(1, 2) R2 = Cells(2, 2) ActiveCell = FPR(R1, R2) End Sub Также к данной функции можно обратиться из любой ячейки рабочей книги: =FPR(4;6). 93 Если процедура не имеет параметров, то ее можно запустить из рабочей книги или непосредственно из другой процедуры, например: Sub Temp1() ActiveCell = 88 End Sub Sub Temp2() Temp1 End Sub Если процедура имеет параметры, то такая процедура не видна в окне «Макрос» и запустить ее из рабочей книги нельзя: Sub Temp3(X, Y) Z=X+Y ActiveCell = Z End Sub Запустить ее из другой процедуры можно только, если перед именем процедуры использовать команду Call: Sub Temp4() Call Temp3(2, 5) End Sub Запустить процедуру, имеющую только один параметр из другой процедуры, можно без использования ключевого слова Call. Выход из процедуры или функции осуществляется командами Exit Sub или Exit Function соответственно. Необязательные аргументы В процедурах и функциях могут использоваться необязательные аргументы. Перед такими аргументами записывается ключевое слово Optional. Необязательные аргументы должны быть последними в списке аргументов. Ключевое слово Optional необходимо использовать перед каждым аргументом. Если необязательные аргументы не используются при обращении к процедуре или функции, то их нельзя использовать и в теле процедуры или функции. Пример для выполнения 15 Напишите функцию: Function PosR1(R1, R2, Optional R3) PosR1 = R1 + R2 + R3 End Function 94 Обратитесь к функции из ячейки рабочей книги как =PosR1(3;4;6). В результате выведется число 13. Обратитесь к функции из ячейки рабочей книги как =PosR1(3;4). В результате сгенерируется ошибка, так как в теле функции используются три аргумента. Напишите функцию: Function PosR2(R1, R2, Optional R3) PosR2 = R1 + R2 End Function Обратитесь к функции из ячейки рабочей книги как =PosR2(3;4;6). В результате выведется число 7. Обратитесь к функции из ячейки рабочей книги как =PosR2(3;4). В результате снова выведется число 7. Следовательно, обращение к функции как с двумя, так и с тремя аргументами приведет к вычислению только суммы двух первых аргументов. Количество передаваемых аргументов и процесс вычисления необходимо контролировать в самой функции. Напишите функцию: Function PosR3(N, R1, R2, Optional R3, Optional R4, Optional R5) If N < 2 Or N > 5 Then Exit Function Select Case N Case 2 R = R1 + R2 Case 3 R = R1 + R2 + R3 Case 4 R = R1 + R2 + R3 + R4 Case 5 R = R1 + R2 + R3 + R4 + R5 End Select PosR3 = R End Function Первый параметр данной функции – количество резисторов – может принимать значение от двух до пяти. Остальные параметры – значения сопротивлений самих резисторов. При этом первые три параметра данной функции обязательны. Обратитесь к функции из ячейки рабочей книги как =PosR3(3;3;4;6). В результате выведется число 13. Обратитесь к функции из ячейки рабочей книги как =PosR3(4;3;4;6;2). В результате выведется число 15. 95 Выполнение действий из функции Если в функции выполнять какие-либо действия, например вывод значения в ячейку рабочей книги, то вызов таких функций из ячейки рабочей книги приводит к ошибке. Пример для выполнения 16 Напишите процедуру: Sub Temp5() Cells(5, 5) = 88 End Sub Напишите функцию: Function Temp6(X) Call Temp5 X=X+1 Temp6 = X End Function Обратитесь к функции из ячейки рабочей книги =Temp6(7). В результате в ячейке выведется ошибка «#ЗНАЧ!». Следовательно, выполнить процедуру Temp5 из функции не удалось. Напишите еще одну функцию: Function Temp7(X) X=X+1 Cells(5, 5) = X Temp6 = X End Function Обратитесь к функции из ячейки рабочей книги =Temp7(7). В результате в ячейке выведется ошибка «#ЗНАЧ!». Следовательно, поместить из функции что-либо в ячейку рабочей книги непосредственно нельзя. Напишите процедуру: Sub Temp8() Cells(3, 1) = Temp6(5) End Sub Выполните процедуру как макрокоманду. В результате в ячейке A3 выведется число 6 (значение функции), а в ячейке E5 – число 88 (результат процедуры Temp5, к которой обратилась функция). 96 Powered by TCPDF (www.tcpdf.org) Напишите процедуру: Sub Temp9() Cells(3, 1) = Temp7(5) End Sub Выполните процедуру как макрокоманду. В результате в ячейке A3 выведется число 6 (значение функции), а в ячейке E5 – также число 6 (значение, которое помещает в ячейку сама функция). Следовательно, если из функции необходимо выполнить какие-либо действия, то обращение к такой функции возможно только из процедуры. Обращение к такой функции из листа рабочей книги приводит к ошибке. Передача массивов в качестве параметров Массив в качестве параметра передается как обычная переменная. Пример для выполнения 17 На листе рабочей книги создайте массив, приведенный на рисунке 5. Рис. 5. Массив случайных элементов Напишите функцию: Function Kol_1(A, N) Kol_1 = A(N) End Function Обратитесь к функции из ячейки рабочей книги как =Kol_1(A1:A10;5). В результате в текущую ячейку выведется значение пятого элемента массива. Для обращения к данной функции из процедуры напишите следующий код: Sub Kol_2() D = Kol_1(Range("A1:A10"), 5) 97 ActiveCell = D End Sub Параметры значения и параметры ссылки При передаче переменных в качестве параметров может использоваться один из способов: • передача параметра по значению – все изменения формального параметра не сказываются на самой переменной; • передача параметра по ссылке – все изменения формального параметра отражаются на самой переменной. Способ передачи указывается перед параметром. ByRef – передача по значению. ByVal – передача по ссылке. По умолчанию происходит передача по ссылке. Пример для выполнения 18 Напишите следующие процедуры: Sub Temp10(X, ByVal Y, ByRef Z) X = X + 1: Y = Y + 1: Z = Z + 1 End Sub Sub Temp11() A = 10: B = 20: C = 30 Call Temp10(A, B, C) S = Str(A) + " " + Str(B) + " " + Str(C) MsgBox (S) End Sub Выполните процедуру Temp11 как макрокоманду. В результате выведется сообщение, приведенное на рисунке 6. Рис. 6. Результат работы процедуры Как видно из сообщения, значение переменной Y не изменилось, так как она передавалась в процедуру как параметр Значение. Использование в VBA стандартных функций Excel То, что стандартные функции Excel имеют английский эквивалент, совсем не означает, что их можно использовать в VBA. В VBA имеется свой перечень функций. 98 Однако если необходимо программно поместить в ячейку Excel какуюнибудь функцию, то необходимо использовать ее английский эквивалент. Например, если написать процедуру: Sub My1() Cells(1, 1) = 8 Cells(2, 1) = 9 Cells(3, 1) = "=СУММ(A1,A2)" End Sub, то в ячейке A3 выведется ошибка #ИМЯ? А если написать процедуру: Sub My_1() Cells(1, 1) = 8 Cells(2, 1) = 9 Cells(3, 1) = "=SUM(A1,A2)" End Sub, то в ячейке A3 выведется значение суммы. В связи с этим можно использовать стандартные процедуры Excel, помещая их в незначащие ячейки, а затем удаляя из них. Пример для выполнения 19 Необходимо узнать количество дней между датами 03.08.2001 и 08.09.2005, чтобы дальше использовать это значение в программе или поместить в ячейку. Для вычисления количества дней между датами в Excel имеется функция ДНЕЙ360(). Английский эквивалент функции DAYS360, которую VBA не поддерживает. Напишите процедуру: Sub My_2() 'Помещаем значения дат в ячейки A1 и A2 Cells(1, 1) = "03.08.2001" Cells(2, 1) = "08.09.2005" 'Помещаем в ячейку A3 формулу, вычисления количества между датами Cells(3, 1) = "=DAYS360(B1,A1,1)" 'Получаем разницу дат в переменную N N = Cells(3, 1) 'Выводим результат в ячейке A1 Cells(1, 1) = N 'Очищаем ячейки, значения в которых больше не нужны. Cells(2, 1).Clear 99 Cells(3, 1).Clear End Sub После запуска процедуры в ячейке A1 выведется значение 36573. 5. Операторы VBA Операторы, как и в любом языке программирования, предназначены для реализации структур управления. Существуют две основные структуры управления: ветвления и циклы. Оператор условия Краткая форма оператора имеет вид: If <Условие> Then <Оператор 1> <Оператор 2> End If Если <Условие> истинно, то выполняется блок операторов. Полная форма оператора имеет вид: If Условие Then Оператор 1 Оператор 2 Else Оператор 1 Оператор 2 End If Если <Условие> истинно, то выполняется первый блок операторов, иначе выполняется второй блок операторов. Пример для выполнения 20 Напишите функцию для вычисления эквивалентного сопротивления двух резисторов. Если первый аргумент равен единице, то необходимо вычислить эквивалентное сопротивление для последовательного соединения, иначе – для параллельного соединения. Function R_1(V, R1, R2) If V = 1 Then R_1 = R1 + R2 Else R_1 = (R1 * R2) / (R1 + R2) 100 End If End Function Обращение к функции из ячейки рабочей книги будет выглядеть как =R_1(1;6;2). Дано три отрезка: A, B, C. Можно ли построить треугольник, и если можно, то будет ли он прямоугольным? Для решения задачи напишите процедуру: Sub Treug() A = Cells(1, 2) B = Cells(2, 2) C = Cells(3, 2) If A + B > C And B + C > A And C + A > B Then If A ^ 2 + B ^ 2 = C ^ 2 Or B ^ 2 + C ^ 2 = A ^ 2 Or C ^ 2 + A ^ 2 = B ^ 2 Then MsgBox ("Прямоугольный") Else MsgBox ("Обычный") End If Else MsgBox ("Построить нельзя") End If End Sub Оператор выбора варианта Формат оператора следующий: Select Case <проверяемое выражение> Case <список значений 1> <блок операторов 1> Case <список значений 2> <блок операторов 2> ….. Case Else <блок операторов Else > End Select Проверяемое выражение вычисляется в начале работы оператора Select Case. Это выражение может возвращать значение любого типа (логическое, строковое или числовое). Список значений представляет собой одно или несколько значений, разделенных запятой. При выполнении оператора проверяется, соответствует ли хотя бы один из элементов этого списка проверяемому выражению. Эти элементы списка могут иметь одну из следующих форм: 101 <значение> в этом случае проверяется, совпадает ли проверяемое выражение с указанным значением; <значение 1> To <значение 2> в этом случае проверяется, находится ли проверяемое выражение в указанном диапазоне; Is <логическая операция> <выражение> в этом случае проверяемое выражение сравнивается с указанным значением с помощью заданной логической операции. Пример для выполнения 21 Вычислите сумму подоходного налога, используя следующую функцию: Function Nalog(A) Select Case A Case Is < 1001 N = A * 10 / 100 Case 1001 To 2000 N = A * 12 / 100 Case 2001 To 3000 N = A * 20 / 100 Case 3001 To 4000 N = A * 25 / 100 Case 4001 To 5000 N = A * 30 / 100 Case Else N = A * 35 / 100 End Select Nalog = N End Function Вычислите эквивалентное сопротивление параллельного соединения двух и более резисторов. Максимальное количество резисторов не должно превышать пяти: Function ParRez(N, R1, R2, Optional R3, Optional R4, Optional R5) If N < 2 Or N > 5 Then Exit Function Select Case N Case 2 R = (R1 * R2) / (R1 + R2) Case 3 R = 1 / (1 / R1 + 1 / R2 + 1 / R3) Case 4 102 R = 1 / (1 / R1 + 1 / R2 + 1 / R3 + 1 / R4) Case 5 R = 1 / (1 / R1 + 1 / R2 + 1 / R3 + 1 / R4 + 1 / R5) End Select ParRez = R End Function Используйте данную функцию, например как =ParRez(3;5;2;10). Цикл с предварительным условием Формат оператора следующий: Do While <условие> <блок операторов> Loop Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает работу, пока условие истинно. Пример для выполнения 22 Выполните ту же задачу вычисления – эквивалентное сопротивление параллельного соединения двух и более резисторов с использованием цикла. Максимальное количество резисторов не должно превышать пяти: Function ParRez1(N, R) If N < 2 Or N > 5 Then Exit Function I = 1: p = 0 Do While I <= N p = p + (1 / R(I)) I=I+1 Loop ParRez1 = 1 / p End Function Занесите в ячейки A1:A4 значения резисторов. Обратитесь к функции как =ParRez1(4;A1:A4). Цикл с последующим условием Формат оператора следующий: Do <блок операторов> Loop Until <условие> Цикл выполняется до тех пор, пока условие ложно. 103 Пример для выполнения 23 Напишите функцию, которая возвращала бы наименование диапазона по известным координатам (столбец, строка) левой верхней и правой нижней ячеек: Function SetRange(C1, R1, C2, R2) S1 = "": S2 = "": I1 = 64: I2 = 64 Do If C1 > 26 Then C1 = C1 - 26: I1 = I1 + 1: S1 = Chr(I1) End If Loop Until C1 <= 26 Do If C2 > 26 Then C2 = C2 - 26: I2 = I2 + 1: S2 = Chr(I2) End If Loop Until C2 <= 26 SetRange = S1 + Chr(64 + C1) + Str(R1) + ":" + S2 + Chr(64 + C2) + Str(R2) End Function Обращение к функции =SetRange(4;4;40;40) возвратит результат D4:AN40. Цикл с параметром Формат оператора: For <начальное значение> To <конечное значение> [Step шаг] <блок операторов> Next [параметр] Тело цикла выполняется до тех пор, пока начальное значение не станет больше конечного значения. По умолчанию шаг изменения параметра равен единице. Пример для выполнения 24 Сгенерировать случайный одномерный массив размером N в заданном интервале L–K и вывести его в столбце A: Sub Gen_Mas() N = Cells(1, 3) L = Cells(2, 3) K = Cells(3, 3) 'Range("A1:A200").Select Columns(1).Select Selection.Clear 104 Cells(1, 1).Select Randomize For I = 1 To N Cells(I, 1) = Round(Int(L - K + 1) * Rnd() + K) Next End Sub Напишите функции для определения количества положительных и отрицательных чисел массива. Для определения количества отрицательных чисел функция будет выглядеть следующим образом: Function Kol_Ot(A, N) K=0 For I = 1 To N If A(I) < 0 Then K = K + 1 Next Kol_Ot = K End Function Параметрами функции являются массив А и количество элементов в массиве N. Обращение к функции из ячейки таблицы выглядит как =Kol_Ot(A1:A10;C1). Заметим, что в цикле мы перебираем не последовательность ячеек, а элементы массива A. Для программного обращения к функции напишите процедуру: Sub Kol_Ot1() N = Cells(1, 3) Cells(1, 5) = Kol_Ot(Range(Cells(1, 1), Cells(10, 1)), N) End Sub Цикл For Each … Next В отличие от обычного цикла, For Each ... Next не требует определять верхний предел или какое количество раз должен выполниться цикл. Достаточно определить переменную типа Object и указать набор, к которому необходимо применить код. Пример для выполнения 25 {VBA6 > List} Написать процедуру для вывода имен листов рабочей книги. Sub List() Dim A As Object S = "" 105 For Each A In ThisWorkbook.Sheets S = S + A.Name + " " Next ActiveCell.Value = S End Sub Предварительный выход из функций и процедур Предварительный выход из процедур и функций осуществляется следующими операторами: Exit Sub Выход из процедур Exit Function Выход из функций Exit For Выход из циклов с параметром Do Loop Выход из циклов с предварительным или последующим условием Вложенные структуры управления Любые из перечисленных выше структур могут быть вложенными. Пример для выполнения 26 Имеются три числа, значения которых находятся в ячейках B1, B2 и B3. Напишите процедуру определения максимального числа: Sub Maximum() Sheets(1).Select A = Cells(1, 2).Value B = Cells(1, 2).Value C = Cells(3, 2).Value If A > B And A > C Then N = "Первое" ElseIf B > C Then N = "Второе" Else N = "Третье" End If ActiveCell.Value = N End Sub Пример для выполнения 27 Чтобы понять, как работают вложенные циклы, выполните пример: Sub Cikl1() K=0 For I = 1 To 4 For J = 1 To 5 K=K+1 106 S = Str(I) + " " + Str(J) Cells(K, 1) = S Next Next End Sub В результате на рабочем листе выведется информация, представленная на рисунке 7. Рис. 7. Вывод индексов двумерного массива Сначала переменной I присваивается единица и начинает выполняться внутренний цикл, пока J не станет больше четырех. Затем параметр внешнего цикла увеличивается на единицу и снова выполняется внутренний цикл. Пример для выполнения 28 Напишите процедуру, генерирующую случайный массив. Параметры (размер и диапазон значений элементов массива) находятся в ячейках B1-B4, как показано на рисунке 8. Рис. 8. Параметры двумерного массива Sub Cikl2() Dim A(1 To 50, 1 To 50) As Integer Sheets(3).Select 107 N = Cells(1, 2) M = Cells(2, 2) L = Cells(3, 3) K = Cells(4, 2) Sheets(4).Select Randomize For I = 1 To N For J = 1 To M A(I, J) = Round((Int(L - K + 1) * Rnd() + K), 0) Cells(I, J) = A(I, J) Next Next End Sub Результат работы алгоритма приведен на рисунке 9. Рис. 9. Вывод двумерного массива 6. Специальные процедуры В VBA имеются две процедуры, которые выполняются автоматически. Процедура Sub Auto_Open() выполняется при открытии книги. Процедура Sub Auto_Close() выполняется при закрытии книги. Обычно с помощью процедуры Auto_Open() создается меню пользователя, а с помощью процедуры Auto_Close() данное меню удаляется, иначе это меню будет постоянно выводиться при открытии Excel. Пример для выполнения 29 Напишите процедуру создания меню: Sub AddMenu() ‘Процедура создания меню With MenuBars(xlWorksheet).Menus.Add("Меню пользователя") .MenuItems.Add "Меню 1", "Menu1" With.MenuItems.AddMenu("Меню 2") .MenuItems.Add "Меню 2 1", "Menu21" .MenuItems.Add "Меню 2 2", "Menu22" End With With.MenuItems.AddMenu("Меню 3") 108 .MenuItems.Add "Меню 3 1", "Menu31" .MenuItems.Add "Меню 3 2", "Menu32" .MenuItems.Add "Меню 3 3", "Menu33" End With End With End Sub При создании строки меню, например .MenuItems.Add "Меню 1", "Menu1". «Меню 1» – это имя меню, которое будет видно в списке меню, а "Menu1" – это имя процедуры, связанной с данным пунктом меню. Включите данную процедуру в меню открытия книги: Sub Auto_Open() 'Процедура выполняется автоматически при открытии файла книги AddMenu End Sub В процедуру закрытия книги включите код: Sub Auto_Close() 'Процедура выполняется автоматически при закрытии файла книги On Error Resume Next MenuBars(xlWorksheet).Menus("Меню пользователя").Delete On Error GoTo 0 End Sub При открытии файла книги на вкладке «Надстройки» появится дополнительное меню, приведенное на рисунке 10. Напишите процедуры для каждого пункта меню: Sub Menu1() Cells(1, 1) = "Menu1" End Sub Sub Menu21() Cells(1, 1) = "Menu21" End Sub Sub Menu22() Cells(1, 1) = "Menu22" End Sub Sub Menu31() Cells(1, 1) = "Menu31" End Sub Sub Menu32() Cells(1, 1) = "Menu32" 109 End Sub Sub Menu33() Cells(1, 1) = "Menu33" End Sub Рис. 10. Меню пользователя Теперь при выполнении соответствующего пункта меню в ячейке А1 будет выводиться название данного меню. 110 Часть 4 1. Создание диалоговых окон пользователя Диалоговые окна формируются на так называемых формах. Чтобы добавить форму, необходимо выполнить: Разработчик > Visual Basic > Insert > UserForm Для того чтобы показать форму, необходимо вызвать ее метод: UserForm1.Show Данный метод можно вызвать из любой процедуры, но лучше всего это делать из меню пользователя. Пример для выполнения 1 Напишите следующие процедуры для создания меню пользователя: Sub AddMenu() 'Создание меню пользователя With MenuBars(xlWorksheet).Menus.Add("Меню пользователя") .MenuItems.Add "Открыть форму", "Menu1" 'Если необходимы еще разделы меню '.MenuItems.Add "Меню 2", "Menu2" End With End Sub Sub Auto_Open() 'Процедура выполняется автоматически при открыти файла книги AddMenu End Sub Sub Auto_Close() 'Процедура выполняется автоматически при закрытии файла книги On Error Resume Next MenuBars(xlWorksheet).Menus("Меню пользователя").Delete On Error GoTo 0 End Sub Выполните: Разработчик > Visual Basic > Insert > UserForm Добавьте еще одну процедуру Sub Menu1() UserForm1.Show End Sub 111 Перейдите на вкладку «Надстройки». Выполните меню «Меню пользователя > Открыть форму». В результате откроется пустая форма, приведенная на рисунке 1. Рис. 1. Вывод пустой формы Сохраните файл под именем Form1. В дальнейшем мы будем пользоваться данным файлом как заготовкой для создания диалогов с пользователем. 2. Использование визуальных компонентов Визуальные компоненты – это компоненты, которые можно помещать на форму. Когда вы встанете на форму, то откроется окно с компонентами, представленное на рисунке 2. Рис. 2. Окно с компонентами Сама форма также является визуальным компонентом, на который помещаются другие компоненты. Чтобы работать с компонентами, необходимо 112 Powered by TCPDF (www.tcpdf.org) знать их свойства и методы. Когда вы выделите компонент, например форму, то ее свойства отражаются в так называемом инспекторе объектов, приведенном на рисунке 3. Рис. 3. Инспектор объектов Изучение свойств не входит в нашу задачу, хотя чем больше свойств и методов вы знаете, тем эффективнее будет ваша программа на VBA. 3. Компонент Button Компонент является кнопкой. Практически любая форма содержит кнопку, при нажатии на которую происходит определенное действие. Основные свойства кнопки Caption Left Top Height Width Enabled Font ForeColor Picture Visible Надпись на кнопке Левая координата Верхняя координата Высота Ширина Активность Шрифт надписи Цвет Пиктограмма Видимость 113 Пример для выполнения 2 Создайте форму с кнопкой, при нажатии на которую в активной ячейке выведется надпись на кнопке. Откройте файл Form1. Сохраните его под именем Form2. Поместите на форму кнопку. Измените название кнопки на «Поместить в ячейку». Кликните по кнопке. В результате откроется процедура-обработчик. Напишите в процедуре следующий код: Private Sub CommandButton1_Click() ActiveCell = CommandButton1.Caption End Sub Поместите на форму еще одну кнопку. Подпишите ее как «Параметры формы». По этой кнопке мы будем менять свойства самой формы. Поместите в ячейки рабочего листа значения, как показано на рисунке 4. Рис. 4. Параметры формы Кликните по кнопке и напишите в процедуре-обработчике следующий код: Private Sub CommandButton2_Click() UserForm1.Left = Cells(1, 2) UserForm1.Top = Cells(2, 2) UserForm1.Width = Cells(3, 2) UserForm1.Height = Cells(4, 2) End Sub Вызовите форму из меню. Кликните по второй кнопке. В результате размеры формы и ее положение изменятся. 4. Компоненты Label и TextBox Компонент Label служит для вывода на форме различных комментариев. Основное свойство Caption – выводимое значение. 114 Компонент TextBox служит для ввода значений. Основное свойство TextBox – вводимое значение. Пример для выполнения 3 Разработайте диалог для генерации случайного двумерного массива с заданными параметрами. Максимальное и минимальное значения выделите красным и желтым цветом соответственно. Откройте файл Form1. Сохраните его под именем Form3. Поместите на форму компоненты, как показано на рисунке 5. Рис. 5. Внешний вид формы Назначьте свойствам Caption формы, кнопкам и меткам – соответствующие значения, как показано на рисунке 5. В начале модуля Module1 укажите опции: Public A(1 To 150, 1 To 150) As Integer Public N, M As Integer Напишите свою процедуру генерации массива: Sub GenMas(N, M, L, K) 'выделяем весь лист Cells.Select 'очищаем значения Selection.ClearContents 'очищаем заливку Selection.Interior.Pattern = xlNone Cells(1, 1).Select 115 Randomize For I = 1 To N For J = 1 To M A(I, J) = Round((Int(L - K + 1) * Rnd() + K), 0) Cells(I, J) = A(I, J) Next Next End Sub Для кнопки «Создать» напишите следующий код: Private Sub CommandButton1_Click() N = TextBox1.Text M = TextBox2.Text L = TextBox3.Text K = TextBox4.Text Call GenMas(N, M, L, K) End Sub Напишите процедуру определения координат ячейки с максимальным значением и ее закраски: Sub Max() 'поиск максимального значения R = 1: C = 1: K = A(1, 1) For I = 1 To N For J = 1 To M If A(I, J) > K Then K = A(I, J) R = I: C = J End If Next Next Cells(R, C).Select Selection.Interior.Color = 255 End Sub Напишите процедуру определения координат ячейки с максимальным значением и ее закраски: Sub Min() 'поиск минимального значения R = 1: C = 1: K = A(1, 1) For I = 1 To N For J = 1 To M 116 If A(I, J) < K Then K = A(I, J) R = I: C = J End If Next Next Cells(R, C).Select Selection.Interior.Color = 65535 End Sub Для кнопки «Экстремумы» напишите следующий код: Private Sub CommandButton2_Click() Call Max Call Min End Sub 5. Компоненты Frame и OptionButton Компонент Frame предназначен для группировки компонентов в группы по функциональному признаку. Если сделать группу невидимой, то невидимыми будут все компоненты в данной группе. Компонент OptionButton является переключателем. Переключатели используют для выбора одной из нескольких взаимоисключающих опций. Из нескольких помещенных на форму переключателей включенным может быть только один. Если необходимо создать несколько групп переключателей, их нужно помещать на компонент Frame. Основным свойством компонента Value является возможность принимать значения True или False в зависимости от того, включен переключатель или нет. Пример для выполнения 4 Доработайте проект для генерации случайного массива с возможностью сортировки строк или столбцов массива по минимальному элементу в строке или столбце. Добавьте на форму компонент Frame, два компонента OptionButton и кнопку, как показано на рисунке 6. Свойство Value компонента OptionButton1 установите в истину. Напишите функции поиска минимального значения в заданной строке и заданном столбце: Function MinInRow(R) 'Поиск минимума в заданной строке K = A(R, 1) For I = 1 To M 117 If A(R, I) < K Then K = A(R, I) Next MinInRow = K End Function Function MinInCol(C) 'Поиск минимума в заданном столбце K = A(1, C) For I = 1 To N If A(I, C) < K Then K = A(I, C) Next MinInCol = K Рис. 6. Внешний вид доработанной формы Напишите процедуры перестановки местами заданных строк и заданных столбцов. Sub MoveRow(R1, R2) 'перестановка местами заданных строк For I = 1 To M K = Cells(R1, I) Cells(R1, I) = Cells(R2, I) Cells(R2, I) = K K = A(R1, I): A(R1, I) = A(R2, I): A(R2, I) = K Next End Sub 118 Sub MoveCol(C1, C2) 'перестановка местами заданных столбцов For I = 1 To N K = Cells(I, C1) Cells(I, C1) = Cells(I, C2) Cells(I, C2) = K K = A(I, C2): A(I, C1) = A(I, C2): A(I, C2) = K Next End Sub Напишите процедуры сортировки по строкам и столбцам: Sub SortRow() 'сортировка по строкам Do B = True For I = 1 To N - 1 If MinInRow(I) > MinInRow(I + 1) Then Call MoveRow(I, I + 1) B = False End If Next Loop Until B = True End Sub Sub SortCol() 'сортировка по столбцам Do B = True For I = 1 To M - 1 If MinInCol(I) > MinInCol(I + 1) Then Call MoveCol(I, I + 1) B = False End If Next Loop Until B = True End Sub Для кнопки «Сортировать» напишите следующий код: Private Sub CommandButton3_Click() Cells.Select 'очищаем заливку Selection.Interior.Pattern = xlNone If OptionButton1.Value = True Then 119 Call SortRow End If If OptionButton2.Value = True Then Call SortCol End If Call Max Call Min End Sub 6. Компоненты ListBox и ComboBox Компонент ListBox является списком, из которого можно выбирать значения. Компонент ComboBox является раскрывающимся списком. Основным свойством компонентов является свойство ListIndex – номер выбранной строки. Основным методом является метод AddList – добавить строку в компонент. Количество строк в компоненте содержится в свойстве ListCount. Свойство Text является самой выбранной строкой. Свойство List является массивом строк. События Когда мы на форме щелкаем по кнопке, то автоматически открывается следующая процедура: Private Sub CommandButton1_Click() ‘Тело процедуры End Sub Данная процедура является событием, которое произойдет при щелчке по кнопке. Компоненты имеют и другие события. В частности, сама форма имеет событие Initialize(), которое всегда будет выполняться первым при создании (инициализации) формы. Рис. 7. Выбор компонента 120 Назначить событие компоненту можно следующим образом. • Перейти на код формы. • В левом раскрывающемся списке выбрать необходимый компонент, как показано на рисунке 7. • В правом раскрывающемся списке выбрать событие, как показано на рисунке 8. Рис. 8. Выбор события Пример для выполнения 5 Добавьте в книгу форму, выполнив «Insert > UserForm». Поместите на форму компоненты, как показано на рисунке 9. Рис. 9. Форма для примера 5 121 Добавьте в книгу модуль, выполнив «Insert > Module». Напишите процедуру: Sub Form() UserForm1.Show End Sub Выполните процедуру. В результате должна открыться созданная форма. Для исследования компонентов ListBox и ComboBox поставим следующую задачу. В компонент ListBox1 автоматически должны поместиться названия листов рабочей книги. При выборе строки из ListBox1 она должна отобразиться в метке Label1. При нажатии на кнопку строки из ListBox1 должны поместиться в ComboBox1 в обратном порядке. При выборе строки из ComboBox1 должен осуществиться переход на выбранный лист. Для этого выполните следующее. Активизируйте событие UserForm_Initialize() и напишите следующий код: Private Sub UserForm_Initialize() 'помещаем в ListBox листы рабочей книги Dim A As Object For Each A In ThisWorkbook.Sheets ListBox1.AddItem A.Name Next End Sub Для кнопки напишите код: Private Sub CommandButton1_Click() N = ListBox1.ListCount - 1 ComboBox1.Clear For I = N To 0 Step -1 ComboBox1.AddItem ListBox1.List(I) Next End Sub Для ListBox напишите код: Private Sub ListBox1_Click() Label1.Caption = ListBox1.Text End Sub 122 Для ComboBox напишите код: Private Sub ComboBox1_Change() I = ComboBox1.ListIndex + 1 Worksheets(I).Select End Sub Самостоятельно добавьте к проекту по генерации двумерного массива (пример для выполнения 4) компонент ComboBox для выбора листа рабочей книги. 7. Компонент CheckBox Компонент является переключателем (флажок), который служит для выбора одной или нескольких взаимоисключающих опций. Основное свойство Value – принимать значение истины, если флажок включен. Пример для выполнения 6 Добавьте в книгу форму, выполнив «Insert > UserForm». Поместите на форму компоненты, как показано на рисунке 10. Рис. 10. Форма выбора шрифта Для компонентов CheckBox напишите следующий код: Private Sub CheckBox1_Click() Label1.Font.Bold = CheckBox1.Value End Sub Private Sub CheckBox2_Click() Label1.Font.Italic = CheckBox2.Value End Sub Private Sub CheckBox3_Click() Label1.Font.Underline = CheckBox3.Value End Sub 123 8. Компонент SpinButton Компонент является кнопкой-счетчиком. При нажатии стрелки «вправо» значение счетчика увеличивается на единицу. При нажатии стрелки «влево» уменьшается на единицу. Основные свойства: Min – минимальное значение, Max – максимальное значение, Value – текущее значение. Пример для выполнения 7 Разработайте простейшую тестовую программу. На первом листе рабочей книги создайте таблицу, приведенную на рисунке 11. Рис. 11. Таблица для первого теста В ячейку A1 поместите формулу =СЧЁТЗ(A2:A100). В ячейку F1 поместите формулу =СУММ(F2:F100). Выделите столбцы B-F и выполните «Главная > Ячейки > Формат > Скрыть столбцы» так, чтобы столбцы стали невидимыми. На втором листе создайте таблицу для второго теста, приведенную на рисунке 12. Рис. 12. Таблица для второго теста Поместите в ячейки аналогичные формулы и скройте столбцы. Добавьте в книгу модуль, выполнив «Insert > Module». Добавьте в книгу форму, выполнив «Insert > UserForm». Поместите на форму компоненты, как показано на рисунке 13. Установите компонентам следующие свойства. Для компонентов OptionButton: Min=1 Value=1 Для компонента Frame1: Visible=False 124 Рис. 13. Внешний вид формы В модуле Module1 напишите свою процедуру, которую будем запускать из макроса: Sub Test() UserForm1.Frame1.Visible = False UserForm1.ComboBox1.Clear UserForm1.ComboBox1.AddItem "Тест 1" UserForm1.ComboBox1.AddItem "Тест 2" UserForm1.Show End Sub В начале модуля формы объявите глобальные переменные: Public N, L As Integer В модуле формы напишите свою процедуру для установки начальных значений: Sub Init() 'своя процедура инициализации L = Cells(1, 1) Label1.Caption = "" Range("F2:F100") = 0 Range("A1:A100").Select Selection.Interior.Pattern = xlNone Cells(2, 1).Select SpinButton1.Max = Cells(1, 1) SpinButton1.Value = 1 Frame1.Caption = Cells(2, 1) OptionButton1.Caption = Cells(2, 2) 125 OptionButton2.Caption = Cells(2, 3) OptionButton3.Caption = Cells(2, 4) End Sub Для ComboBox напишите следующий код: Private Sub ComboBox1_Change() I = ComboBox1.ListIndex + 1 Worksheets(I).Select Frame1.Visible = True Init End Sub Для кнопки «SpinButton1» напишите следующий код: Private Sub SpinButton1_Change() 'кнопка выбора вопроса I = SpinButton1.Value Cells(I + 1, 1).Select Frame1.Caption = Cells(I + 1, 1) OptionButton1.Value = False OptionButton2.Value = False OptionButton3.Value = False OptionButton1.Caption = Cells(I + 1, 2) OptionButton2.Caption = Cells(I + 1, 3) OptionButton3.Caption = Cells(I + 1, 4) End Sub Напишите свою процедуру: Sub Otvet(N) I = SpinButton1.Value + 1 'Проверяем правильность ответа If N = Cells(I, 5) Then Cells(I, 6) = 1 Else Cells(I, 6) = 0 Selection.Interior.Color = 65535 End Sub Для кнопки «OptionButton» напишите следующий код: Private Sub OptionButton1_Click() Otvet (1) End Sub Private Sub OptionButton2_Click() Otvet (2) End Sub 126 Private Sub OptionButton3_Click() Otvet (3) End Sub Для кнопки «Завершить» напишите следующий код: Private Sub CommandButton1_Click() U = Cells(1, 6) S = "Количество баллов " + Str(U) + " из " + Str(L) MsgBox (S) Init Frame1.Visible = False End Sub Запустите тест на выполнение. Как видно из кода, тест является пополняемым. Добавляя вопросы к тесту, нет необходимости переписывать код программы. При добавлении нового теста на следующем листе необходимо добавить в процедуру Test единственную строку: UserForm1.ComboBox1.AddItem "Тест 3" 9. Компонент MultiPage Компонент является многостраничной книгой. По умолчанию у компонента две страницы. Чтобы добавить страницу, необходимо на закладке последней страницы выполнить контекстное меню NewPage. Пример для выполнения 8 Разработайте программу для вычисления объема различных фигур. Добавьте в книгу модуль и форму. В модуле напишите процедуру для вывода формы: Sub Temp() UserForm1.Show End Sub Поместите на форму компонент MultiPage. Добавьте еще одну страницу. Подпишите страницы: «Объем цилиндра», «Объем пирамиды» и «Объем шара», как показано на рисунке 14. Для кнопки напишите следующий код: Private Sub CommandButton1_Click() Dim R, H, V As Double R = TextBox1.Text H = TextBox2.Text 127 V = Application.Pi() * R ^ 2 * H TextBox3.Text = V End Sub Рис. 14. Внешний вид формы Аналогично оформите остальные страницы. Вычисление площади пирамиды и круга осуществляется как: V = (1 / 3) * S * H V = (4 / 3) * Application.Pi() * R ^ 3 соответственно. 10. Компонент Image Компонент служит для помещения на форму рисунков. Основное свойство – Picture. При инициализации данного свойства открывается диалог для выбора файла с рисунком. Пример для выполнения 9 Доработайте проект по вычислению объемов и добавьте на каждую страницу рисунки вычисляемых фигур. Создайте в Pain небольшой рисунок цилиндра, как показано на рисунке 15. Рис. 15. Рисунок цилиндра Сохраните рисунок в файле «Cilindr». Поместите на страницу «Объем цилиндра» компонент Image. Активизируйте свойство Picture и откройте файл «Cilindr». Установите свойство Autosize в истину. 128 Powered by TCPDF (www.tcpdf.org) В результате страница «Объем цилиндра» компонента MultiPage будет выглядеть, как показано на рисунке 16. Рис. 16. Страница «Объем цилиндра» Аналогично добавьте рисунки на другие страницы. 11. Компонент ToggleButton Компонент является кнопкой с фиксацией. При нажатии на кнопку она углубляется, а при повторном нажатии принимает исходное состояние. Пример для выполнения 10 Создайте несколько взаимоисключающих кнопок с фиксацией. Добавьте в книгу модуль, выполнив «Insert > Modele». Добавьте в книгу форму, выполнив «Insert > UserForm». Поместите на форму компоненты, как показано на рисунке 17. Рис. 17. Внешний вид формы В начале модуля объявите глобальную переменную. Public clicked As String 129 Напишите процедуру для управления кнопками: Sub ExclusiveToggleButtons() Dim toggle As Control For Each toggle In UserForm1.Frame1.Controls If toggle.Name = clicked Then toggle.Value = True Else toggle.Value = False End If Next End Sub Добавьте процедуру для запуска формы: Sub Temp() UserForm1.Show End Sub Перейдите на форму. Щелкните по первой кнопке. Откроется процедура-обработчик Click. Она нам не нужна. Выберите в левом списке событие OnMouseUp (отпускание клавиши мыши). Напишите в данном событии следующий код: Private Sub ToggleButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) clicked = ToggleButton1.Name Application.OnTime Now, "ExclusiveToggleButtons" End Sub Аналогичный код напишем для события OnMouseUp второй и третьей кнопок. Для второй: clicked = ToggleButton2.Name Application.OnTime Now, "ExclusiveToggleButtons" Для третьей: clicked = ToggleButton3.Name Application.OnTime Now, "ExclusiveToggleButtons" Для выполнения каких-то действий при нажатии на кнопку использовать событие Clik уже нельзя, поэтому воспользуемся событием OnMouseDown (нажатие клавиши мыши). 130 Напишем для данного события первой кнопки следующий код: Private Sub ToggleButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Label1.ForeColor = 255 End Sub Аналогичный код напишем для события OnMouseDown второй и третьей кнопок. Для второй: Label1.ForeColor = 4165632 Для третьей: Label1.ForeColor = 65535 12. Использование нескольких форм При создании сложных проектов одной формы может оказаться недостаточно. В этом случае можно использовать несколько форм. На первую форму, как правило, помещается какая-нибудь заставка и кнопки для вызова остальных форм. Пример для выполнения 11 Добавьте к проекту модуль и четыре формы. Поместите на первую форму три кнопки, как показано на рисунке 18. Рис. 18. Внешний вид первой формы Для кнопок напишите следующий код: Private Sub CommandButton1_Click() UserForm2.Show End Sub Private Sub CommandButton2_Click() UserForm3.Show End Sub Private Sub CommandButton3_Click() UserForm4.Show End Sub 131 Для события Activate (событие наступает при активизации формы) первой формы напишите следующий код: Private Sub UserForm_Activate() UserForm1.Left = 200 UserForm1.Top = 200 End Sub Поместите на остальные формы по одной кнопке, как показано на рисунке 19. Рис. 19. Внешний вид второй и последующих форм Для кнопки «Выход» напишите следующий код: Private Sub CommandButton1_Click() Unload Me End Sub Заметьте, что ключевое слово Me означает текущую форму. 13. Использование дополнительных компонентов В палитру компонентов можно добавить дополнительные компоненты. Перечень этих компонентов зависит от того, какие приложения установлены на вашем ПК. Пример для выполнения 12 Откройте предыдущий проект. Откройте форму 1. Встаньте на палитру компонентов и выполните контекстное меню Additional Controls. В раскрывающемся списке выберите «Календарь 12.0». Аналогично добавьте в палитру компоненты «Windows Media Player» и «Microsoft Progress Bar Control version 6.0». Откройте форму 2. 132 Поместите на форму компонент календаря и дополнительные компоненты, как показано на рисунке 20. Рис. 20. Внешний вид формы 2 Для кнопки «Поместить дату по координатам» напишите следующий код: Private Sub CommandButton2_Click() Dim R, C As Integer R = TextBox1.Text C = TextBox2.Text Cells(R, C) = Calendar1.Value End Sub Для кнопки «Поместить дату в активную ячейку» напишите следующий код: Private Sub CommandButton3_Click() AcniveCell = Calendar1.Value End Sub Откройте форму 3. Поместите на форму компоненты Media Player и ComboBox, как показано на рисунке 21. Поместите в папку, где находится ваша таблица Excel, пару любых музыкальных файлов. 133 Рис. 21. Внешний вид формы 3 Для события инициализации формы напишите следующий код: Private Sub UserForm_Initialize() ComboBox1.AddItem "Снегири" ComboBox1.AddItem "Мы с тобой два берега" End Sub В данном коде мы помещаем названия песен в ComboBox. Для ComboBox напишите следующий код: Private Sub ComboBox1_Change() I = ComboBox1.ListIndex If I = 0 Then WindowsMediaPlayer1.URL = "Снегири.mp3" If I = 1 Then WindowsMediaPlayer1.URL = "Мы с тобой два берега.mp3" End Sub Откройте форму 4. Поместите на форму компонент Progress Bar и вспомогательные компоненты, как показано на рисунке 22. Для кнопки «Пуск» напишите следующий код: Private Sub CommandButton2_Click() Dim N As Double N = TextBox1.Text ProgressBar1.Value = 0 ProgressBar1.Max = N For I = 0 To N 134 ProgressBar1.Value = I Next End Sub Рис. 22. Внешний вид формы 4 Переименуйте кнопки на форме 1, такие как «Календарь», «Проигрыватель» и «Прогресс». 14. Использование функций Excel Как было сказано ранее, хотя все функции Excel имеют английский эквивалент, их использование напрямую в VBA недопустимо. Все же функция Excel – это функция Excel, а функция VBA – это функция VBA. Один из рассмотренных ранее вариантов – это программное помещение функций Excel в свободную ячейку рабочего листа, произведение необходимых вычислений, а затем удаление функции из ячейки. Наиболее эффективный вариант – это использование объекта Application. Дело в том, что все функции Excel являются методами данного объекта. Пример для выполнения 13 Добавьте к книге модуль и форму. Для модуля напишите процедуру: Sub Temp() UserForm1.Show End Sub На форму поместите компоненты, как показано на рисунке 23. Для первой кнопки «Вычислить» напишите следующий код: Private Sub CommandButton1_Click() Dim Ns, Ks, S, A As Single Ns = TextBox1.Text Ks = TextBox2.Text S = TextBox3.Text 135 A = Application.SLN(Ns, Ks, S) TextBox4.Text = A End Sub Обратите внимание, что функция SLN является английским эквивалентом функции Excel АПЛ (вычисление амортизации). Рис. 23. Внешний вид формы Для второй кнопки «Вычислить» напишите следующий код: Private Sub CommandButton2_Click() Dim D1, D2 As Date D1 = DateValue(TextBox5.Text) D2 = DateValue(TextBox6.Text) TextBox7.Text = Application.Days360(D1, D2, 0) TextBox8.Text = Round(Application.YearFrac(D2, D1, 0), 2) End Sub В данном фрагменте функция Days360 является эквивалентом функции Дней360, а функция YearFrac – эквивалентом функции ДоляГода. 136 Приложение 1. Функции Excel 1. Текстовые функции БАТТЕКСТ() – BAHTTEXT() – Преобразует число в текст (бат) на тайском языке. СИМВОЛ() – CHAR() – Определяет знак по заданному коду. ПЕЧСИМВ() – CLEAN() – Удаляет все непечатаемые знаки из текста. КОДСИМВ() – CODE() – Определяет числовой код первого знака в текстовой строке. СЦЕПИТЬ() – CONCATENATE() – Объединяет несколько текстовых элементов в один. РУБЛЬ() – DOLLAR() – Преобразует число в текст, используя денежный формат доллара. СОВПАД() – EXACT() – Проверяет идентичность двух текстов. НАЙТИ() – FIND() – Ищет вхождение одного текста в другой (с учетом регистра). ФИКСИРОВАННЫЙ() – FIXED() – Форматирует число и преобразует его в текст с заданным числом десятичных знаков. ЛЕВСИМВ() – LEFT() – Выдает нужное количество самых левых знаков в строке. ДЛСТР() – LEN() – Определяет количество знаков в текстовой строке. СТРОЧН() – LOWER() – Делает все буквы в тексте строчными. ПСТР() – MID() – Выдает определенное число знаков из строки текста, начиная с указанной позиции. ПРОПНАЧ() – PROPER() – Делает прописной первую букву в каждом слове текста. ЗАМЕНИТЬ() – REPLACE() – Заменяет знаки в тексте. ПОВТОР() – REPT() – Повторяет текст заданное число раз. ПРАВСИМВ() – RIGHT() – Выдает самые правые знаки текстовой строки. ПОИСК() – SEARCH() – Ищет вхождение одного текста в другой (без учета регистра). ПОДСТАВИТЬ() – SUBSTITUTE() – Заменяет в текстовой строке старый текст новым. Т() – T() – Преобразует аргумент в текст. ТЕКСТ() – TEXT() – Форматирует число и преобразует его в текст. СЖПРОБЕЛЫ() – TRIM() – Удаляет из текста лишние пробелы. ПРОПИСН() – UPPER() – Делает все буквы в тексте прописными. ЗНАЧЕН() – VALUE() – Преобразует текстовый аргумент в число. 2. Статистические функции СРОТКЛ() – AVEDEV() – Вычисляет среднее абсолютных значений отклонений точек данных от среднего. 137 СРЗНАЧ() – AVERAGE() – Вычисляет среднее арифметическое аргументов. СРЗНАЧА() – AVERAGEA() – Вычисляет среднее арифметическое аргументов, включая числа, текст и логические значения. БЕТАРАСП() – BETADIST() – Определяет интегральную функцию плотности бета-вероятности. БЕТАОБР() – BETAINV() – Определяет обратную функцию к интегральной функции плотности бета-вероятности. БИНОМРАСП() – BINOMDIST() – Вычисляет отдельное значение биномиального распределения. ХИ2РАСП() – CHIDIST() – Вычисляет одностороннюю вероятность распределения хи-квадрат. ХИ2ОБР() – CHIINV() – Вычисляет обратное значение односторонней вероятности распределения хи-квадрат. ХИ2ТЕСТ() – CHITEST() – Определяет тест на независимость. ДОВЕРИТ() – CONFIDENCE() – Определяет доверительный интервал для среднего значения по генеральной совокупности. КОРРЕЛ() – CORREL() – Находит коэффициент корреляции между двумя множествами данных. СЧЁТ() – COUNT() – Подсчитывает количество чисел в списке аргументов. СЧЁТЗ() – COUNTA() – Подсчитывает количество значений в списке аргументов. СЧИТАТЬПУСТОТЫ() – COUNTBLANK() – Подсчитывает количество пустых ячеек в заданном диапазоне. СЧЁТЕСЛИ() – COUNTIF() – Подсчитывает количество непустых ячеек, удовлетворяющих заданному условию внутри диапазона. КОВАР() – COVAR() – Определяет ковариацию, т. е. среднее произведений отклонений для каждой пары точек. КРИТБИНОМ() – CRITBINOM() – Находит наименьшее значение, для которого биномиальная функция распределения меньше или равна заданному значению. КВАДРОТКЛ() – DEVSQ() – Вычисляет сумму квадратов отклонений. ЭКСПРАСП() – EXPONDIST() – Находит экспоненциальное распределение. FРАСП() – FDIST() – Находит F-распределение вероятности. FРАСПОБР() – FINV() – Определяет обратное значение для F-распределения вероятности. ФИШЕР() – FISHER() – Находит преобразование Фишера. ФИШЕРОБР() – FISHERINV() – Находит обратное преобразование Фишера. ПРЕДСКАЗ() – FORECAST() – Вычисляет значение линейного тренда. ЧАСТОТА() – FREQUENCY() – Находит распределение частот в виде вертикального массива. ФТЕСТ() – FTEST() – Определяет результат F-теста. 138 ГАММАРАСП() – GAMMADIST() – Находит гамма-распределение. ГАММАОБР() – GAMMAINV() – Находит обратное гаммараспределение. ГАММАНЛОГ() – GAMMALN() – Вычисляет натуральный логарифм гамма-функции. СРГЕОМ() – GEOMEAN() – Вычисляет среднее геометрическое. РОСТ() – GROWTH() – Вычисляет значения в соответствии с экспоненциальным трендом. СРГАРМ() – HARMEAN() – Вычисляет среднее гармоническое. ГИПЕРГЕОМЕТ() – HYRGEOMDIST() – Определяет гипергеометрическое распределение. ОТРЕЗОК() – INTERCEPT() – Находит отрезок, отсекаемый на оси линией линейной регрессии. ЭКСЦЕСС() – KURT() – Определяет эксцесс множества данных. НАИБОЛЬШИЙ() – LARGE() – Находит k-е наибольшее значение из множества данных. ЛИНЕЙН() – LINEST() – Находит параметры линейного тренда. ЛГРФПРИБЛ() – LOGEST() – Находит параметры экспоненциального тренда. ЛОГНОРМОБР() – LOGINV() – Находит обратное логарифмическое нормальное распределение. ЛОГНОРМРАСП() – LOGNORMDIST() – Находит интегральное логарифмическое нормальное распределение. МАКС() – MAX() – Определяет максимальное значение из списка аргументов. МАКСА() – MAXA() – Определяет максимальное значение из списка аргументов, включая числа, текст и логические значения. МЕДИАНА() – MEDIAN() – Находит медиану заданных чисел. МИН() – MIN() – Определяет минимальное значение из списка аргументов. МИНА() – MINA() – Определяет минимальное значение из списка аргументов, включая числа, текст и логические значения. МОДА() – MODE() – Определяет значение моды множества данных. ОТРБИНОМРАСП() – NEGBINOMDIST() – Находит отрицательное биномиальное распределение. НОРМРАСП() – NORMDIST() – Выдает нормальную функцию распределения. НОРМОБР() – NORMINV() – Выдает обратное нормальное распределение. НОРМСТРАСП() – NORMSDIST() – Выдает стандартное нормальное интегральное распределение. НОРМСТОБР() – NORMSINV() – Выдает обратное значение стандартного нормального распределения. ПИРСОН() – PEARSON() – Определяет коэффициент корреляции Пирсона. 139 ПЕРСЕНТИЛЬ() – PERCENTILE() – Определяет k-ю персентиль для значений из интервала. ПРОЦЕНТРАНГ() – PERCENTRANK() – Определяет процентную норму значения в множестве данных. ПЕРЕСТ() – PERMUT() – Находит количество перестановок для заданного числа объектов. ПУАССОН() – POISSON() – Выдает распределение Пуассона. ВЕРОЯТНОСТЬ() – PROB() – Определяет вероятность того, что значение из диапазона находится внутри заданных пределов. КВАРТИЛЬ() – QUARTILE() – Определяет квартиль множества данных. РАНГ() – RANK() – Определяет ранг числа в списке чисел. КВПИРСОН() – RSQ() – Находит квадрат коэффициента корреляции Пирсона. СКОС() – SKEW() – Определяет асимметрию распределения. НАКЛОН() – SLOPE() – Находит наклон линии линейной регрессии. НАИМЕНЬШИЙ() – SMALL() – Находит k-е наименьшее значение в множестве данных. НОРМАЛИЗАЦИЯ() – STANDARDIZE() – Вычисляет нормализованное значение. СТАНДОТКЛОН() – STDEV() – Оценивает стандартное отклонение по выборке. СТАНДОТКЛОНА() – STDEVA() – Оценивает стандартное отклонение по выборке, включая числа, текст и логические значения. СТАНДОТКЛОНП() – STDEVP() – Определяет стандартное отклонение по генеральной совокупности. СТАНДОТКЛОНПА() – STDEVPA() – Определяет стандартное отклонение по генеральной совокупности, включая числа, текст и логические значения. СТОШYX() – STEYX() – Определяет стандартную ошибку предсказанных значений y для каждого значения x в регрессии. СТЬЮДРАСП() – TDIST() – Выдает t-распределение Стьюдента. СТЬЮДРАСПОБР() – TINV() – Выдает обратное t-распределение Стьюдента. ТЕНДЕНЦИЯ() – TREND() – Находит значения в соответствии с линейным трендом. УРЕЗСРЕДНЕЕ() – TRIMMEAN() – Находит среднее внутренности множества данных. ТТЕСТ() – TTEST() – Находит вероятность, соответствующую критерию Стьюдента. ДИСП() – VAR() – Оценивает дисперсию по выборке. ДИСПА() – VARA() – Оценивает дисперсию по выборке, включая числа, текст и логические значения. ДИСПР() – VARP() – Вычисляет дисперсию для генеральной совокупности. 140 ДИСПРА() – VARPA() – Вычисляет дисперсию для генеральной совокупности, включая числа, текст и логические значения. ВЕЙБУЛЛ() – WEIBULL() – Выдает распределение Вейбулла. ZТЕСТ() – ZTEST() – Выдает двустороннее P-значение z-теста. 3. Математические функции ABS() – ABS() – Находит модуль (абсолютную величину) числа. ACOS() – ACOS() – Вычисляет арккосинус числа. ACOSH() – ACOSH() – Вычисляет гиперболический арккосинус числа. ASIN() – ASIN() – Вычисляет арксинус числа. ASINH() – ASINH() – Вычисляет гиперболический арксинус числа. ATAN() – ATAN() – Вычисляет арктангенс числа. ATAN2() – ATAN2() – Вычисляет арктангенс для заданных координат x и y. ATANH() – ATANH() – Вычисляет гиперболический арктангенс числа. ОКРВВЕРХ() – CEILING() – Округляет число до ближайшего целого или до ближайшего кратного указанному значению. ЧИСЛКОМБ() – COMBIN() – Находит количество комбинаций для заданного числа объектов. COS() – COS() – Вычисляет косинус числа. COSH() – COSH() – Вычисляет гиперболический косинус числа. ГРАДУСЫ() – DEGREES() – Преобразует радианы в градусы. ЧЁТН() – EVEN() – Округляет число до ближайшего четного целого. EXP() – EXP() – Вычисляет число e, возведенное в указанную степень. ФАКТР() – FACT() – Вычисляет факториал числа. ОКРВНИЗ() – FLOOR() – Округляет число до ближайшего меньшего по модулю целого. НОД() – GCD() – Находит наибольший общий делитель. ЦЕЛОЕ() – INT() – Округляет число до ближайшего меньшего целого. НОК() – LCM() – Находит наименьшее общее кратное. LN() – LN() – Вычисляет натуральный логарифм числа. LOG() – LOG() – Вычисляет логарифм числа по заданному основанию. LOG10() – LOG10() – Вычисляет десятичный логарифм числа. МОПРЕД() – MDETERM() – Вычисляет определитель матрицы, хранящейся в массиве. МОБР() – MINVERSE() – Определяет обратную матрицу (матрица хранится в массиве). МУМНОЖ() – MMULT() – Вычисляет произведение матриц, хранящихся в массивах. ОСТАТ() – MOD() – Вычисляет остаток от деления. ОКРУГЛТ() – MROUND() – Находит число, округленное с требуемой точностью. МУЛЬТИНОМ() – MULTINOMIAL() – Вычисляет мультиномиальный коэффициент множества чисел. НЕЧЁТ() – ODD() – Округляет число до ближайшего нечетного целого. 141 ПИ() – PI() – Вставляет число π. СТЕПЕНЬ() – POWER() – Вычисляет результат возведения числа в степень. ПРОИЗВЕД() – PRODUCT() – Вычисляет произведение аргументов. ЧАСТНОЕ() – QUOTIENT() – Вычисляет целую часть частного при делении. РАДИАНЫ() – RADIANS() – Преобразует градусы в радианы. СЛЧИС() – RAND() – Выдает случайное число в интервале от 0 до 1. СЛУЧМЕЖДУ() – RANDBETVEEN() – Выдает случайное число в заданном интервале. РИМСКОЕ() – ROMAN() – Преобразует число в арабской записи к числу в римской как текст. ОКРУГЛ() – ROUND() – Округляет число до указанного количества десятичных разрядов. ОКРУГЛВНИЗ() – ROUNDDOWN() – Округляет число до ближайшего меньшего по модулю целого. ОКРУГЛВВЕРХ() – ROUNDUP() – Округляет число до ближайшего по модулю большего целого. РЯД.СУММ() – SERIESSUM() – Вычисляет сумму степенного ряда по заданной формуле. ЗНАК() – SIGN() – Определяет знак числа. SIN() – SIN() – Вычисляет синус заданного угла. SINH() – SINH() – Вычисляет гиперболический синус числа. КОРЕНЬ() – SQRT() – Вычисляет положительное значение квадратного корня. КОРЕНЬПИ() – SQRTPI() – Вычисляет значение квадратного корня из числа π. ПРОМЕЖУТОЧНЫЕ.ИТОГИ() – SUBTOTAL() – Вычисляет промежуточные итоги. СУММ() – SUM() – Суммирует аргументы. СУММЕСЛИ() – SUMIF() – Суммирует ячейки, удовлетворяющие заданному условию (читать подробнее). СУММПРОИЗВ() – SUMPRODUCT() – Вычисляет сумму произведений соответствующих элементов массивов (читать подробнее). СУММКВ() – SUMSQ() – Вычисляет сумму квадратов аргументов. СУММРАЗНКВ() – SUMX2MY2() – Вычисляет сумму разностей квадратов соответствующих значений в двух массивах. СУММСУММКВ() – SUMX2PY2() – Вычисляет сумму сумм квадратов соответствующих элементов двух массивов. СУММКВРАЗН() – SUMXMY2() – Вычисляет сумму квадратов разностей соответствующих значений в двух массивах. TAN() – TAN() – Вычисляет тангенс числа. TANH() – TANH() – Вычисляет гиперболический тангенс числа. ОТБР() – TRUNC() – Отбрасывает дробную часть числа. 142 4. Ссылки и массивы АДРЕС() – ADRESS() – Выдает ссылку на отдельную ячейку рабочего листа в виде текста. ОБЛАСТИ() – AREAS() – Определяет количество областей в ссылке. ВЫБОР() – CHOOSE() – Выбирает значение из списка значений по индексу. СТОЛБЕЦ() – COLUMN() – Определяет номер столбца, на который указывает ссылка. ЧИСЛСТОЛБ() – COLUMNS() – Определяет количество столбцов в массиве или ссылке. ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ() – GETPIVOTDATA() – Возвращает данные, хранящиеся в сводной таблице. ГПР() – HLOOKUP() – Ищет значение в первой строке массива и выдает значение из ячейки в найденном столбце и указанной строке. ГИПЕРССЫЛКА() – HYPERLINK() – Создает ссылку, открывающую документ, находящийся на жестком диске, сервере сети или в Интернете. ИНДЕКС() – INDEX() – По индексу получает значение из ссылки или массива (читать подробнее). ДВССЫЛ() – INDIRECT() – Определяет ссылку, заданную текстовым значением. ПРОСМОТР() – LOOKUP() – Ищет значения в векторе или массиве. ПОИСКПОЗ() – MATCH() – Ищет значения в ссылке или массиве (читать подробнее). СМЕЩ() – OFFSET() – Определяет смещение ссылки относительно заданной ссылки. СТРОКА() – ROW() – Определяет номер строки, определяемой ссылкой. ЧСТРОК() – ROWS() – Определяет количество строк в ссылке. ДРВ() – RTD() – Извлекает данные реального времени из программ, поддерживающих автоматизацию COM. ТРАНСП() – TRANSPOSE() – Выдает транспонированный массив. ВПР() – VLOOKUP() – Ищет значение в первом столбце массива и выдает значение из ячейки в найденной строке и указанном столбце (читать подробнее). 5. Логические функции И() – AND() – Выдает значение ИСТИНА, если все аргументы имеют значение ИСТИНА. ЛОЖЬ() – FALSE() – Вставляет логическое значение ЛОЖЬ. ЕСЛИ() – IF() – Выполняет проверку условия. НЕ() – NOT() – Меняет на противоположное логическое значение своего аргумента. ИЛИ() – OR() – Выдает значение ИСТИНА, если хотя бы один аргумент имеет значение ИСТИНА. ИСТИНА() – TRUE() – Вставляет логическое значение ИСТИНА. 143 6. Проверка свойств и значений и информационные функции ЯЧЕЙКА() – CELL() – Определяет информацию о формате, местоположении или содержимом ячейки. ТИП.ОШИБКИ() – ERROR.TYPE() – Определяет номер, соответствующий одному из типов ошибок Microsoft Excel. ИНФОРМ() – INFO() – Выдает информацию о текущей операционной среде. ЕПУСТО() – ISBLANK() – Выдает логическое значение ИСТИНА, если аргумент является ссылкой на пустую ячейку. ЕОШ() – ISERR() – Выдает логическое значение ИСТИНА, если аргумент ссылается на любое значение ошибки, кроме #Н/Д. ЕОШИБКА() – ISERROR() – Выдает логическое значение ИСТИНА, если аргумент ссылается на любое значение ошибки. ЕЧЁТН() – ISEVEN() – Выдает логическое значение ИСТИНА, если аргумент – четное число. ЕЛОГИЧ() – ISLOGICAL() – Выдает логическое значение ИСТИНА, если аргумент ссылается на логическое значение. ЕНД() – ISNA() – Выдает логическое значение ИСТИНА, если аргумент ссылается на значение ошибки #Н/Д (значение недоступно). ЕНЕТЕКСТ() – ISNONTEXT() – Выдает логическое значение ИСТИНА, если аргумент ссылается на значение, которое не является текстом. ЕЧИСЛО() – ISNUMBER() – Выдает логическое значение ИСТИНА, если аргумент ссылается на число. ЕНЕЧЁТ() – ISODD() – Выдает логическое значение ИСТИНА, если аргумент – нечетное число. ЕССЫЛКА() – ISREF() – Выдает логическое значение ИСТИНА, если аргумент ссылается на ссылку. ЕТЕКСТ() – ISTEXT() – Выдает логическое значение ИСТИНА, если аргумент ссылается на текст. Ч() – N() – Преобразует заданное значение в число. НД() – NA() – Выдает значение ошибки #Н/Д. ТИП() – TYPE() – Выдает тип значения. 7. Финансовые функции НАКОПДОХОД() – ACCRINT() – Определяет накопленный доход по ценным бумагам с периодической выплатой процентов. НАКОПДОХОДПОГАШ() – ACCRINTM() – Находит накопленный доход по ценным бумагам, процент по которым выплачивается в срок вступления в силу. АМОРУМ() – AMORDEGRC() – Вычисляет величину амортизации для каждого периода, используя коэффициент амортизации (французская система бухгалтерского учета). АМОРУВ() – AMORLINC() – Вычисляет величину амортизации для каждого отчетного периода (французская система бухгалтерского учета). 144 Powered by TCPDF (www.tcpdf.org) ДНЕЙКУПОНДО() – COUPDAYBS() – Определяет количество дней между началом периода купона и датой соглашения. ДНЕЙКУПОН() – COUPDAYS() – Определяет число дней в периоде купона, который содержит дату соглашения. ДНЕЙКУПОНПОСЛЕ() – COUPDAYSNC() – Находит число дней от даты соглашения до срока следующего купона. ДАТАКУПОНПОСЛЕ() – COUPNCD() – Находит следующую дату купона после даты соглашения. ЧИСЛКУПОН() – COUPNUM() – Определяет количество купонов, которые могут быть оплачены между датой соглашения и сроком вступления в силу. ДАТАКУПОНДО() – COUPPCD() – Выдает предыдущую дату купона перед датой соглашения. ОБЩПЛАТ() – CUMIPMT() – Вычисляет общую выплату, произведенную между двумя периодическими выплатами. ОБЩДОХОД() – CUMPRINC() – Вычисляет общую выплату по займу между двумя периодами. ФУО() – DB() – Вычисляет амортизацию имущества на заданный период, используя метод постоянного учета амортизации. ДДОБ() – DDB() – Вычисляет величину амортизации имущества для указанного периода при использовании метода двукратного учета амортизации или иного явно указанного метода. СКИДКА() – DISC() – Вычисляет норму скидки для ценных бумаг. РУБЛЬ.ДЕС() – DOLLARDE() – Преобразует цену в рублях, выраженную в виде дроби, в цену в рублях, выраженную десятичным числом. РУБЛЬ.ДРОБЬ() – DOLLARFR() – Преобразует цену в рублях, выраженную десятичным числом, в цену в рублях, выраженную в виде дроби. ДЛИТ() – DURATION() – Находит ежегодную продолжительность действия ценных бумаг с периодическими выплатами по процентам. ЭФФЕКТ() – EFFECT() – Вычисляет действующие ежегодные процентные ставки. БС() – FV() – Вычисляет будущее значение вклада. БЗРАСПИС() – FVSCHEDULE() – Вычисляет будущее значение начального вклада при изменяющихся сложных процентных ставках. ИНОРМА() – INTRATE() – Определяет ставку доходности полностью обеспеченной ценной бумаги. ПРПЛТ() – IMPT() – Вычисляет величину выплаты прибыли на вложения за данный период. ВСД() – IRR() – Вычисляет внутреннюю ставку доходности (отдачи) для серии потоков денежных средств. ПРОЦПЛАТ() – ISPMT() – Вычисляет выплаты за указанный период инвестиции. МДЛИТ() – MDURATION() – Определяет модифицированную длительность Маколея для ценных бумаг с предполагаемой номинальной стоимостью 100 руб. 145 МВСД() – MIRR() – Определяет внутреннюю ставку доходности, при которой положительные и отрицательные денежные потоки имеют разную ставку. НОМИНАЛ() – NOMINAL() – Определяет номинальную годовую процентную ставку. КПЕР() – NPER() – Определяет общее количество периодов выплаты для данной ссуды. ЧПС() – NPV() – Вычисляет чистую приведенную стоимость инвестиции, основанной на серии периодических денежных потоков и ставке дисконтирования. ЦЕНАПЕРВНЕРЕГ() – ODDPRICE() – Находит цену за 100 руб. нарицательной стоимости ценных бумаг с нерегулярным первым периодом. ДОХОДПЕРВНЕРЕГ() – ODDFYIELD() – Находит доход по ценным бумагам с нерегулярным первым периодом. ЦЕНАПОСЛНЕРЕГ() – ODDLPRICE() – Определяет цену за 100 руб. нарицательной стоимости ценных бумаг с нерегулярным последним периодом. ДОХОДПЕРВНЕРЕГ() – ODDFYIELD() – Находит доход по ценным бумагам с нерегулярным первым периодом. ЦЕНАПОСЛНЕРЕГ() – ODDLPRICE() – Определяет цену за 100 руб. нарицательной стоимости ценных бумаг с нерегулярным последним периодом. ДОХОДПОСЛНЕРЕГ() – ODDFYIELD() – Определяет доход по ценным бумагам с нерегулярным последним периодом. ПЛТ() – PMT() – Вычисляет величину выплаты по ссуде за один период. ОСПЛТ() – PPMT() – Вычисляет величину выплат на основной капитал для вклада в заданный период. ЦЕНА() – PRICE() – Вычисляет цену за 100 руб. нарицательной стоимости ценных бумаг, по которым производится периодическая выплата процентов. ЦЕНАСКИДКА() – PRICEDISC() – Вычисляет цену за 100 руб. нарицательной стоимости ценных бумаг, на которые сделана скидка. ЦЕНАПОГАШ() – PRICEMAT() – Вычисляет цену за 100 руб. нарицательной стоимости ценных бумаг, по которым выплачивается прибыль в момент вступления в силу. ПС() – PV() – Вычисляет приведенную (к настоящему моменту) стоимость инвестиции. СТАВКА() – RATE() – Вычисляет процентную ставку по аннуитету за один период. ПОЛУЧЕНО() – RECEIVED() – Вычисляет сумму, полученную в срок вступления в силу полностью обеспеченных ценных бумаг. АПЛ() – SLN() – Вычисляет величину непосредственной амортизации имущества за один период. 146 АСЧ() – SYD() – Возвращает величину амортизации актива за данный период, рассчитанную методом суммы годовых чисел. РАВНОКЧЕК() – TBILLEQ() – Вычисляет эквивалентный облигации доход по казначейскому чеку. ЦЕНАКЧЕК() – TBILLPRICE() – Вычисляет цену за 100 руб. нарицательной стоимости для казначейского чека. ДОХОДКЧЕК() – TBILLYIELD() – Вычисляет доход по казначейскому чеку. ПУО() – VDB() – Вычисляет величину амортизации имущества для явно указанного или соответствующего периода при использовании метода разового учета амортизации. ЧИСТВНДОХ() – XIRR() – Вычисляет внутреннюю ставку доходности запланированных непериодических денежных потоков. ЧИСТНЗ() – XNPV() – Вычисляет чистую текущую стоимость инвестиции, вычисляемую на основе ряда поступлений наличных, которые не обязательно являются периодическими. ДОХОД() – YIELD() – Вычисляет доход от ценных бумаг, по которым производятся периодические выплаты процентов. ДОХОДСКИДКА() – YIELDDISC() – Вычисляет годовой доход по ценным бумагам, на которые сделана скидка. Пример – казначейские чеки. ДОХОДПОГАШ() – YIELDMAT() – Вычисляет годовой доход от ценных бумаг, процент по которым выплачивается в срок погашения. 8. Инженерные функции БЕССЕЛЬ.I() – BESSELI() – Возвращает модифицированную функцию Бесселя In(x). БЕССЕЛЬ.J() – BESSELJ() – Возвращает функцию Бесселя Jn(x). БЕССЕЛЬ.K() – BESSELK() – Возвращает модифицированную функцию Бесселя Kn(x). БЕССЕЛЬ.Y() – BESSELY() – Возвращает функцию Бесселя Yn(x). ДВ.В.ДЕС() – BIN2DEC() – Преобразует двоичное число в десятичное. ДВ.В.ШЕСТН() – BIN2HEX() – Преобразует двоичное число в шестнадцатеричное. ДВ.В.ВОСЬМ() – BIN2OCT() – Преобразует двоичное число в восьмеричное. КОМПЛЕКСН() – COMPLEX() – Преобразует коэффициенты при вещественной и мнимой частях комплексного числа в комплексное число. ПРЕОБР() – CONVERT() – Преобразует число из одной системы мер в другую. ДЕС.В.ДВ() – DEC2BIN() – Преобразует десятичное число в двоичное. ДЕС.В.ШЕСТН() – DEC2HEX() – Преобразует десятичное число в шестнадцатеричное. ДЕС.В.ВОСЬМ() – DEC2OCT() – Преобразует десятичное число в восьмеричное. ДЕЛЬТА() – DELTA() – Проверяет равенство двух значений. 147 ФОШ() – ERF() – Возвращает функцию ошибки. ДФОШ() – ERFC() – Возвращает дополнительную функцию ошибки. ДВФАКТР() – FACTDOUBLE() – Вычисляет двойной факториал числа. ПОРОГ() – GESTEP() – Проверяет, не превышает ли данное число порогового значения. ШЕСТН.В.ДВ() – HEX2BIN() – Преобразует шестнадцатеричное число в двоичное. ШЕСТН.В.ДЕС() – HEX2DEC() – Преобразует шестнадцатеричное число в десятичное. ШЕСТН.В.ВОСЬМ() – HEX2OCT() – Преобразует шестнадцатеричное число в восьмеричное. МНИМ.ABS() – IMABS() – Возвращает абсолютную величину (модуль) комплексного числа. МНИМ.ЧАСТЬ() – IMAGINARY() – Возвращает коэффициент при мнимой части комплексного числа. МНИМ.АРГУМЕНТ() – IMARGUMENT() – Возвращает значение аргумента комплексного числа (тета – угол, выраженный в радианах). МНИМ.СОПРЯЖ() – IMCONJUGATE() – Возвращает комплексносопряженное комплексное число. МНИМ.COS() – IMCOS() – Возвращает косинус комплексного числа. МНИМ.ДЕЛ() – IMDIV() – Возвращает частное от деления двух комплексных чисел. МНИМ.EXP() – IMEXP() – Возвращает экспоненту комплексного числа. МНИМ.LN() – IMLN() – Возвращает натуральный логарифм комплексного числа. МНИМ.LOG10() – IMLOG10() – Возвращает обычный (десятичный) логарифм комплексного числа. МНИМ.LOG2() – IMLOG2() – Возвращает двоичный логарифм комплексного числа. МНИМ.СТЕПЕНЬ() – IMPOWER() – Возвращает комплексное число, возведенное в целую степень. МНИМ.ПРОИЗВЕД() – IMPRODUCT() – Возвращает произведение двух комплексных чисел. МНИМ.ВЕЩ() – IMREAL() – Возвращает коэффициент при вещественной части комплексного числа. МНИМ.SIN() – IMSIN() – Возвращает синус комплексного числа. МНИМ.КОРЕНЬ() – IMSQRT() – Возвращает значение квадратного корня из комплексного числа. МНИМ.РАЗН() – IMSUB() – Возвращает разность двух комплексных чисел. МНИМ.СУММ() – IMSUM() – Возвращает сумму комплексных чисел. ВОСЬМ.В.ДВ() – OCT2BIN() – Преобразует восьмеричное число в двоичное. 148 ВОСЬМ.В.ДЕС() – OCT2DEC() – Преобразует восьмеричное число в десятичное. ВОСЬМ.В.ШЕСТН() – OCT2HEX() – Преобразует восьмеричное число в шестнадцатеричное. 9. Функции даты и времени ДАТА() – DATE() – Возвращает заданную дату в числовом формате Microsoft Excel. ДАТАЗНАЧ() – DATEVALUE() – Преобразует дату из текстового формата в числовой. ДЕНЬ() – DAY() – Преобразует дату в числовом формате в день месяца. ДНЕЙ360() – DAYS360() – Вычисляет количество дней между двумя датами на основе 360-дневного года. ДАТАМЕС() – EDATE() – Находит дату, отстоящую на заданное число месяцев вперед или назад от начальной даты. КОНМЕСЯЦА() – EOMONTH() – Определяет дату для последнего дня месяца, отстоящего вперед или назад на заданное число месяцев. ЧАС() – HOUR() – Преобразует дату в числовом формате в часы. МИНУТЫ() – MINUTE() – Преобразует дату в числовом формате в минуты. МЕСЯЦ() – MONTH() – Преобразует дату в числовом формате в месяцы. ЧИСТРАБДНИ() – NETWORKDAYS() – Находит количество рабочих дней между двумя датами. ТДАТА() – NOW() – Выдает текущую дату и время. СЕКУНДЫ() – SECOND() – Преобразует дату в числовом формате в секунды. ВРЕМЯ() – TIME() – Выдает заданное время в числовом формате. ВРЕМЗНАЧ() – TIMEVALUE() – Преобразует время из текстового формата в числовой формат. СЕГОДНЯ() – TODAY() – Выдает текущую дату. ДЕНЬНЕД() – WEEKDAY() – Преобразует дату в числовом формате в день недели. НОМНЕДЕЛИ() – WEEKNUM() – Определяет номер рабочей недели года для указанной даты. РАБДЕНЬ() – WORKDAY() – Находит дату, отстоящую от данной на заданное количество рабочих дней. ГОД() – YEAR() – Находит год для заданной даты. ДОЛЯГОДА() – YEARFRAC() – Возвращает долю года, которую составляет количество дней между начальной и конечной датами. 10. Функции баз данных ДСРЗНАЧ() – DAVERAGE() – Вычисляет среднее значение выбранных записей базы данных. 149 БСЧЁТ() – DCOUNT() – Подсчитывает количество числовых ячеек в базе данных. БСЧЁТА() – DCOUNTA() – Подсчитывает количество непустых ячеек в базе данных. БИЗВЛЕЧЬ() – DGET() – Извлекает из базы данных одну запись, удовлетворяющую заданному условию. ДМАКС() – DMAX() – Находит максимальное значение среди выделенных записей базы данных. ДМИН() – DMIN() – Находит минимальное значение среди выделенных записей базы данных. БДПРОИЗВЕД() – DPRODUCT() – Перемножает значения определенного поля в записях базы данных, удовлетворяющих условию. ДСТАНДОТКЛ() – DSTDEV() – Оценивает стандартное отклонение по выборке из выделенных записей базы данных. ДСТАНДОТКЛП() – DSTDEVP() – Вычисляет стандартное отклонение по генеральной совокупности из выделенных записей базы данных. БДСУММ() – DSUM() – Суммирует числа в поле для записей базы данных, удовлетворяющих условию. БДДИСП() – DVAR() – Оценивает дисперсию по выборке из выделенных записей базы данных. БДДИСПП() – DVARP() – Вычисляет дисперсию по генеральной совокупности из выделенных записей базы данных. Приложение 2. Функции VBA 1. Функции для работы с текстом ASC() – позволяет вернуть числовой код для переданного символа. Например, ASC("D") вернет 68. Эту функцию удобно использовать для того, чтобы определить следующую или предыдущую букву. Обычно она используется вместе с функцией Chr(), которая производит обратную операцию – возвращает символ по переданному его числовому коду. Варианты этой функции – AscB() и AscW(): – AscB() – возвращает только первый байт числового кода для символа; – AscW() – возвращает код для символа в кодировке Unicode. Chr() – возвращает символ по его числовому коду. Может использоваться в паре с функцией Asc(), но чаще всего её применяют, когда нужно вывести служебный символ (например, кавычки – "), так как кавычки просто так в VBA-коде не ввести (нужно ставить двойные). Как правило, эта функция и используется. Есть варианты этой функции – ChrB() и ChrW(), которые работают аналогично таким же вариантам для функции Asc(). InStr() и InStrRev() – одни из самых популярных функций. Позволяют обнаружить в теле строковой переменной последовательность символов и вернуть ее позицию. Если последовательность не обнаружена, то возвращается 0. 150 Разница функций в том, что InStr() ищет указанное слово от начала строки, а InStrRev() – с конца строки. Left(), Right(), Mid() – возможность взять указанное вами количество символов из существующей строковой переменной слева, справа или из середины соответственно. Len() – возможность получить число символов в строке. Часто используется с циклами, операциями замены и т. п. LCase() и UCase() – перевести строку в нижний и верхний регистры соответственно. Часто используются для подготовки значения к сравнению, когда при сравнении регистр не важен (фамилии, названия фирм, городов и т. п.). LSet() и RSet() – возможность заполнить одну переменную символами другой без изменения ее длины (соответственно слева и справа). Лишние символы обрезаются, на место недостающих подставляются пробелы. LTrim(), RTrim(), Trim() – возможность убрать пробелы соответственно слева, справа или и слева, и справа. Replace() – возможность заменить в строке одну последовательность символов на другую. Space() – возможность получить строку из указанного вами количества пробелов. Еще одна похожая функция – Spc(), которая используется для форматирования вывода на консоль. Она размножает пробелы с учетом ширины командной строки. StrComp() – возможность сравнить две строки. StrConv() – возможность преобразовать строку (в Unicode и обратно, в верхний и нижний регистр, сделать первую букву слов заглавной и т. п.). StrReverse() – «перевернуть» строку, разместив ее символы в обратном порядке. Tab() – еще одна функция, которая используется для форматирования вывода на консоль. Размножает символы табуляции в том количестве, в котором вы укажете. Если никакое количество не указано, просто вставляет символ табуляции. Для вставки символа табуляции в строковое значение можно также использовать константу vbTab. String() – позволяет получить строку из указанного количества символов (которые опять-таки указываются вами). Обычно используется для форматирования вывода совместно с функцией Len(). 2. Функции для работы с числовыми данными ABS() – возвращает абсолютное значение переданного ей числа (то же число, но без знака). Например, ABS(3) и ABS(-3) вернут одно и то же значение 3. Int(), Fix() и Round() – позволяют по-разному округлять числа: -Int() возвращает ближайшее меньшее целое; -Fix() отбрасывает дробную часть; -Round() округляет до указанного количества знаков после запятой. Rnd() и команда Randomize – используются для получения случайных значений (очень удобно для генерации имен файлов и в других ситуациях). 151 Перед вызовом функции Rnd() необходимо выполнить команду Randomize для инициализации генератора случайных чисел. Sgn() – позволяет вернуть информацию о знаке числа. Возвращает 1, если число положительное, –1, если отрицательное, и 0, если проверяемое число равно 0. 3. Функции для работы с датой и временем Date() – возвращает текущую системную дату. Time() – возвращает текущее системное время. Now() – возвращает дату и время вместе. DateAdd() – возможность добавить к дате указанное количество лет, кварталов, месяцев и так далее – вплоть до секунд. DateDiff() – возможность получить разницу между датами (опять-таки в единицах от лет до секунд). DatePart() – очень важная функция, которая возвращает указанную часть даты (например, только год, только месяц или только день недели). DateSerial() – возможность создать значение даты на основе передаваемых символьных значений. DateValue() – делает то же, что и DateSerial(). Отличия – в формате принимаемых значений. Аналогичным образом (для времени) работают TimeSerial(), TimeValue(), Day(), Year(), Month(), Weekday(), Hour(), Minute(), Second() – специализированные заменители функции (), которые возвращают нужную часть даты/времени (которую именно – видно из названия). MonthName() – возвращает имя месяца словами по его номеру. Возвращаемое значение зависит от региональных настроек. Если они русские, то вернется русское название месяца. Timer() – возвращает количество секунд, прошедших с полуночи. 4. Функции – заменители синтаксических конструкций Choose() – принимает число (номер значения) и несколько значений. Возвращает значение, порядковый номер которого соответствует передаваемому числу, указанному первым аргументом функции. После первого аргумента следуют непосредственно выбираемые значения (максимум 30): IIF() – расшифровывается как Immediate IF, т. е. «Немедленный IF». Представляет собой упрощенный вариант IF…Then, когда проверяется условие и возвращается одно из двух значений. Switch() – принимает неограниченное количество пар типа выражение/значение, проверяет каждое выражение на истинность и возвращает значение для первого выражения, которое оказалось истинным. 5. Функции для работы с массивами Array() — позволяет автоматически создать массив нужного размера и типа и сразу загрузить в него переданные значения. 152 Filter() — позволяет на основе одного массива получить другой, отфильтровав в исходном массиве нужные нам элементы. LBound() — возвращает информацию о нижней границе массива (т. е. о номере первого имеющегося в нем значения). UBound() — возвращает информацию о верхней границе массива (номер последнего имеющегося значения). Join() — возможность слить множество строк из массива строк в одну строковую переменную. В качестве разделителя по умолчанию используется пробел. Можно указать свой разделитель. Split() — обратная функция, разбивающая строку на массив строк. В качестве разделителя по умолчанию используется пробел. Можно указать свой разделитель. 6. Файловые функции CurDir() – возвращает путь к текущему каталогу, в котором по умолчанию будут сохраняться файлы нашего приложения. Dir() – позволяет искать файл или каталог по указанному пути на диске. EOF() – при операции записи в файл на диске эта функция вернет True, если вы находитесь в конце файла. Обычно используется при работе с текстовыми файлами (.txt). При сохранении книг Excel лучше использовать стандартные методы: Save и SaveAs. Error() – позволяет вернуть описание ошибки по ее номеру. Генерировать ошибку нужно при помощи метода RaiseError() специального объекта Er. FileAttr() – позволяет определить, как именно вами был открыт файл в файловой системе: на чтение, запись, добавление, в двоичном или текстовом режиме и т. п. FileDateTime() – позволяет получить информацию о последнем времени обращения к указанному вами файлу. Если к файлу после создания ни разу не обращались, то это будет время создания файла. FileLen() – позволяет определить длину указанного файла в байтах. FreeFile() – позволяет определить следующую свободную цифру, которую можно использовать как номер файла при его открытии. GetAttr() – возможность обратиться к файлу и файловой системе и получить информацию об его атрибутах (скрытый, доступен только для чтения, архивный и т. п.) Input() – позволяет считать информацию из открытого файла. InputB() – позволяет указывать количество байт, которые надо скачать из файла. Loc() (от Location, т. е. местонахождение) – возвращает число, которое определяет текущее место вставки или чтения в открытом файле. Seek() – очень похожа на функцию Loc(), но возвращает информацию о позиции, с которой будет выполняться следующая операция чтения или вставки. 153 LOF() (length of file) – позволяет определить длину открытого файла в байтах. 7. Прочие функции DoEvents() – очень важная функция, которая позволяет на время отвлечься от выполнения какой-либо операции VBA и передать управление операционной системе, чтобы обработать накопившиеся в операционной системе события (например, нажатия клавиш пользователем). После этого продолжение операции VBA продолжается. Если у вас работает очень долгая операция (поиск на дисках, обработка большого объема данных и т. п.) и вы хотите дать пользователю возможность быстро прервать эту операцию, можно выполнять эту команду, например каждый раз после обработки определенной «порции» данных. Environ() – возвращает абсолютный путь для переменных окружения компьютера (полный список переменных, доступных на вашем компьютере, можно просмотреть, если в командной строке выполнить команду SET). Например вам нужно записать что-то в файл во временном каталоге. GetAllSettings() – получить (в виде двухмерного массива) из реестра все параметры, которые относятся к указанному приложению. SaveSetting() – позволяет записать информацию в реестр. DeleteSetting() – удалить информацию из реестра. GetSetting() – позволяет получить информацию об определенном параметре. Этот метод позволяет обращаться только к одному очень далекому уголку реестра в ветви HKEY_CURRENT_USERS. Обращаться к другим параметрам реестра при помощи этого метода бесполезно. Для работы с реестром лучше использовать объектную библиотеку Windows Script Host Object Model, которая также есть на любом компьютере под управлением Windows 2000, XP и 2003. Нужный объект называется WSHShell, методы – RegRead(), RegWrite() и RegDelete(). Справку по объектам этой библиотеки можно найти на сайте Microsoft (www.microsoft.com/scripting). Partition() – позволяет определить, к какому диапазону из наборов значений относится переданное число, и возвращает описание этого диапазона (в виде строки). Обычно используется при выполнении запросов к базам данных. QBColor() – позволяет перевести обозначение цвета из древнего номерного обозначения с возможными 16 значениями в RGB-код, который понимается VBA. Обычно используется при переделке унаследованных программ. RGB() – позволяет вернуть цветовой код, который можно использовать для присвоения цвета в коде, приняв три значения для цветов: красного (Red), зеленого (Green) и синего (Blue). Значения для каждого из основных цветов могут варьироваться от 0 до 255. Например, самый зеленый из возможных цветов получится, если переданные этой функции значения будут выглядеть как RGB(0,255,0). 154 Shell() – позволяет запустить из VBA внешний программный файл и вернуть информацию о его Program ID в операционной системе. Обычно используется опытными разработчиками при применении ими в программах возможностей Windows API. С практической точки зрения эту функцию можно использовать для запуска любых внешних программ из вашего приложения, хотя применение специальных объектов WshShell и WshExec из библиотеки Windows Script Host Object Model удобнее (можно передавать в окно клавиатурные комбинации, принимать и передавать значения через командную строку и т. п.). Эта библиотека есть на любом компьютере Windows, справку по ней можно найти на сайте www.microsoft.com/scripting. TypeName() – функция, которая возвращает имя типа данных для переданной ей переменной. Очень удобна для определения типа данных для значения, полученного из базы данных или путем вызова метода какого-то объекта. VarType() – делает почти то же самое, что и TypeName (), но вместо имени возвращает числовой код, который обозначает тип данных. Можно использовать для программных проверок типов данных для переменных. 155 Содержание Введение ...................................................................................................................3 Часть 1..........................................................................................................................4 1. Основные элементы электронной таблицы Excel ...................................... 4 2. Ввод данных и форматирование таблиц ..................................................... 4 Пример для выполнения 1............................................................................... 5 Пример для выполнения 2............................................................................... 5 Использование списков ................................................................................... 5 Установка ширины строк и столбцов. ........................................................... 7 Объединение ячеек .......................................................................................... 7 Пример для выполнения 3............................................................................... 7 Построение формул ......................................................................................... 7 Пример для выполнения 4............................................................................... 8 3. Копирование и модификация....................................................................... 9 Диапазоны......................................................................................................... 9 Абсолютная и относительная адресация формул......................................... 9 Пример для выполнения 5............................................................................. 10 Пример для выполнения 6............................................................................. 11 4. Стандартные функции ................................................................................ 11 Использование математических функций................................................... 12 Пример для выполнения 7............................................................................. 12 Пример для выполнения 8............................................................................. 12 Использование логических функций ........................................................... 13 Пример для выполнения 9............................................................................. 13 Пример для выполнения 10........................................................................... 13 Пример для выполнения 11........................................................................... 13 Использование временных функций............................................................ 14 Пример для выполнения 12........................................................................... 14 Использование формул массивов................................................................. 15 Пример для выполнения 13........................................................................... 15 Пример для выполнения 14........................................................................... 16 Использование финансовых функций ......................................................... 16 Пример для выполнения 15........................................................................... 16 5. Сортировка и фильтрация данных............................................................. 17 Сортировка...................................................................................................... 17 Пример для выполнения 16........................................................................... 17 Фильтрация ..................................................................................................... 18 Пример для выполнения 17........................................................................... 18 Пример для выполнения 18........................................................................... 19 Пример для выполнения 19........................................................................... 19 Промежуточные итоги................................................................................... 20 Пример для выполнения 20........................................................................... 20 6. Использование имен переменных ............................................................. 21 Пример для выполнения 21........................................................................... 21 156 Пример для выполнения 22........................................................................... 22 Пример для выполнения 23........................................................................... 22 7. Построение простых диаграмм и графиков.............................................. 23 Пример для выполнения 24........................................................................... 23 Пример для выполнения 25........................................................................... 24 Пример для выполнения 26........................................................................... 26 Часть 2 .................................................................................................................... 28 1. Работа со структурами данных .................................................................. 28 Создание структуры в автоматическом режиме......................................... 28 Пример для выполнения 1............................................................................. 28 Использование промежуточных итогов для создания структуры ............ 29 Пример для выполнения 2............................................................................. 29 2. Работа со списком как с базой данных...................................................... 32 Использование формы данных ..................................................................... 32 Пример для выполнения 3............................................................................. 32 Фильтрация данных в списках...................................................................... 33 Пример для выполнения 4............................................................................. 33 3. Работа с листами, защита, консолидация данных.................................... 35 Пример для выполнения 5............................................................................. 35 Защита ячеек................................................................................................... 37 Консолидация данных ................................................................................... 38 Пример для выполнения 6............................................................................. 38 Пример для выполнения 7............................................................................. 39 4. Создание сводных таблиц........................................................................... 40 Пример для выполнения 8............................................................................. 40 Форматирование сводных таблиц ................................................................ 43 Пример для выполнения 9............................................................................. 43 Вычисление сальдо с помощью сводных таблиц ....................................... 45 Пример для выполнения 10........................................................................... 45 Тестирование .................................................................................................. 49 Построение диаграмм для сводных таблиц................................................. 50 Пример для выполнения 11........................................................................... 50 5. Анализ электронных таблиц с помощью сценария «Что – если» .......... 53 Анализ «Что – если» вручную ...................................................................... 53 Пример для выполнения 12........................................................................... 53 Пример для выполнения 13........................................................................... 54 Диспетчер сценариев ..................................................................................... 55 Пример для выполнения 14........................................................................... 55 Создание таблиц подстановки с одной ячейкой исходных данных ......... 57 Пример для выполнения 15........................................................................... 57 Пример для выполнения 16........................................................................... 58 Создание таблиц подстановки с двумя ячейками исходных данных ....... 61 Пример для выполнения 17........................................................................... 61 Пример для выполнения 18........................................................................... 62 6. Подбор параметра........................................................................................ 62 157 Подбор параметра для одной ячейки ........................................................... 63 Пример для выполнения 19........................................................................... 63 Пример для выполнения 20........................................................................... 64 7. Процедура поиска решения........................................................................ 65 Пример для выполнения 21........................................................................... 65 Пример для выполнения 22........................................................................... 68 Пример для выполнения 23 (транспортная задача).................................... 69 Пример для выполнения 24 (планирование расписания) .......................... 71 Пример для выполнения 25 (распределение ресурсов) ............................. 73 Часть 3 .................................................................................................................... 76 1. Введение в язык макрокоманд VBA............................................................ 76 Пример для выполнения 1............................................................................. 76 Модули ............................................................................................................ 77 Процедуры и функции................................................................................... 78 Пример для выполнения 2............................................................................. 78 Пример для выполнения 3............................................................................. 79 Ключевые слова ............................................................................................. 80 Область описания........................................................................................... 80 2. Объекты .......................................................................................................... 81 Просмотр объектов ........................................................................................ 81 Иерархия объектов......................................................................................... 81 Свойства объектов ......................................................................................... 83 Пример для выполнения 4............................................................................. 83 Методы объектов ........................................................................................... 85 Пример для выполнения 5............................................................................. 85 3. Описание переменных и область их использования ................................. 86 Пример для выполнения 6............................................................................. 86 Объявление простых переменных и констант ........................................... 87 Пример для выполнения 7............................................................................. 87 Объявление объектов..................................................................................... 88 Пример для выполнения 8............................................................................. 88 Пример для выполнения 9............................................................................. 89 Объявление массивов .................................................................................... 89 Пример для выполнения 10........................................................................... 89 Пример для выполнения 11........................................................................... 90 Пример для выполнения 12........................................................................... 90 Область использования переменных ........................................................... 91 Пример для выполнения 13........................................................................... 92 4. Аргументы в процедурах и функциях......................................................... 93 Пример для выполнения 14........................................................................... 93 Необязательные аргументы .......................................................................... 94 Пример для выполнения 15........................................................................... 94 Выполнение действий из функции............................................................... 96 Пример для выполнения 16........................................................................... 96 Передача массивов в качестве параметров ................................................. 97 158 Пример для выполнения 17........................................................................... 97 Параметры значения и параметры ссылки .................................................. 98 Пример для выполнения 18........................................................................... 98 Использование в VBA стандартных функций Excel .................................. 98 Пример для выполнения 19........................................................................... 99 5. Операторы VBA........................................................................................... 100 Оператор условия......................................................................................... 100 Пример для выполнения 20......................................................................... 100 Оператор выбора варианта.......................................................................... 101 Пример для выполнения 21......................................................................... 102 Цикл с предварительным условием ........................................................... 103 Пример для выполнения 22......................................................................... 103 Цикл с последующим условием ................................................................. 103 Пример для выполнения 23......................................................................... 104 Цикл с параметром....................................................................................... 104 Пример для выполнения 24......................................................................... 104 Цикл For Each … Next ................................................................................. 105 Пример для выполнения 25......................................................................... 105 Предварительный выход из функций и процедур.................................... 106 Вложенные структуры управления ............................................................ 106 Пример для выполнения 26......................................................................... 106 Пример для выполнения 27......................................................................... 106 Пример для выполнения 28......................................................................... 107 6. Специальные процедуры ............................................................................ 108 Пример для выполнения 29......................................................................... 108 Часть 4 .................................................................................................................. 111 1. Создание диалоговых окон пользователя ................................................. 111 Пример для выполнения 1........................................................................... 111 2. Использование визуальных компонентов................................................. 112 3. Компонент Button ........................................................................................ 113 Основные свойства кнопки ......................................................................... 113 Пример для выполнения 2........................................................................... 114 4. Компоненты Label и TextBox ..................................................................... 114 Пример для выполнения 3........................................................................... 115 5. Компоненты Frame и OptionButton............................................................ 117 Пример для выполнения 4........................................................................... 117 6. Компоненты ListBox и ComboBox............................................................. 120 События......................................................................................................... 120 Пример для выполнения 5........................................................................... 121 7. Компонент CheckBox .................................................................................. 123 Пример для выполнения 6........................................................................... 123 8. Компонент SpinButton................................................................................. 124 Пример для выполнения 7........................................................................... 124 9. Компонент MultiPage .................................................................................. 127 Пример для выполнения 8........................................................................... 127 159 10. Компонент Image ....................................................................................... 128 Пример для выполнения 9........................................................................... 128 11. Компонент ToggleButton........................................................................... 129 Пример для выполнения 10......................................................................... 129 12. Использование нескольких форм ............................................................ 131 Пример для выполнения 11......................................................................... 131 13. Использование дополнительных компонентов ...................................... 132 Пример для выполнения 12......................................................................... 132 14. Использование функций Excel................................................................. 135 Пример для выполнения 13......................................................................... 135 Приложение 1. Функции Excel .......................................................................... 137 1. Текстовые функции ..................................................................................... 137 2. Статистические функции............................................................................ 137 3. Математические функции .......................................................................... 141 4. Ссылки и массивы ....................................................................................... 143 5. Логические функции ................................................................................... 143 6. Проверка свойств и значений и информационные функции .................. 144 7. Финансовые функции.................................................................................. 144 8. Инженерные функции................................................................................. 147 9. Функции даты и времени............................................................................ 149 10. Функции баз данных ................................................................................. 149 Приложение 2. Функции VBA........................................................................... 150 1. Функции для работы с текстом .................................................................. 150 2. Функции для работы с числовыми данными............................................ 151 3. Функции для работы с датой и временем ................................................. 152 4. Функции – заменители синтаксических конструкций ............................ 152 5. Функции для работы с массивами ............................................................. 152 6. Файловые функции...................................................................................... 153 7. Прочие функции .......................................................................................... 154 160 Powered by TCPDF (www.tcpdf.org) Николай Валентинович БИЛЬФЕЛЬД, Мария Николаевна ФЕЛЬКЕР МЕТОДЫ MS EXCEL ДЛЯ РЕШЕНИЯ ИНЖЕНЕРНЫХ ЗАДАЧ Учебное пособие Издание второе, стереотипное Зав. редакцией литературы по информационным технологиям и системам связи О. Е. Гайнутдинова ЛР № 065466 от 21.10.97 Гигиенический сертификат 78.01.10.953.П.1028 от 14.04.2016 г., выдан ЦГСЭН в СПб Издательство «ЛАНЬ» [email protected]; www.lanbook.com 196105, СанктПетербург, пр. Ю. Гагарина, д. 1, лит. А. Тел./факс: (812) 3362509, 4129272. Бесплатный звонок по России: 88007004071 Подписано в печать 26.01.21. Бумага офсетная. Гарнитура Школьная. Формат 70×100 1/16. Печать офсетная. Усл. п. л. 13,33. Тираж 50 экз. Заказ № 11421. Отпечатано в полном соответствии с качеством предоставленного оригиналмакета в АО «Т8 Издательские Технологии». 109316, г. Москва, Волгоградский пр., д. 42, к. 5. Powered by TCPDF (www.tcpdf.org)