Microsoft Excel/Visual Basic for Applications в Excel/Переменные и константы. Арифметические и логические выражения

Введение править

Для того, чтобы войти в надстройку Visual Basic for Applications и использовать её, нажмите Alt+F11 (более универсальный вариант) или выберите команду Вид → Макросы (→ Макросы) → Создать. При этом в поле «Находится в» должно стоять значение «Эта книга» (текущая открытая книга) или «Название_имеющейся_книги», чтобы надстройка могла быть связана с данной книгой, используемой в настоящий момент.

Пусть мы создали макрос с именем My в книге Книга1. Появится окно редактирования и отладки программ, приведённое на рис. 3. В папке Modules мы увидем компонент Module1, в котором находится процедура My. Первоначально тело процедуры не заполнено и вся процедура выглядит так:

Sub my()

End Sub

Мы создали модуль Module1, содержащий процедуру My, который можно использовать в любой книге. Мы можем также создать модуль внутри данной книги. Для этого необходимо два раза нажать на меню «ЭтаКнига» («ThisWorkbook»). Создадим внутри книги процедуру Hello_World, которая выводит типичное для программистов сообщение «Hello World!» (по-русски — «Здравствуй, мир!») В поле General (Общая область) введём следующий код:

Sub Hello_World()
  MsgBox "Hello World!"
End Sub

Выполним программу. Для этого необходимо нажать клавишу F5 либо кнопку со стрелкой на панели инструментов Visual Basic. На экране мы увидим окно с надписью Hello World! и кнопкой ОК. Нажмём ОК — окно исчезнет, программа завершит свою работу и мы вернёмся в окно редактирования Visual Basic.

Переменные править

Ситуация с переменными в VBA похожа на ситуацию в языке программирования Pascal. Однако в Visual Basic, в отличие от Паскаля, можно не объявлять переменные до начала их использования в программе. VBA сам определяет тип переменной, когда встречает её в программе. Однако это не оптимальный вариант. Прежде всего, программа будет работать медленнее. Более того, если будет ошибка в имени переменной, то Visual Basic создаст новую переменную, а не выведет сообщение об ошибке. Для того чтобы нельзя было использовать переменных без их описания, мы должны в начало программы поместить оператор Option Explicit. Если после этого VBA обнаружит не объявленную ранее переменную, то на экран будет выведено сообщение «Variable not defined» («Переменная не определена»).

Описание переменных задаётся следующим образом: Dim <имя_переменной> As <тип_переменной>

Примеры:

Dim i As Integer
Dim S As String
Dim My_date As Date, num As Single

В примере 3 было объявление нескольких переменных в одной строке

Типы переменных править

  • Boolean (логический тип). Только два значения: True или False. 2 байта
  • Byte (байтовый). Целые числа в диапазоне от 0 до 255. 1 байт
  • Integer (целый). Целочисленные значения в диапазоне от -32768 до +32767. 2 байта
  • Long (длинное целое). Целочисленные значения в диапазоне от -2147483648 до +2147483647. 4 байта
  • Single (числа с плавающей точкой одинарной точности). Численные значения в диапазоне от -3,402823E+38 до +3,402823E+38. 4 байта
  • Double (числа с плавающей точкой двойной точности). Значения в диапазоне от -1,797693313486232D+308 до +1,797693313486232D+38. 8 байт
  • Currency (денежный). Денежные значения от -$922337203685477,5808 до $922337203685477,5808. 8 байт
  • Date/Time (дата/время). Значения даты и времени. Дата может находиться в диапазоне от 1 января 100 года до 31 декабря 9999 года. 8 байт
  • String (строковый). Строки, состоящие из 0-654000 алфавитно-цифровых символов. 1 байт на символ
  • Variant (общий). Для всех типов данных. 16 байт

Преобразование типов править

Для преобразования переменных одного типа в переменные другого типа есть набор функций с названиями, которые образуются следующим образом: (буква C — латинская)
C<полное или сокращённое имя типа>

Пример:

Dim N As Integer
Dim S As String
S = "42.66"
N = CInt(S)
MsgBox N

После выполнения данного кода на экран выведется число 42.

Таблица функций преобразования типов:

Cbool Преобразование к типу Boolean
CCur Преобразование к типу Currency
CDate Преобразование к типу Date
CLng Преобразование к типу Long
CDbl Преобразование к типу Double
CInt Преобразование к типу Integer
CSng Преобразование к типу Single
CStr Преобразование к типу String

Оператор присваивания. Арифметические и логические выражения править

Оператором присваивания в языке Visual Basic, как и во многих других языках, является знак = (равно), а не :=, как в языке Pascal.

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

+ сложение
вычитание
* умножение
/ деление
\ деление нацело
Mod целочисленный остаток от деления

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

Пример:

5 > 3 AND 7 < 10
NOT 6 > 5 AND 0 < 2 OR 7 <= 2

Значение первого выражения будет True, а второго — False.

Константы править

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

Общий вид описания констант: Const <имя константы> = <выражение>

Пример использования константы:

Const Pi = 3.1415926
Dim L As Double, Dim Rad As Double

L = 2*Pi*Rad

Visual Basic задаёт тип константы автоматически в зависимости от значения выражения. Если необходимо задать конкретный тип константы, то используется следующая структура:
Const <имя константы> As <имя типа> = <выражение>

Пример задания типа константы:

Const My_const As Byte = 100
Const My_date As Date = #01/01/2001#

Константы можно определять через константы, определённые ранее:

Const A = 20
Const B = A * 3

Операторы ввода и вывода править

Как уже упоминалось выше, MsgBox — процедура, которая используется для вывода информации на экран. Единственный параметр строкового типа — сообщение, которое необходимо вывести на экран. Тем не менее, если в качестве параметра указана переменная другого типа, то VBA сам преобразует её в тип строки. Нужно помнить, что процедура принимает ровно один параметр, то есть в процедуре MsgBox не может быть более одной переменной в списке вывода.

Чтобы вынести несколько переменных, их нужно преобразовать к строковому типу и объединить в одну строку путём конкатенации (сложения) строк. Для сложения строк мы можем использовать как знак &, так и знак +, как в языке Pascal.

Например, следующая процедура

Sub my()
  Dim A As String
  A = "Товар стоит " & 1000 & " рублей"
  MsgBox A
End Sub

выведет на экран текст «Товар стоит 1000 рублей».

Чтобы, наоборот, ввести информацию, мы можем использовать функцию InputBox(<текст>). В качестве параметра <текст> указывается строка — тот текст, который мы хотим видеть в окне ввода качестве подсказки.

Задачи править

Задача 1 править

С клавиатуры вводится число типа Double. Вычислить косинус данного числа в градусах и вывести ответ на экран в виде: Cos <число> градусов = <результат>. Например, при вводе числа 60 результат равняется 0.5. Для ввода константы Pi (Пи) воспользуетесь выражением: WorksheetFunction.Pi

Задача 2 править

С клавиатуры вводится целое четырёхзначное число. Найти сумму его цифр и вывести ответ в виде: Сумма цифр <число> равняется <результат>

Задача 3 править

С клавиатуры вводятся две строки. Вывести на экран слово False, если хотя бы одна из строк пустая, либо если первая строка больше второй, и слово True во всех остальных случаях.

Решение задач править

Задача 1 править

Задача 2 править

Задача 3 править