Основные понятия. Величина – отдельный информационный объект, который имеет имя, значение и тип. Величины бывают постоянные и переменные.
Постоянная величина (константа) не изменяет своего значения в ходе выполнения алгоритма. Использование констант делает программы легче читаемыми и позволяет проще вносить изменения: отпадает необходимость многократно исправлять значения по тексту программы, т.к. достаточно ввести новое значение при определении константы.
Переменная величина ( или просто переменная) может изменять значение в ходе выполнения алгоритма. Переменные задаются именами, которые определяют области памяти, в которых хранятся значения. Значениями переменных могут быть данные различных типов.
Тип данных определяет множество допустимых значений, которое может принимать величина, и множество действий, которые можно выполнить с этой величиной. Основные типы данных в VBA представлены в таблице 2. Обозначения типов данных является ключевыми словами языка (и выделяется после набора в редакторе VBA).
Таблица 2 – Основные типы данных в VBA
Тип данных | Диапазон значений |
Byte (байт) | От 0 до 255 |
Boolean (логический) | True или False |
Integer (целое число) | От -32 768 до 32 767 |
Long (длинное целое число) | От -2147483648 до 2147483647 |
Single (число с плавающей запятой обычной точности) | От -3.402823Е38 до-1,401 298Е-45 - для отрицательных значений; от 1.401298Е-45 до 3,402823Е38 - для положительных значений |
Double (число с плавающей запятой двойной точности) | От -1,7976931 3486232Е308 до -4,94065645841 247Е-324 для отрицательных значений; от 4,94065645841 247Е-324 до 1, 7976931 3486232Е308 для положительных значений |
Date (даты и время) | от 01. 01. 100 до 31. 12.9999 |
String (строка переменной длины) | От 0 до приблизительно 2 миллиардов |
String (строка постоянной длины) | От 1 до приблизительно 65400 |
Variant | Variant может хранить любой тип данных. Если переменная не объявлена явно, то ей присваивается тип Variant. |
Выражение – это запись, определяющая последовательность действий над величинами. Выражение может содержать константы, переменные, знаки операций, функции.
Операнд – это аргумент операции. Например, если вы к двум прибавляете три, то выражение будет выглядеть так 2 + 3, где плюс – это операция, а числа её аргументы, т.е. операнды.
В VBA имеются три основных типа операций:
· математические, выполняются над числами, их результатом являются числа;
· операции отношения, могут применяться не только к числам, их результатом является значения логического типа;
· логические, используются в логических выражениях и их результатом являются логические значения.
Операции VBA представлены в таблицах 3-6.
Таблица 3 – Математические операции
[Операнд 1]+ [Операнд 2] | Сложение |
[Операнд 1]- [Операнд 2] | Вычитание |
-[Операнд] | Перемена знака |
[Операнд 1]* [Операнд 2] | Умножение |
[Операнд 1]/ [Операнд 2] | Деление |
[Операнд 1] \[Операнд 2] | Целочисленное деление |
[Операнд 1 Mod [Операнд 2] | Остаток от деления по модулю |
[Операнд 1] ^[Операнд 2] | Возведение в степень |
Таблица 4 – Операции отношения
[Операнд 1] < [Операнд 2] | Меньше |
[Операнд 1] > [Операнд 2] | Больше |
[Операнд 1] <= [Операнд 2] | Меньше или равно |
[Операнд 1] >=[Операнд 2] | Больше или равно |
[Операнд 1] <> [Операнд 2] | Не равно |
[Операнд 1] = [Операнд 2] | Равно |
Таблица 5 – Логические операции
[Операнд 1] And [Операнд 2] | (И) логическое умножение |
[Операнд 1] Or [Операнд 2] | (Или) логическое сложение |
Not [Операнд] | Логическое отрицание |
Таблица 6 – Другие операции
[Строка 1] & [Строка 2] [Строка 1] + [Строка 2], | Конкатенация (сложение) строк. |
Решение любой задачи имеет три части:
1.) ввод данных;
2.) обработка данных;
3.) вывод результата.
Команда ввода – команда, по которой значения переменных задаются через устройства ввода (например, клавиатуру).
Команда вывода – команда, по которой значение величины отражается на устройстве вывода компьютера (например, на экран дисплея).
Обработка данных может включать команды присваивания, ветвления и цикла.
Запуск редактора Visual Basic можно осуществить одним из следующих способов:
• на вкладке Разработчик в группе Код нажмите кнопку Visual Basic.
• используйте сочетание клавиш ALT + F11.
В результате вы попадаете в интегрированную среду разработки приложений редактора Visual Basic. Интерфейс редактора VBA состоит из следующих основных компонентов: окно проекта, окно свойств, окно редактирования кода, окна форм, меню и панели инструментов (рисунок 5).
В окне проекта представлена иерархическая структура файлов форм и модулей текущего проекта. В проекте автоматически создается модуль для каждого рабочего листа и для всей книги. Кроме того, модули создаются для каждой пользовательской формы макросов и классов.
В окне проекта выводится проект всех открытых рабочих книг. Это позволяет легко копировать формы и коды из одного проекта в другой, что ускоряет процесс создания новых приложений.
В окне свойств перечисляются основные установки свойств выбранной формы или элемента управления. Используя это окно, можно просматривать свойства и изменять их установки. Для просмотра свойств выбранного объекта надо либо щелкнуть кнопку Окно свойств, либо выбрать команду Вид/ Окно свойств (View/Property Window).
Программа (код программы) записывается в окне кода. Окно кода используется при написании любой программы VBA, будь это код макроса, запуск которого осуществляется при нажатии кнопки в созданной пользователем форме, или подпрограмма. Код программы вводится непосредственно в окно кода, так же как текст в любом текстовом редакторе.
Для того чтобы получить окно модуля, необходимо выполнить следующие действия: Вставка / Модуль(Insert / Module).
Рисунок 5 – Редактор Visual Basic
Описание переменных. Для того чтобы начать оперировать с любой величиной (постоянной или переменной) ее необходимо соответствующим образом описать. Важно, чтобы не только разработчик программы понимал, величины какого типа используются в программе, но и исполнитель программы (компьютер), т.к. если компьютер не будет знать, величина какого типа используется в программе, он будет считать ее величиной универсального типа Variant и отведет для ее хранения в памяти 16 и более ячеек. Это будет приводить к неэффективному использованию памяти и замедлению работы программы.
Блок описания переменных имеет следующий синтаксис:
Dim <Имя> [As <Тип>]
Здесь Dim и As – ключевые слова VBA;
<Имя> – имя переменной, удовлетворяющее стандартным правилам именования переменных;
<Тип> – тип данных переменной (см. таблицу 2).
Примеры
1. Dim N As Integer – инструкция описывает переменную N типа Integer.
2. Можно объявить сразу несколько переменных:
Dim Строка As String, Число As Single – инструкция описывает переменную Строка типа String, переменную Число типа Single.
3. Dim K1, K2 As Integer – инструкция описывает переменную K2 типа Integer, переменную K1, тип которой не задан (по умолчанию будет приписан тип Variant).
Организация ввода-вывода. Ввод и вывод данных в VBA может выполняться несколькими способами: с листа Excel, с помощью диалоговых окон, с помощью пользовательской формы.
Для ввода данных с листа или вывода на лист используется объект Worksheets и его методы Range или Cells.
Метод Range использует в качестве аргументов одну или две ссылки на ячейки и возвращают объект Range. Ссылки на ячейки должны быть оформлены в стиле А1 (колонка-буква – строка-число). Ссылка на единичную ячейку, использованная в качестве аргумента, возвращает объект Range для единичной ячейки. Две ссылки на единичные ячейки возвращают объект Range для прямоугольной области, заключенной между этими двумя ячейками. Примеры ввода данных с листа и вывода их на лист представлены в таблице 7.
Таблица 7 – Метод Rangeдля ввода-вывода данных
X = Worksheets(“Лист1”).Range(“B1”).Value | Присваиваем переменной Х значение ячейки B1 листа Лист1. |
Worksheets(“Лист1”).Range(“B1”).Value = Х | Выводим в ячейку B1 листа Лист1 значение переменной Х |
Worksheets(“Лист1”).Range(“C1”,”D6”).Value = 2 | Выводим в ячейки C1 и D6 листа Лист1 число 2 |
Worksheets(“Лист1”).Range(“В7:С9”).Value = 3 | Выводим в диапазон ячеек “В7:С9” листа Лист1 число 3 |
Метод Cells, получая в качестве аргументов два целых числа, возвращают объект, содержащий единичную ячейку. Аргументы определяют номера строки и столбца выбранной ячейки. Примеры ввода-вывода данных на лист представлены в таблице 8.
Таблица 8 – Метод Cellsдля ввода-вывода данных
A=Worksheets(1).Cells(1,2).Value | Переменной А присвоено значение из ячейки первой строки и второго столбца первого листа. |
Worksheets(1).Cells(2,2).Value= Х | В ячейку второй строки и второго столбца заносится значение переменной Х |
Для ввода данных с клавиатуры используется окно ввода InputBox (рисунок 6), а для вывода информации на экран – окно сообщений MsgBox (рисунок 7-8).
Функция InputBox выводит на экран диалоговое окно, содержащее сообщение, поле ввода и две кнопки OK и Cancel.
Устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем: при нажатии на кнопку OK, возвращает значение типа string, содержащее текст, введенный в поле ввода, а при нажатии кнопки Cancel возвращается пустая строка.
Синтаксис:
InputBox (prompt [, title] [, default])
Аргументы:
· prompt – обязательный параметр. Любое строковое выражение, отображаемое как сообщение в диалоговом окне. Строковое значение prompt может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (Сhr(13)), символа перевода строки (chr (10)) или комбинацию этих символов (Chr(13) & Chr (10));
· title – Необязательный параметр. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения;
· default – Необязательный параметр. Строковое выражение, отображаемое в поле ввода как используемое по умолчанию, если пользователь не введет другую строку. Если этот аргумент опущен, поле ввода изображается пустым.
Пример
Имя =CDbl(InputBox(“Введите Ваше имя”, “Пример окна ввода”))
На экране появится окно (рисунок 6).
Рисунок 6 – Пример окна ввода
Переменной Имя будет присвоено значение типа Double, введенное пользователем.
Процедура MsgBox выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа integer, указывающее, какая кнопка была нажата.
Синтаксис:
MsgBox (prompt [, buttons] [, title])
Аргументы:
· prompt – Обязательный параметр. Строковое выражение, отображаемое как сообщение в диалоговом окне;
· buttons – Необязательный параметр. Числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка и основную кнопку. Значение по умолчанию этого аргумента равняется 0;
· title – Необязательный параметр. Строковое выражение, отображаемое в строке, заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения.
Пример
N = MsgBox (“Значение переменной Х=” & X & Chr(10) & “Продолжить вычисления?”, VbYesNo, “Пример окна MsgBox”)
Если к моменту выполнения данного оператора переменная Х равнялась числу 2,14587895, то на экране появится следующее окно
Рисунок 7 – Пример окна вывода
Часто процедура MsgBox используется в «минимальном» варианте - только для вывода сообщения, с одной кнопкой – OK. В этом случае аргументы не берутся в скобки.
Пример
MsgBox “Значение переменной Х=” & X
Рисунок 8 – Пример окна вывода
Операторы
Оператор присваивания (=) позволяет задать (присвоить) переменной значение другой переменной, выражения или объекта.
Синтаксис: < переменная > = < выражение >
Порядок выполнения: вычисляется значение < выражения > и присваивается полученное значение < переменной > (вычисляется значение выражения, стоящего справа от знака присваивания, и присваивается переменной, стоящей слева от знака присваивания).
Изображение оператора присваивания на блок-схеме показано на рисунке 9.
![]() |
Рисунок 9 – Изображение на блок-схеме оператора присваивания
Условный оператор позволяет выбирать и выполнять действия в зависимости от истинности некоторого условия.
Условный оператор имеет два варианта синтаксиса:
a) однострочная форма записи условного оператора:
If < условие > Then [ <операторы 1> ] [Else [< операторы 2 >] ];
б)блочная форма записи условного оператора:
If < условие 1 > Then
[ <операторы 1> ]
...
[ ElseIf <условие n> Then
[ <операторы n> ]…
[ Else ]
[< ИначеОператоры >]]
End If.
Порядок выполнения: вычисляется значение <условие>. Оно может принимать значения TRUE (Истина) или FALSE (Ложь). Если <условие> принимает значение TRUE, то выполняются [< операторы 1 >] (операторы ветки Then), в противном случае - [ <операторы 2> ] (операторы ветки Else).
Изображение условного оператора на блок-схеме показано на рисунке 10.
Рисунок 10 – Изображение на блок-схеме условного оператора
Оператор цикла For позволяет повторять группу операторов заданное число раз.
Синтаксис: For <счётчик_цикла> = <начало> To <конец> [ Step <шаг>]
<тело цикла>
[ Exit For ]
...
Next [<счётчик_цикла>],
где <счётчик_цикла> — числовая переменная;
<начало> - начальное значение (выражение) переменной <счётчик_цикла>;
<конец> - заключительное значение (выражение) переменной <счётчик_цикла>;
<тело цикла>- это последовательность операторов, которая будет выполнена заданное число раз.
Порядок выполнения: переменной <счётчик_цикла> присваивается значение <начало> и проверяется условие: <начало > £ <конец >; если условие неверно, то <тело цикла > не выполняется и управление передается на оператор, следующий за Next. Если же условие выполняется, то выполняется <тело цикла>, затем значение <счётчик_цикла > изменяется на значение <шаг > (увеличится в случае положительного значения <шаг >, и уменьшается при отрицательном значении <шаг >). Данный процесс будет выполняться, пока значение <счётчик_цикла > не достигнет значения <конец >. Досрочно завершить цикл For…Next можно и с помощью оператора Exit For. Такие операторы могут быть расположены в тех местах тела цикла, где требуется из него выйти, не дожидаясь выполнения условия завершения.
![]() |
Изображение оператора цикла на блок-схемах показано на рисунке 11.
Рисунок 11 –Изображение на блок схеме оператора цикла
Массив – совокупность однотипных элементов данных (чисел, логических данных, символов), которой при обработке присвоено определенное имя. Массивы бывают статические и динамические. Статическими называются массивы, количество элементов в которых заранее известно и не изменяется в ходе выполнения программы. Динамические массивы – массивы, в которых либо не известно начальное количество элементов, либо размерность массива (количество элементов) изменяется при выполнении программы.
Описание массивов:
1) одномерный статический массив
Dim <имя массива> ( <начальное значение индекса > To <конечное значение индекса> ) [ As <тип элементов массива >]
или
Dim <имя массива> ( <количество элементов массива > ) [ As <тип элементов массива >];
2) двумерный статический массив
Dim <имя массива > ( <начальное значение индекса по строкам> To <конечное значение индекса по строкам >, < начальное значение индекса по столбцам > To < конечное значение индекса по столбцам> ) [ As <тип элементов массива> ]
или
Dim <имя массива> ( <количество строк>, <количество столбцов> ) [ As <тип элементов массива>].
Первый способ отличается от второго тем, что в первом случае указывается индекс первого и последнего элементов, во втором же – только количество элементов, нумерация которых может начинаться как с 0, так и с 1. Это зависит от опции Base (задает базовый индекс). Если опция не указана, то нумерация элементов массива начинается с нуля. Для изменения базового индекса в начале листа модуля необходимо написать Option Base 1.
Пример
а) Dim А(1 To 10) As Integer – массив А состоит из 10 элементов целого типа, индексы которых 1, 2, …, 10;
б) Dim А(10) As Integer – массив состоит из 10 значений целого типа. Индексация зависит от опции Base. Если опция не указана, то номера элементов - от 0 до 9, если же указана (т.е. вначале модуля записано Option Base 1), то номера элементов изменяются от 1 до 10;
3) динамический массив:
Dim <имя массива> () [ As <тип элементов массива>].
После определения количества элементов массива выполняется его переопределение:
ReDim <имя массива> ( <задается размерность массива (одномерного/двумерного > ).
Пример
Dim А() As Single–динамический массив А вещественных элементов
n=7
ReDim A(1 To n) – переопределение одномерного массива из n значений
ReDim A(5,n) – переопределение двумерного динамического массива, состоящего из 5 сток и n столбцов (начало индексации элементов определяется по опции Base)
Обращение к элементу массива осуществляется следующим образом: указывается имя массива, а затем в круглых скобках указывается номер элемента в массиве. Если массив двумерный – указывается вначале номер строки, затем через запятую номер столбца.