VBA(Visual Basic for Application)Заняие 1Занятие 2Независимо от используемой операционной системы и программных приложений пользователь часто выполняет одни и те же последовательности команд для многих рутинных задач. Вместо повторения последовательности команд каждый раз, когда необходимо выполнить какую-либо задачу, можно создать макрос (набор команд), который будет выполнять эту последовательность. Макросы позволяют вводить одиночную команду, выполняющую ту же задачу, для реализации которой было бы необходимо вводить несколько команд вручную. Записанные макрорекордером последовательности команд первоначально назывались макрокомандами. Сейчас этот термин сократился до более простого слова — макрос. Применительно к информатике и программным приложениям под словом макрос всегда подразумевается макрокоманда. Макрорекордер (или просто "рекордер") записывает все действия пользователя, включая ошибки и неправильные запуски. Когда программа воспроизводит макрос, она выполняет каждую записанную рекордером команду точно в такой последовательности, в которой она выполнялась во время записи. VBA(Visual Basic for Application) можно использовать для улучшения макросов, записанных макрорекордером, значительно повышая их мощь и возможности. С помощью VBA можно создавать пользовательские меню, диалоговые окна и панели инструментов.Занятие 1. Запись макроса в Excel.Пусть необходимо, чтобы макрос работал с любой выделенной ячейкой или диапазоном ячеек, поэтому стартовыми условиями для этого макроса являются открытая рабочая книга с выделенным диапазоном ячеек в активном рабочем листе. Запустите Excel. Откройте файл «Lesson1.xls». Задача: надо записать макрос, который выбирает полужирный шрифт Arial 12-го размера и применяет это форматирование к любой ячейке или диапазону ячеек текущего выделенного фрагмента. 1. Для запуска макрорекордера в Excel, назначения имени макросу, выбора места для сохранения нового макроса и выбора дополнительных опций надо выполнить следующее: Выбрать команду "Сервис-Макрос-Начать запись"; появится следующее диалоговое окно: В текстовом окне "Имя макроса" в качестве имени макроса ввести - ArialBold12. Такое имя позволит запомнить, что выполняет макрос; В поле "Описание" добавить следующий текст: Форматирует выделенные ячейки Arial, Bold, 12; Список "Сохранить в" следует использовать для выбора места, в котором будет сохранен записанный макрос. Доступными вариантами являются: "Личная книга макросов", "Новая книга", "Эта книга". Т.к. необходимо, чтобы этот макрос был доступен во всех рабочих книгах, надо выбрать "Личная книга макросов"; Если будущий макрос планируется использовать довольно часто, можно назначить для его запуска горячую клавишу; Для начала записи макроса необходимо нажать кнопку "ОК". Внимание: По умолчанию панель "Остановить запись" в Excel содержит две командные кнопки. Левая кнопка - кнопка "Стоп"; служит для завершения процесса записи макроса. Правая кнопка - кнопка "Относительная ссылка". По умолчанию Excel записывает абсолютные ссылки на ячейки в макросы. Если, например, начать запись в выделенной ячейке А5, а затем выделить ячейку справа от А5, т.е. В5, то записанный макрос также будет выделять ячейку В5.Если нажать кнопку "Относительная ссылка", Excel запишет относительную ссылку на ячейку каждый раз, когда выделяется какая-либо ячейка. Если выделенной в данный момент является ячейка А5 и выбирается ячейка справа от нее во время записи с относительными ссылками, то Excel записывает, что была выделена ячейка, находящаяся на 1 столбец и 0 строк правее от текущей выбранной ячейки. Когда макрос будет запущен, то он выделит ячейку, находящуюся непосредственно справа от активной ячейки.Вспомнить: что такое относительные и абсолютные ссылки!!!2. После этого макрорекордер необходимо остановить, нажав кнопку "Стоп" на панели "Остановить запись". Либо выбрать команду "Сервис-Макрос-Остановить запись".Наш новый макрос в Excel теперь закончен и готов к выполнению 3. Просмотр кода макроса. Выберите команду "Сервис-Макрос-Макросы", появится окошко со всеми записанными Вами макросами. Выберите нужный Вам макрос и нажмите кнопку «Изменить». Появится окно кода в редакторе Microsoft Visual Basic.4. Выполнение макроса.^ Первый способ: Выполните команду "Сервис-Макрос-Макросы" выберите свой макрос «Выделенный текст» и нажмите кнопку «Выполнить», не забывая при этом про стартовые условия.^ Второй способ: «Включите» на панели инструментов «Панель рисования», нарисуйте любую геометрическую фигуру, нажмите правую кнопку мыши и в контекстном меню выберите «Назначить макрос», выберите свой макрос и нажмите «ОК». Снимите фокус с Вашей геометрической фигуры, щелкнув на любой ячейке рабочего листа. Наведите опять курсор на фигуру, он примет форму руки — т.е. активен и готов к выполнению Ваш макрос.Задание: проделать вышеописанные действия и получить работающий макрос. Запускать его двумя способами.В макросе Excel использовать вставку системных функций (например Дата), изменение цвета, толщины границ ячеек.В Excel записать макрос, имитирующий Штамп, т.е., например:преобразовать код макроса таким образом, чтобы «печать» можно было поставить в любую активную ячейку (рамку можно не учитывать)Записать макрос копирующий с Листа на Лист.Занятие 2 Цель занятия: научиться редактировать макрос, записанный макрорекордером для получения самостоятельно работающей программы, выполняющей некоторые «разумные» действия. Сразу обращаю Ваше внимание, мы пока не занимаемся отловом ошибок, и предполагаем , для сегодняшнего занятия, что на листе записаны только числовые значения.Несколько слов об изучаемом языке. Во многих ситуациях макрорекордер очень удобен, но в реальной работе только им обойтись невозможно. Слишком много не умеет макрорекордер: он не умеет проверять значения, чтобы в зависимости от него выполнить какое-либо действие, не работает с циклами, не умеет перехватывать и обрабатывать ошибки. Макросы, которые созданы в макрорекордере, очень ограничены с функциональной точки зрения. Полностью возможности программирования в Office раскрываются при использовании редактора Visual Basic^ VBA (Visual Basic for Applications) — это диалект языка Visual Basic, расширяющий возможности Visual Basic и предназначенный для работы с приложениями Microsoft Office. Язык VBA встроен в приложения Office (и не только), и код на языке VBA можно хранить внутри документов приложений Office — документах Word, книгах Excel, презентациях PowerPoint и т.п. В настоящее время VBA встроен: — во все главные приложения MS Office — Word, Excel, Access, PowerPoint, Outlook, FrontPage, InfoPath; — в другие приложения Microsoft, например, Visio и M icrosoft Project; — в более чем 100 приложений третьих фирм, например, CorelDraw и CorelWordPerfect Office 2000, AutoCAD и т.п. ^ Редактор программного кода — это, по сути, обычный текстовый редактор, и в нем вы вполне можете вырезать и вставлять код, перетаскивать его, скопировать путем перетаскивания с нажатой клавишей — в вашем распоряжении почти все те же возможности, что и в редакторе Word. Однако он все-таки предназначен для специализированной задачи — создания кода программы. Прежде чем начать работать с редактором Visual Basic, нужно его открыть. Во всех приложениях Office это делается одинаково: самый простой способ: в меню Сервис выбрать Макрос -> Редактор Visual Basic; самый быстрый способ: нажать +; можно также воспользоваться кнопкой на панели инструментов Visual Basic (предварительно сделав ее видимой); можно вызвать редактор при возникновении ошибки в макросе; можно открыть готовый макрос на редактирование в диалоговом окне Макрос. VBA объектно-ориентированный язык. В редактор кода встроено множество средств, которые облегчают жизнь разработчику. Самое полезное средство — это получение списка свойств и методов объекта. Пользоваться им очень просто: если включен автоматический показ (он включен по умолчанию), достаточно впечатать имя объекта и за ним — точку. Получение список констант (то есть допустимых значений для данного свойства) также появляется автоматически после того, как вы впечатаете знак равенства (=).Переменная - это имя, которое программист дает области компьютерной памяти, используемой для хранения данных какого-либо типа. Для лучшего понимания переменной можно провести аналогию, скажем, с автоматической камерой хранения на вокзале. Ячейки камеры, как известно, пронумерованы - это "имя" переменной (в отличие от камеры хранения, мы можем сами присваивать определенное имя переменной). То, что лежит в ячейке камеры хранения - это значение переменной. Оно может меняться, но номер ячейки (имя переменной) остается одним и тем же. При выборе имени переменной необходимо соблюдать определенные правила, вот некоторые из них: Имя переменной должно начинаться с буквы алфавита; Имена переменных не могут содержать пробелы, точку или любой другой символ, который VBA использует для обозначения математических операций и операций сравнения; Имена переменных не могут превышать 255 символов; Следует отметить (на будущее), что при реальном программировании наиболее удобно пользоваться не этими стилями, а именами ячеек. Тогда работа с вашей ячейкой похожа на работу с обычной переменной. Для того, чтобы дать имя ячейке наведите на неё курсор. Выберите меню Вставка -> Имя -> Присвоить. Появится диалоговое окно, куда надо ввести имя и нажать кнопочку OK. После присваивания имени вы введите число в эту ячейку, а в другой создайте формулу, например =MyСell+10.Задание1. Записать макрорекордером макрос «Форматирование», который будет производить форматирование выделенных ячеек в числовой формат.2. Перейти в редактор VBA. «Макрос — Макросы — Изменить». Исправить код записанного макроса таким образом, чтобы форматирование применялось к любому выделенному фрагменту рабочего листа. Вспомните для этого объект Selection, который мы рассматривали в коде на первом занятии.^ Обратите внимание: Любая процедура начинается с ключевого слова Sub за которым следует имя Вашей процедуры и круглые скобки и заканчивается ключевыми словами End Sub. Между этими двумя строчками расположен код Вашей процедуры.3. Записать второй макрос (процедуру) непосредственно в редакторе Visual Basic. Это макрос будет осуществлять вызов диалогового окна для запроса действий от пользователя. В VBA для взаимодействия с пользователем предусмотрены VBA-процедуры: MsgBox — как функция для получения выбора от пользователя в ответ на сообщения или вопросы, которые отображает процедура (или проще говоря, вывод информации пользователю), InputBox — позволяет получать информацию от пользователя посредством диалоговых окон ввода. Откройте редактор VBA. «Сервис — Макрос — Редактор Visual Basic. Появиться окно редактора кода. Выполните команду “Insert — Modul”. Таким образом Вы добавите собственный макрос (модуль). Напишите следующий код в окне редактора: (то, что написано зеленым цветом писать не надо, это комментарии (пояснения) к Вашему коду). Sub wind() ‘объявляем переменную s типа String (строковая). Синтаксис объявления переменной всегда такой: Dim имя переменной As тип данных Dim s As String ‘ в переменную записываем значение которое пользователь введет в строку s = InputBox("Введите Вашу фамилию") ‘ Отвечаем пользователю ans =MsgBox ("Привет" & " " & s, vbYesNo)End Sub& — знак конкатенации (объединения строк), т.е. «Вася» & « » & «Иванов» это Вася Иванов. Обратите внимание — пробел тоже вручную включаем в строку. В приведенном примере результат возвращаемого функцией значения (какая кнопка нажата vbYes или vbNo будет записан в переменную ans (это будет число, соответствующее выбранной кнопке).^ Полный синтаксис функции MsgBox выглядит так:MsgBox(Текст[,кнопки] [,заголовок окна] [, файл справки, метка в файле справки]). Аргумент «Текст» или «Prompt» является обязательным, т. к. отображается в заголовке диалогового окна. У MsgBox() можно отображать разное кол-во кнопок (^ OK, Cancel, Abort, Retry, Ignore, Yes, No), и можно вводить реакцию пользователя на нажатие этих кнопок. (см. Таблицу). В нашем примере мы говорим, что в нашем диалоговом окне надо отобразить 2 кнопки: Yes и No.констАргументы-константы функции MsgBox Таблица 1 Константа Назначение vbAbortRetryIgnore Отображает командные кнопки Стоп, Повтор, Пропустить vbApplicationModal Для продолжения работы с приложением пользователь должен ответить на запрос диалогового окна. vbCritical Отображается окно с предупредительным значком критической ошибки. vbDefaultButton1vbDefaultButton2vbDefaultButton3vbDefaultButton4 Номер командной кнопки в диалоговом окне являющейся кнопкой по умолчанию. vbExclamation Желтый знак вопроса. Используется для отображения важной информации не требующей ответа. vbInformation Отображает значок информации. Используется для отображения справочной информации. vbMsgBoxHelpButton Добавляет к диалоговому окну кнопку Справка. При щелчке на этой кнопке открывается файл, который задан в аргументе HelpFile, в разделе, заданном аргументом Context. vbOKCancel Отображает кнопки ОК и Отмена. vbOKOnly Отображает только кнопку ОК - аналогична пропуску аргумента Buttons. vbQuestion Отображает значок вопроса. Используется когда надо задать пользователю какой-то важный вопрос. vbRetryCancel Отображает кнопки Повтор и Отмена. vbSystemModal Диалоговое окно всегда остается впереди других окон пока не будет закрыто. vbYesNo Отображает кнопки Да и Нет. vbYesNoCancel Отображает кнопки Да, Нет и Отмена. ^ Возвращаемые значения-константы функции MsgBox Таблица 2 Константа Назначение vbAbort Пользователь выбирает кнопку Стоп vbCancel Пользователь выбирает кнопку Отмена vbIgnore Пользователь выбирает кнопку Пропустить vbNo Пользователь выбирает кнопку Нет vbOK Пользователь выбирает кнопку ОК vbRetry Пользователь выбирает кнопку Повтор vbYes Пользователь выбирает кнопку Да Допишите в макрос строчку (перед словами End Sub): MsgBox (ans)Запустите макрос, проверьте его работу. ================================================================^ Занятие 3 Операторы ветвленияВведем реакцию на нажатие кнопок диалогового окна. Для этого необходим оператор ветвления, его синтаксис следующий: (ключевые слова написаны синим цветом): If условие Then действия ElseIf условие Then действия Else действия End If Если заданное условие истинно, то выполняются действия, следующие за оператором Then , если ложно то — те, что после Else. Оператор ElseIf задает множественное ветвление. Если у Вас всего два варианта выбора, то этот оператор не обязателен. Оператор ElseIf задает множественное ветвление. Если у Вас всего два варианта выбора, то этот оператор не обязателен.Пример: If 4 >2 Then MsgBox(“Yes!!!”) Else MsgBox(“No!!!”) End If Естественно, что если Вы запустите этот код на исполнение , то выполнятся будет всегда первое действие.Пример реакции на действия пользователя (вместо многоточия Вы сами должны что-то написать): ….. sstr=MsgBox(“Hello выполнить сложение?”, vbYesNo) If sstr = vbYes Then MsgBox (a+b) Else MsgBox ("Ничего не сделано!!!") End If ……..Количество ветвлений, т.е. конструкций If условие Then действия ElseIf условие Then действия Else действия End Ifкак мы и рассматривали на занятии может быть любым.Задание 1. Создайте новый модуль. Назвать можно так, как Вам хочется. Пропишите в нем следующие действия: — вызов диалогового окна InputBox с предложением ввести в окно какое арифметическое действие Вы хотите произвести, например: — Ответ — MsgBox с несколькими кнопками, например: далее — в коде реакция на нажатие определенной кнопки: ……… Для того, чтобы выбрать какие кнопки будут отображаться и какая на них будет реакция см. таблицы 1 и 2.2. — вызов диалогового окна InputBox с предложением ввести в окно какое-то число — вызов другого диалогового окна InputBox с предложением ввести в окно какое-то число — используя оператор ветвления: 1. сравнить введенные два числа Внимание! когда Вы пишите s = InputBox("…….") в переменную s записываются данные типа String , с которыми Вы не можете производить никаких арифметических действий. Чтобы Вы могли работать с данными как с числами их надо привести к определенному типу. Делается это с помощью встроенных функций языка, будем пользоваться функциями CInt (приводит к целому) CDbl (приводит к вещественному). Т.е. чтобы в переменной s оказалось целое число надо написать: s = CInt( InputBox("…….")) а чтобы вещественное s = CDbl ( InputBox("…….")) 2. Разделить большее на меньшее 3. Выдать MsgBox с результатом. 4. Попробуйте провести операцию сложения без приведения типов данных. 5. Мини задача: Объем карты памяти …… — задаете сами через диалоговое окно объем одной фотографии….. — аналогично, вопрос сколько фотографий поместится на карту? Напишите соответствующую программу.^ Внимание!!! Все программы пока запускаем кнопкой с листа.Занятие 41. Повторение пройденного.Уже изучены следующие синтаксические конструкции языка: Синтаксис Пример или описание Ветвление If условие Then действияElse действия End If Если заданное условие истинно, то выполняются действия, следующие за оператором Then , если ложно то — те, что после Else. Множественное ветвление If условие Then действия ElseIf условие Then действияElse действия End If Если заданное условие истинно, то выполняются действия, следующие за оператором Then , если ложно то — те, что после ElseIf и в конце концов то, что после Else. Объявление переменных Dim имя переменной As тип данных ^ Объявляем переменную строкового типа: Dim s As String типа дата:Dim str As Dateцелого типа:Dim tr As Integerтипа «ячейка»:Dim rng As Range Диалоговые окна InputBox MsgBox В переменную записывается значение, введенное пользователем в диалоговое окно: s = InputBox("Введите Вашу фамилию")В переменную записывается значение того, какая кнопка выбрана в диалоговом окне: ans = MsgBox(“Yes!!!”, vbYesNo)или просто «ответ» без кнопок. Конкатенация & — знак конкатенации (объединения строк) «Вася» & « » & «Иванов» это Вася Иванов. ^ Новое в теории: понятие «метка», оператор GoTo, свойство Offset, понятие Exit Sub — выход из процедуры, работа с листами рабочей книги.1. Организуем «учет» спортсменов на соревновании: вводите в диалоговое окно массу спортсмена, получаете ответ, к какой весовой категории он относится, далее следующее диалоговое окно с вопросом продолжать ли опрос и т. д. Вам потребуется логическая операция объединения: неравенство 0 0 And s Пишите код множественного ветвления: если масса спортсмена 0 если масса спортсмена 100 если масса спортсмена 130 если масса спортсмена 160 и все время спрашиваете, продолжать ли опрос. Для этого нам понадобятся понятия «метка» и оператора GoTo . Оператор GoTo — это оператор безусловного перехода, когда ход выполнения программы без проверки каких-либо условий перепрыгивает на метку в коде. Пример применения GoTo может выглядеть так:GoTo EngineNotStarted … EngineNotStarted : MsgBox "Едем на метро" … или… 5 : MsgBox "Едем на метро" …GoTo 5 EngineNotStarted: , 5:— это метки (место куда перейти, какой-то адрес в программном коде). Для них используется имя (выбираемое по правилам назначения имен для переменных), которое оканчивается на двоеточие. Иногда использование GoTo очень удобно — например, когда нам нужно добиваться от пользователя ввода правильного значения неизвестное число раз. Однако использование GoTo категорически не рекомендуется, потому что код становится трудночитаемым. Ваш код при использовании метки будет выглядеть так: ……….код 5: ……….код tr = MsgBox("Long?", vbYesNo)If tr = vbYes ThenGoTo 5 Else Exit Sub End If …………….2. ^ Внесем некоторое усовершенствование в код, так, чтобы создаваемый список записывался на рабочий лист нашей книги. — Для этого нам понадобится свойство Offset. Свойство Offset возвращает объект Range. Offset применяется только к объекту Range и ни к какому другому. Данное свойство использует единственный синтаксис: объект.Offset(сдвиг_строки, сдвиг_столбца) Два аргумента свойства Offset соответствуют смешению относительно левой верхней ячейки указанного диапазона Range. Эти аргументы могут быть положительными (сдвиг вниз или вправо), отрицательными (вверх или влево) или нулевыми. В приведенном ниже примере значение 12 вводится в ячейку, которая находится под активной ячейкой: ActiveCell.Offset(l,0).Value = 12. Напишите новую процедуру «Сдвиг», для того, чтобы понять работу свойства Offset: например:Sub sdvig() s = CInt(InputBox("Enter number")) ActiveCell.Value = s ActiveCell.Offset(0, 1).Activate ActiveCell.Value = s + 1 ActiveCell.Offset(1, 1).Activate ActiveCell.Value = s + 2 ActiveCell.Offset(1, -1).Activate ActiveCell.Value = s + 3 End SubЗапустите код на выполнение, объясните результат.Задание Дополнить код таким образом, чтобы в одном столбце печаталась фамилия, в другом введенный вес, в третьем категория.Занятие 5Конструкция Select CaseКонструкция ^ Select Case является альтернативой конструкции If . . . Then . . . Else в случае выполнения блока, состоящего из большого набора операторов. Конструкция Select Case предоставляет возможность, похожую на возможность конструкции If . . . Then . . . Else, но в отличие от нее она делает код более читаемым при наличии нескольких вариантов выбора. Конструкция Select Case работает с единственным проверяемым выражением, которое вычисляется один раз при входе в эту конструкцию. Затем VBA сравнивает полученный результат со значениями, задаваемыми в операторах Case конструкции. Если найдено совпадение, выполняется блок операторов, ассоциированный с оператором Case: Синтаксис:Select Case проверяемое_выражение Case список_выражений1 [блок_операторов1] Case список_выражений2 [блок_операторов2] . . . Case Else [блок_операторовn] End SelectРазберем это на примере. Добавьте в свой проект новый модуль.Sub menu() sstr = InputBox("Введите одно из названий времен года") Select Case sstr Case "лето" MsgBox ("Каникулы!!!") Case "весна" MsgBox ("Все цветет") Case "осень" MsgBox ("Уналая пора...") Case Else MsgBox ("Ух, холодно!!!") End Select End SubЗапустите процедуру на выполнение.Если Вы хотите использовать операторы сравнения в этой конструкции, то синтаксис будет следующий:Select Case sstr Case Is ….. Case Is>100 …. Case Else ……….. End Select т.е. используем ключевое слово Is в качестве объекта, описывающего, что сравниваем.или можно так: ….. Case 0 To 5 …… при использовании диапазона (0 To 5) включаются и границы диапазона (в данном случае 0 и 5). или ….. Case 4,6,1 ….. т.е. разделяя критерии для сравнения запятыми.Цикл For …. NextЦиклы позволяют выполнить одну или несколько строк кода несколько раз. Когда число повторений известно заранее, используют цикл For …… Next. ^ Синтаксис следующий:For x = k To N Step ….……действия…….Next Объяснения: для х начиная с k до N с шагом … (по умолчанию шаг равен 1 и слово Step можно не писать), шаг это число на которое будет увеличиваться х при каждом проходе цикла (итерации), выполняйте следующие действия …., и так до тех пор, пока значение х не станет равным N. х — счетчик цикла, шаг цикла может быть как положительным, так и отрицательным. k, N значения начала и конца цикла.Объекты VBA: рабочая книга и рабочий лист Workbooks(«book»).Activate Worksheets(«sheet»).Activate Для тог, чтобы получить номер строки и столбца активной ячейки надо воспользоваться следующими формулами:r = ActiveCell.Row 'строка cn = ActiveCell.Column 'столбецПример использования цикла For …… NextSub Lists() Workbooks(«book»).Activate ‘считаем количество листов в рабочей книге n = Worksheets.Count ‘в цикле идем по всем листам, активируем их по очереди и в ячейку A1 на каждом ‘листе пишем значение х при данном шаге цикла For x = 1 To n Worksheets(x).Activate Range("A1") = x Next x End Sub^ Итак, краткие итого по теме занятия: book = Application.ActiveWorkbook.Name Записываем в переменную имя активной рабочей книги sheet = Application.ActiveSheet.Name Записываем в переменную имя активного рабочего листа Worksheets.Add Добавляем лист в рабочую книгу ActiveSheet.Name = "MyList" Даем имя активному рабочему листу (переименование аналогично, см. выше) Worksheets("Лист1").Activate Активируем рабочий Лист с определенным именем n= Worksheets.Count Считаем количество листов в книге Worksheets("Лист1").Delete Удаляем лист с определенным именем ThisWorkbook.SaveAs ("prov.xls")ThisWorkbook.Save Сохранение рабочей книги как prov.xlsСохранение рабочей книги For x = k To N Step ….……действия…….Next Цикл For …. Next ЗаданиеНаписать процедуру, о заполнении списка спортсменов, но добавить: Подсчет листов в книге Заполнение списка организовать с помощью конструкции Select Case3. Вы работаете в туристическом агентстве. Вам необходимо ежедневно заполнять таблицу, в которой по горизонтали будет стоять продолжительность экскурсии, по вертикали — стоимость за час, а сама таблица будет автоматически заполняться: стоимость за час — …, продолжительность — …., экскурсия стоит — ….. Пусть все величины дискретны, т.е. Вы запрашиваете максимальную продолжительность — это будет конец цикла, минимальную продолжительность — это будет начало цикла и шаг, и аналогично, максимальную и минимальную стоимость. Подсказка (разбор кода) здесь.Занятие 6Массивы Индексный массив (в некоторых языках программирования также таблица, ряд) — именованный набор однотипных переменных, расположенных в памяти непосредственно друг за другом (в отличие от списка), доступ к которым осуществляется по индексу.Массив — это объект данных, в котором хранится несколько единиц данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа. Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.ОдномерныеОбъявление массиаDim неделя (1 To 7) – одномерный массив неделя состоит из семи элементов типа Variant;Dim Группа (1 To 25) As String – для одномерного массива Группа резервируется 25 строк переменной длины;Пример простой инициализации массива:Sub weeks()Dim w(1 To 7) As Stringw(1) = "понедельник"w(2) = "вторник"w(3) = "среда"w(4) = "четверг"w(5) = "пятница"w(6) = "суббота"w(7) = "воскресенье"MsgBox w(2)End SubСамостоятельно: Измените этот код таким образом (введите цикл), чтобы по значению (например "понедельник") выдавался номер элемента массива.^ Инициализация массива в цикле, вывод значений в диалоговое окноSub Massiv()'объявлениеDim Arr(5) As Integer'Dim Arr(5) As Single'вычисляем нижнюю и верхнюю границы массиваk = LBound(Arr)n = UBound(Arr)Randomized = ""'MsgBox (k)'MsgBox (n)For i = k To nArr(i) = Rnd()'выводим массив в строковую переменнуюd = d + CStr(Arr(i)) + Chr(13)Next i'выводим массив в диалоговом окнеMsgBox (Chr(13) & d)End SubОбратите внимание!!! При объявлении массива ^ Arr(5) мы получаем массив из 6 строк. СамостоятельноВывести массив на рабочий лист. Пользоваться получением номеров строки и столбца активной ячейки^ Двумерный массивОбъявление:Dim A(20,10) As Integer – двумерный массив целых чисел, составленный из 20 строк по 10 элементов в каждом;Dim Mult (0 To 5, 0 To 7) As Integer - двумерный статический массив целых чисел, включающий 6*8=48 элементов.'вычисляем нижнюю и верхнюю границы массива по каждой из размерностей (строки, столбцы)k = LBound(Mult, 1)k1 = UBound(Mult, 1)n = LBound(Mult, 2)n1 = UBound(Mult, 2)^ Инициализация в цикле двумерного массива:Sub exampl()Dim Ar(5, 7) As SingleDim i, j As IntegerFor i = 0 To 5 For j = 0 To 7 Ar(i, j) = InputBox(i & "," & j) Next jNext iEnd Sub^ Вывод двумерного массива на рабочий лист.Sub test()Dim arr(2, 2) As Integern = ActiveCell.Rowk = ActiveCell.ColumnFor i = LBound(arr, 1) To UBound(arr, 1) For j = LBound(arr, 2) To UBound(arr, 2) arr(i, j) = i * j + 12 Cells(n, k) = arr(i, j) n = n + 1 Next jNext iEnd Sub^ Можно прямо в коде программы изменять размерность массива. Для этого используется ключевое слово ReDim.Ссылки по теме:http://vtit.kuzstu.ru/books/shelf/189/doc/chapter_1.htmlhttp://www.on-line-teaching.com/vba/lsn0121.htmlhttp://vtit.kuzstu.ru/books/shelf/189/doc/chapter_2.htmlhttp://gera01.narod.ru/TiutorVBA.htm#Bookmark1Занятие 7. Неопределенные циклыСуществуют два основных способа создания неопределенного цикла. Можно построить цикл так, что VBA будет тестировать некоторое условие (детерминант цикла) либо перед выполнением цикла, либо - после выполнения цикла.2.1.Цикл Do .. While Конструкция цикла, тестирующая свое условие детерминанта до выполнения цикла. Синтаксис: Do While Condition Statements LoopCondition - логическое выражение для детерминанта циклаStatements - один, ни одного или несколько операторов, которые составляют тело циклаLoop - ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла для проверки условияVBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно True. При выполнении цикла Do While сначала тестируется логическое выражение (Condition); если оно равно ^ True - выполняется тело цикла. При достижении ключевого слова Loop управление опять передается в начало цикла и снова проверяется логическое выражение. Так прои