Лабораторная работа № 1. Работа с величинами
Теоретические сведения
Величина – отдельный информационный объект, который имеет имя, значение и тип.
Величины бывают постоянные и переменные.
Постоянная величина (константа) не изменяет своего значения в ходе выполнения алгоритма. Использование констант делает программы легче читаемыми и позволяет проще вносить изменения: отпадает необходимость многократно исправлять значения по тексту программы, т.к. достаточно ввести новое значение при определении константы.
Переменная величина (или просто переменная) может изменять значение в ходе выполнения алгоритма. Переменные задаются именами, которые определяют области памяти, в которых хранятся значения. Значениями переменных могут быть данные различных типов.
Тип данных относят к самым фундаментальным понятиям любого языка программирования. Тип данных определяет множество допустимых значений, которое может принимать величина, и множество действий, которые можно выполнить с этой величиной.
Основные типы данных VBA
Тип данных	Диапазон значений	Объем занимаемой памяти, байт	Приставка к имени	Суффикс	
Byte (байт)
Integer (целое число)
Long (длинное целое число)
Single (число с плавающей точкой обычной точности)

Double (число с плавающей точкой двойной точности)

Boolean (логический)
String (строка символов)

Currency (денежный)

Date (дата)
Object (объект)
Variant (строковые или числовые подтипы)	Целые числа от 0 до 255
Целые числа от –32768 до 32767
Целые числа двойной длины (от
 –2147483648 до 2147483647)
От -3.402823E38 до -1.401298E-45 для отрицательных значений;
От 1.401298E-45 до 3.402823E38 для положительных значений;
От -1.79769313486232E308 до 
-4.94065645841247E-324 для отрицательных значений;
От 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений;
Логическое значение True или False
От 0 до приблизительно 2 миллиардов

От –922337203685477,5808 до 922337203685477,5807
От 1 января 100 г. до 31 декабря 9999 г.
Любой указатель объекта
Любое числовое или строковое значение	1
2
4

4

8

2
1 на каждый символ
8

8
4
16	byt
int
lng

sng

dbl

bln
str

cur

dtm
obj
vnt	–
%
&

!

#

–
$

@

–
–
–	
Обозначения типов данных является ключевыми словами языка (и выделяется после набора в редакторе VBA).
Над различными типами данных допустимы различные операции. В VBA имеются три основных типа операций:
-	математические, выполняются над числами, их результатом являются числа;
-	операции отношения, могут применяться не только к числам, их результатом является значения логического типа;
-	логические, используются в логических выражениях и их результатом являются логические значения.
Операции VBA
Математические операции
[Операнд 1] + [Операнд 2]	Сложение	
[Операнд 1] - [Операнд 2]	Вычитание	
-[Операнд]	Перемена знака	
[Операнд 1] * [Операнд 2]	Умножение	
[Операнд 1] / [Операнд 2]	Деление	
[Операнд 1] \ [Операнд 2]	Целочисленное деление	
[Операнд 1 Mod [Операнд 2]	Остаток от деления по модулю	
[Операнд 1] ^ [Операнд 2]	Возведение в степень	

Операции отношения
[Операнд 1] < [Операнд 2]	Меньше	
[Операнд 1] > [Операнд 2]	Больше	
[Операнд 1] <= [Операнд 2]	Меньше или равно	
[Операнд 1] >=[Операнд 2]	Больше или равно	
[Операнд 1] <> [Операнд 2]	Не равно	
[Операнд 1] = [Операнд 2]	Равно	
[Операнд 1] Is [Операнд 2]	Сравнение двух операндов, содержащих ссылки на объекты	
[Операнд 1] Like [Операнд 2]	Сравнение двух строковых выражений	
Логические операции
[Операнд 1] And [Операнд 2]	(И) логическое умножение	
[Операнд 1] Or [Операнд 2]	(Или) логическое сложение	
[Операнд 1] Xor [Операнд 2]	Исключающее Or (или)	
Not [Операнд]	Логическое отрицание	
Другие операции
[Строка 1] & [Строка 2]	Конкатенация (сложение) строк. Для сложения строк допустимо использование операции [Строка 1] + [Строка 2], но предпочтительнее, во избежание путаницы, применять операцию со знаком &.	
VBA выполняет операции в соответствии с их приоритетом, что обеспечивает однозначность в трактовании значений выражений.
Приоритеты операций
Приоритет	Операция	
1
2
3
4
5
6
7
8
9
10
11
12	Вызов функции и скобки
^
- (смена знака)
*, /
\
Mod
+, –
>, <, >=, <=, <>, =
Not
And
Or
Xor	
В VBA пользователь определяет имена переменных, функций, процедур, постоянных и других объектов. Вводимые пользователем имена должны отражать суть обозначаемого объекта так, чтобы делать программу легко читаемой. В VBA имеются следующие ограничения на имена:
1)	длина имени не должна превышать 255 символов;
2)	имя не может содержать стандартные разделители (точку, запятую, двоеточие, дефисов, пробелов и т.п.)  и следующих символов: %, &, !, @, #, $;
3)	имя может содержать любую комбинацию не запрещенных символов, но начинаться должно с буквы;
4)	имена должны быть уникальны внутри области, в которой они определены;
5)	запрещено использовать имена, совпадающие с ключевыми словами VBA и именами встроенных функций и процедур.
Замечание. Хотя регистр букв (верхний или нижний) в имени не имеет значения, его умелое использование может существенно облегчить понимание содержательной стороны переменной. Вместо плоских и невыразительных имен предпочтительнее использовать имена, которые легче воспринимаются благодаря выделению некоторых входящих в них символов разумным использованием верхнего регистра. Например, представляется более удачным вместо имен “процентнаяставка”, “x-начзнач” использовать “ПроцентнаяСтавка”, “x-НачЗнач”.
Для того чтобы начать оперировать с любой величиной (постоянной или переменной) ее необходимо соответствующим образом описать. Важно, чтобы не только разработчик программы понимал, величины какого типа используются в программе, но и исполнитель программы (компьютер). Второе даже более важно, т.к. если компьютер не будет знать, величина какого типа используется в программе, он будет считать ее величиной универсального типа Variant и отведет для ее хранения в памяти 16 и более ячеек. Это будет приводить к неэффективному использованию памяти и замедлению работы программы.
Кроме того, описание переменных и констант делает программу надежнее, убыстряет ее работу, т.к. компилятору VBA не требуется тратить время на распознавание типа неописанной величины при каждом обращении к ней.

Блок описания переменных имеет следующий синтаксис:
Dim <Имя> [As <Тип>]
Здесь Dim и As – ключевые слова VBA;
<Имя> – имя переменной, удовлетворяющее стандартным правилам именования переменных;
<Тип> – тип данных переменной.
Назначение этого оператора – объявить переменную, т.е. задать ее имя и тип, однако объявление типа может отсутствовать. В этом случае по умолчанию переменная получает тип Variant.
Переменные, описанные с помощью слова Dim на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне процедуры, доступны только в данной процедуре.
Примеры:
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).
Альтернативным способом описания пеыременных некоторых типов может быть использование суффиксов. Например, инструкция
Dim A%, Text$
служит для описания переменной A типа Integer  и переменной Text типа String. Последующее использование этих переменных в тексте программы не требует использования суффикса.
Описание констант осуществляется следующим образом:
[Public | Private] Const  <Имя> [As <Тип>] = <Выражение>
Public – ключевое слово, используемое на уровне модуля для описания констант, доступных всем процедурам во всех модулях; не допускается в процедурах;
Private – ключевое слово, используемое на уровне модуля для описания констант, доступных только внутри модуля, в котором выполняется описание; не допускается в процедурах;
As – ключевое слово VBA;
<Имя> – имя константы, удовлетворяющее стандартным правилам именования;
<Тип> – один из поддерживаемых типов данных. Для каждой описываемой константы следует использовать отдельное предложение As <Тип>.
<Выражение> – запись, определяющая последовательность действий над величинами; может содержать константы, переменные, знаки операций (за исключением Is), функции.
Примеры:
1)	Const L As Integer = 12345
– инструкция описывает константу L типа Integer, значение которой равно 12345, доступную на уровне процедуры.
2)	Private Const Строка As String = “Большая перемена”
– инструкция описывает константу Строка типа String, доступную на уровне модуля, со значением “Большая перемена”.
3)	Const K1 As Integer = 350, K2 As Integer = 750, K3 = 3678 \ 57
– инструкция описывает константы K1 и K2 типа Integer, константу K3, тип которой не задан (по умолчанию будет приписан тип Variant); все константы доступны на уровне процедуры.
Важнейшей операцией в алгоритмах, работающих с величинами, является присваивание. Переменная может получить или изменить свое значение в результате присваивания. Оператор присваивания всегда включает знак “=” и имеет следующий синтаксис:
[Let] <Имя> =<Выражение>
<Имя> – имя переменной, удовлетворяющее стандартным правилам именования;
<Выражение> – произвольное выражение любого типа;
Let –ключевое слово, которое не является обязательным и чаще всего опускается.
При выполнении оператора присваивания переменная, имя которой указано слева от знак равенства, получает значение, равное значению выражения, которое находится справа от знака равенства.
Примеры:
Рассмотрим последовательно выполняемые команды присваивания, в которых участвуют несколько переменных. В таблице напротив каждой команды укажем значения переменных, которые установятся после ее выполнения. Такая таблица называется трассировочной таблицей, а процесс ее заполнения называется трассировкой алгоритма.
1)	Команда	А	В	
	A=1	1	-	
	B=2*A	1	2	
	A=B	2	2	
	B=A+B	2	4	
Прочерк в таблице означает неопределенное значение переменной. Конечные значение, которые получают переменные A и B, соответственно равны 2 и 4.
Этот пример иллюстрирует три основных свойства присваивания.
1)	пока переменной не присвоено значение, она остается неопределенной;
2)	значение, присвоенное переменной, сохраняется в ней вплоть до выполнения следующего присваивания этой переменной нового значения;
3)	новое значение, присвоенное переменой, заменяет ее предыдущее значение.
2)	Команда	А	B	C	
	A= 5>3	True	-	-	
	B= 2*2=5	True	False	-	
	C=A And B	True	False	False	
Задачи для самостоятельного решения
Каждый студент должен выполнить все задания блока А и упражнения своего варианта из блока Б.
А
1.	Вычислите значения логических выражений:
a)	X*X + Y*Y = 9					при X = 1, Y = -2;
b)	B*B + 4*A*C < 0					при A = 2, B = 1, C = -2;
c)	(a >= 1) And (a <= 2)					при a = 1,5;
d)	(a mod 7 = 1) And (a \ 7 = 1)				при a = 8;
e)	(a < 1) Or (a > 1.2)					при a = 1,5;
f)	Not ((A > B) And (A < 9) Or (A*A = 4))		при A = 5, B = 4.
2.	Запишите в обычной математической форме арифметические выражения:
a) a / b ^ 2	b) a + b / c + 1	c) 1 / a * b / c	
d) a^ b ^ c / 2	e) (a ^ b) ^ c / 2	f) a / b / c / d * p * q	
g) x ^ y ^ z / a / b	h) 4 / 3 * 3.14* r ^ 3	i) d * c / 2 / R + a ^ 3	
3.	Запишите логические выражения, истинные только при выполнении указанных условий:
a) x принадлежит отрезку [a;b]	b) x не принадлежит отрезку [a;b]	
c) x принадлежит промежутку [a;b ) или (c;d]	d) x лежит вне отрезков [a;b] и [c;d]	
e) целое k является нечетным числом	f) целое n является трехзначным числом, кратным пяти	
g) из чисел a, b, c меньшим является c, а большим b	h) среди чисел a, b, c, d есть взаимно противоположные	

Б
Вариант 1.
1.	Укажите допустимые имена:
a)	Переменная
b)	G1G2H3
c)	Dim
d)	D&G
e)	2_значное
f)	Нов.значение
g)	qaz wer
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim a As String, b As String, c As String
a = “У нас   ”
b = “3”
с = a & b & “пары”
b)	Dim Q1 As Integer, Q2 As Integer
Const Q As Integer = 15
Q1 = 1
Q2 = 2
Q1 = Q + Q2
Q2 = Q1 *Q2
c)	Dim a As Byte, b As Byte, c As Byte
a = 3
b = 100
b = b + a
с = a * b

Вариант 2.
1.	Укажите допустимые имена:
a)	BOX_56
b)	byte
c)	Ура!
d)	Максимум
e)	44ВеселыхЧижа
f)	Первая программа
g)	try-три
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim L1 As Boolean, L2 As Boolean, L3 As Boolean
L1 = 3*3 = 6
L2 = 8 < 12
L3 = L1 Or L2
L1 = L2 / L3
b)	Dim a As Integer, b As Long
Const c As Integer = 1000
a = 100000
b = a * c
a = a mod c
b = b / 200
c)	Dim a As String, b As String, c As String
a = “Что-то   ”
b = “стало”
b = “с памятью моей” & b
с = a & b

Вариант 3.
1.	Укажите допустимые имена:
a)	Проба пера
b)	Лаб_раб_5
c)	doll$
d)	Boolean
e)	33коровы
f)	Скорость
g)	S1_S2
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim a As String, b As String, c As String
a = “Мело”
b = “по всей земле,”
a = a & “,   ” & a
с = a & b & “во все пределы”
b)	Dim T As Integer, R As Integer
Const K As Integer = 12
T = 4
R = 2
T = T * K
R = T / R
c)	Dim a As Byte, b As Byte, c As Byte
a = 237
b = 12
a = a + b
с = a * b

Вариант 4.
1.	Укажите допустимые имена:
a)	First_Program
b)	const
c)	mail@ru
d)	Наибольшее
e)	9_step
f)	Подоходный налог
g)	ПРИМЕР7_3
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim a As Integer, b As Long
Const c As Integer = 5000
a = 255000
b = a / c
a = a \ c
b = b * a
b)	Dim a As String, b As String, c As String
a = “Breakfast”
b = “Supper”
c = “   in the   ”
a = a & c & “morning,”
b = b & c & “evening”
с = a & b
c)	Dim Logic1 As Boolean, Logic2 As Boolean, Logic3 As Boolean
Logic1 = 356 > 123
Logic2 = 17 < 678
Logic3 = Logic1 And Logic2
Logic1 = Logic2 * Logic3

Вариант 5.
1.	Укажите допустимые имена:
a)	Single
b)	C.-Петербург
c)	Построение_графика
d)	Милениум
e)	28попугаев
f)	max_min
g)	ставка%
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim S1 As String, S2 As String, S3 As String
S1 = “Я на солнышк”
S2 = S1 & “е лежу,”
S3 = S1 & “о гляжу”
S1 = S2 & S3
b)	Dim a As Integer, b As Integer
Const c As Byte = 50
a = 7
b = a * c
a = a + c
b = b / a
c)	Dim V1 As Boolean, V2 As Boolean, V3 As Boolean
V1 = 4+4 = 8
V2 = 25 > 13
V3 = V1 Or Not (V2)

Вариант 6.
1.	Укажите допустимые имена:
a)	Простая программа
b)	13-е_пятница
c)	победа!
d)	Поиск_значения
e)	face567
f)	Ст.знач.
g)	DOUBLE
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim X As Integer, Y As Integer
Const Z As Integer = 12
X = 5
Y = 2
X = X * Z
Y = X - Y
b)	Dim a As String, b As String, c As String
a = “Петушок”
b = “   золотой гребешок”
a = a & “-” & a
с = a & b
c)	Dim m As Byte, b As Byte, c As Byte
m = 177
b = 100
m = m + 23
с = m * b

Вариант 7.
1.	Укажите допустимые имена:
a)	программа_12
b)	1сентября
c)	String
d)	New#
e)	FRODO
f)	Условный оператор
g)	PEACE_1_МИР
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim k As Integer, m As Integer
Const n As Integer = 557
k = 1
m = 7
k = k + n
m = n - m
k = k - m
b)	Dim S1 As String, S2 As String, S3 As String
S1 = “Little mouse,”
S2 = “   where is your”
S3 = S1 & S1
S1 = S3 & S2 & “house?”
c)	Dim m As Byte, b As Byte, f As Byte
m = 222
b = 78
m = m + b
f = m * b

Вариант 8.
1.	Укажите допустимые имена:
a)	FALSE
b)	Задание_34
c)	Я&Я
d)	from1to2
e)	317_аудитория
f)	My program
g)	Продажа-покупка
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim U1 As Boolean, U2 As Boolean, U3 As Boolean
U1 = 7*7 = 47
U2 = 356 > 212
U3 = Not (U1) Or U2
b)	Dim a As String, b As String, c As String
a = “Муха   ”
b = “добрая была,”
с = “дом себе нашла”
a = a & b & a & c
c)	Dim h As Byte, g As Byte, c As Byte
h = 10
g = 5
h =h + g
с = h * g
g = c - h

Вариант 9.
1.	Укажите допустимые имена:
a)	AMD750Процессор
b)	День_рождения
c)	Prog15
d)	lok#21
e)	Currency
f)	Нов.значение
g)	Константа
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim S1 As String, S2 As String, S3 As String
S1 = “In that   ”
S2 = “   there is a   ,”
S3 = S1 & “town” & S2 & “street,”
S1 = S1 & “street”& S2 “yard”
S3 = S3 & S1
b)	Dim a As Integer, b As Integer
Const c As Integer = 65
a = 17
b = c - a
a = a + c
b = b / a
c)	Dim TR1 As Boolean, TR2 As Boolean, TR3 As Boolean
TR1 = 98 > 97
TR2 = 36 > 13
TR1 = TR1 And TR2
TR3 = TR1 Or Not (TR2)

Вариант 10.
1.	Укажите допустимые имена:
a)	Date
b)	Proba@678
c)	Линейный_алгоритм
d)	5-symbol
e)	Bold_Italy
f)	Example 3
g)	МониторSamsung
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim S1 As String, S2 As String, S3 As String
Const S = “В Африке…”
S1 = S & “акулы,   ”
S2 = S & “гориллы,   ”
S3 = S & “большие злые крокодилы!”
S1 = S1 & S1 & S3 
b)	Dim a As Integer, b As Integer
Const c As Byte =24 
a = 8
b = c - a
a = a + c
b = b + a
c)	Dim B1 As Boolean, B2 As Boolean, B3 As Boolean
B1 = 5*5 = 25
B2 = 35 > = 35
B3 = B1 And B2
B3 = B1 / B3

Вариант 11.
1.	Укажите допустимые имена:
a)	Пробный_вариант
b)	LONG
c)	Др.переменная
d)	Наша_взяла!
e)	2-хКамерный
f)	stepen4
g)	VID69ДИВ
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim J As Integer, K As Integer , L As Byte
J = 20
K = 30
J = J*2
K = K + J
L = J + K
b)	Dim a As Boolean, b As Boolean, c As Boolean
a = 6*6 = 25
b = (a+25) > = 35
c = a Or b
c)	Dim S1 As String, S2 As String, S3 As String
Const S = “А за ним”
S1 = S & “и кот задом наперед,”
S2 = S & “   комарики   ”
S3 = S2 & “на воздушном шарике”
S1 = S1 & S3 

Вариант 12.
1.	Укажите допустимые имена:
a)	Object
b)	Стар.знач.
c)	СтароеЗначение
d)	Adis#55
e)	Program_1_Вычисление
f)	5-тиЗначноеЧисло
g)	Дробная_часть
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim Log1 As Boolean, Log2 As Boolean, Log3 As Boolean
Log1 = 2345 <5432
Log2 = Log1 Or (4*5 = 30)
Log3 = Log1 And Log2
b)	Dim S1 As String, S2 As String, S3 As String
Const S As String= “глазка”, SS As String= “Были у нее дочери:”
S1 = “Одно” & S & “,   ” 
S2 = “Дву” & S & “,   ”
S3 = “Три” & S & “.”
S1 = SS & S1 & S2 & S3
c)	Dim J As Integer, K As Integer , L As Integer
J = 15
K = 25
J = J + 8
K = K - J
L = K / J

Вариант 13.
1.	Укажите допустимые имена:
a)	EXAMPLE$37
b)	Мышь1Genius
c)	Преобразование_формата
d)	Variant
e)	Тип.значение
f)	OldVar
g)	40-сороков
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim a As Byte, b As Byte , c As Byte
a = 200
b = 5
c = a + b
b = b +25
a = b * c
b)	Dim Log1 As Boolean, Log2 As Boolean, Log3 As Boolean
Log1 = 32 <= 32
Log2 = Log1 Or (4*5 = 30)
Log3 = 25 = 25
Log1 = Log2 * Log3
c)	Dim S1 As String, S2 As String, S3 As String
Const S As String= “   конц”
S1 = “В доме том в” & S & “е   ” 
S2 = S & “ов   ”
S3 = S1 & S2 & “стало множество жильцов.”

Вариант 14.
1.	Укажите допустимые имена:
a)	Депозит%3
b)	MY_BIRTHDAY
c)	TRUE
d)	Строковое выражение
e)	Процедура_3_procedure
f)	3-хЛистник
g)	Проверка_значений
2.	Определите значение переменных по фрагменту программы с помощью трассировки:
a)	Dim a As Integer, b As Integer , c As Long
a = 200000
b = 50000
a = a + a
b = b +50000
c = b * a
b)	Dim Log1 As Boolean, Log2 As Boolean, Log3 As Boolean
Log1 = 567 <= 12
Log2 = Log1 Or (4*4 = 16)
Log3 = 3 < 57
Log1 = Log2 Or Log3
c)	Dim Str1 As String, Str2 As String, Str3 As String
Const Str As String= “   где-то   ”
Str1 = “Если” & Str & “нет кого-то,” 
Str2 = “Значит кто-то” & Str & “есть.”
Str3 = Str1 & Str2