Главная страница

Информатика VBA. Учебное пособие по дисциплинам Информатика иИнформационные технологии


Скачать 1.05 Mb.
НазваниеУчебное пособие по дисциплинам Информатика иИнформационные технологии
АнкорИнформатика VBA.pdf
Дата28.01.2017
Размер1.05 Mb.
Формат файлаpdf
Имя файлаИнформатика VBA.pdf
ТипУчебное пособие
#900
страница3 из 11
1   2   3   4   5   6   7   8   9   10   11
Dim Str As String*16
В этом случае, если присвоить переменной Str строку длиной более 16 символов, то она будет усечена.
Оператор Dim, в котором перечислены имена переменных без указания их типов, присваивает этим переменным тип Variant и не- определенное значение Empty.
Во многих языках программирования (Паскаль, Си) не позволя- ют использовать переменные, имена которых не объявлены програм- мистом. Чтобы установить режим, при котором VBA требует явного объявления имен всех переменных в модуле, необходимо добавить команду Option Explicit в область объявлений модуля, то есть в на- чало модуля до любого объявлениями переменных или процедур. Та- кие команды, как Option Explicit, называются директивами компи-
лятора (compiler directives).
Команда Option Explicit действует только на модуль, в котором она появляется. Если проект, содержащий этот модуль, содержит также другие модули, внутри них не действует команда
Option Explicit
. Необходимо включать команду Option Explicit в ка- ждый модуль, для которого требуются явные объявления перемен- ных.

28
2.5
Выражения в VBA
Выражения образуются из операндов, знаков операций, (воз- можно) скобок и задают правило вычисления значения этого выраже- ния. В зависимости от типа вычисляемого значения различают выра- жения символьные, логические и арифметические. Операндами – объектами, участвующими в операциях, – могут быть константы, пе- ременные, функции.
Символьные выражения VBA используют одну единственную
операцию конкатенации (соединения) для символьных операндов, например, stroka1&stroka2 . В некоторых случаях знак операции кон- катенации «&» может быть заменен символом плюс. Тип данных ре- зультата конкатенации строк – это всегда тип String. Иные действия над строками символов выполняются с помощью встроенных сим- вольных функций.
Логические выражения VBA используют логические операции для операндов, принимающих значения ложь и истина, например, ус- танавливают истинность высказывания 00. Они будут рассмотрены позже в разделе «Алгоритмы ветвления».
Арифметические выражения VBA включают операнды число- вого типа, арифметические операции, (возможно) круглые скобки и задают формулу, вычисляемую по правилам VBA. Знаки операций
выполнения действий приведены в таблице 2.2, в таблице 2.3 приве- дены приоритеты арифметических действий.

29
Таблица 2.2 – Обозначения арифметических операций
Знак Синтаксис Имя/Описание
+
N1 + N2
Сложение. Прибавляет N1 к N2

N1 – N2
Вычитание. Вычитает N2 из N1
*
N1 * N2
Умножение. Умножает N1 на N2
/
N1 / N2
Деление. Делит N1 на N2
\
Nl \ N2
Целочисленное деление. У результата деления
N
1 на N2 отбрасывается дробная часть. Перед операцией N1 и N2 округляются до целого числа
Mod N1 Mod N2
Деление по модулю. N1 делится на N2, а резуль- тату присваивается остаток операции деления.
Перед операцией N1 и N2 округляются до целого
^
N1 ^ N2
Возведение в степень. Возводит N1 в степень N2
Таблица 2.3 Старшинство арифметических операций.
Знак операции Пояснения
^
Возведение в степень (наивысший приоритет)

Унарный минус (изменение знака числа)
*, /
Умножение и деление имеют равные приоритеты
\
Целочисленное деление
Mod
Остаток от деления нацело
+, –
Сложение и вычитание имеют равный приоритет
(низший приоритет)
Действия одного ранга (старшинства) выполняются последова- тельно слева направо. Действия в скобках выполняются в первую очередь. Обозначение и старшинство всех допустимых действий в
VBA приведено в приложении Б.

30
Пример.
Запись на VBA
Математическая запись
2^3^2 64 8
)
2
(
2 2
3
=
=
2^(3^2)
512 2
2 9
2 3
=
=
A
−B * C+D a
− bc + d
A+B^2 a+b
2
(A+B)^2
(a+b)
2
−A*C
−a ⋅ c
При записи выражений надо учитывать следующие особенно- сти:
- нельзя опускать знак умножения (ab записывается как A*B, но AB
– это новая переменная);
-
«двухэтажных» записей нет. Следует быть внимательным с деле- нием: A–B/C**2+1 означает
1 2
+

c
b
a
. Если же требуется записать на VBA выражение
1 2
+

c
b
a
, то надо использовать скобки:
(A
−B)/(C**2+1);
- нельзя ставить подряд два знака операций.
b
a

можно записать как
A/(
−B
) или −A/B;
- при операндах одного типа результат имеет тот же тип, а размер памяти результата равен наибольшему из размеров памяти, зани- маемой одним из операндов. При операндах разного типа резуль- тат принимает более общий (в математическом смысле) из типов.
2.6
Встроенные функции VBA
Встроенные функции позволяют использовать в выражениях элементарные математические функции, такие как sinx, cosx, lnx и др.

31
Для этого указывается имя функции, затем в круглых скобках аргу- мент, представленный переменной или константой (арифметическим выражением в общем случае), например
Математическая запись Запись на VBA
Sinx
3
Sin(X^3) cos
2
x
Cos(X)^2 ln(x+ 1)
Log(X+1.)
Пример встроенных математических функции VBA приведен в таблице 2.4.
Таблица 2.4 – Встроенные математические функции VBA
Название функции
Математическая запись
Запись на VBA показательная функция e
x
Exp(X) натуральный логорифм lnx
Log(X) синус sinx
Sin(X) косинус cosx
Cos(X) тангенс tgx
Tan(X) арктангенс arctgx
Atn(X) квадратный корень
x
Sqr(X) абсолютное значение
| x |
Abs(X) целая часть x
[ x ]
Int(X
) и
Fix(x) знак числа




<

=
>
+
0
при
1 0
при
0 0
при
1
x
x
x
Sgn(X) случайное число
Rnd(x)

32
Показательная функция Exp(X) и функция натурального лога- рифма позволяет вычислять гиперболические функции.
Функция, вычисляющая натуральный логарифм, позволяет вы- числять логарифмы по любому основанию.
Пример.
Для вычисления десятичного логарифма (lg(x)) следует записать
Log(x)/log(10).
Для вычисления логарифма по основанию 2 (log
2
(x
)) следует за- писать Log(x)/log(2).
У функций Int и Fix результат целый, для положительных аргу- ментов результат этих функций одинаков – Int(9.89)=Fix(9.89)=9. Для отрицательных аргументов результатом функции Int будет ближай- шее большее целое ( Int(-5.3)= -6 ), а результатом функции Fix будет ближайшее меньшее целое ( Fix(-5.7)= -5 ).
Аргумент функции Rnd является необязательным. Эту функцию можно использовать только после инициализации VBA-генератора случайных чисел оператором Randomize.
Аргументы тригонометрических функций и значения обратных тригонометрических функций выражаются в радианах. Остальные тригонометрические и обратные тригонометрические функции вы- числяются через математические функции.
VBA
, по сравнению с другими языками программирования, имеет достаточно ограниченное число встроенных математических функций. Например, отсутствуют такие востребованные функции как функции вычисления максимального и минимального значений от нескольких аргументов. А отсутствие тригонометрических функций, позволяющих задавать аргумент в градусах, а также отсутствие функции перевода градусов в радианы, приводит к тому, что про- граммист должен серьезно задумываться при записи фрагмента про-

33 граммы вычисления синуса или косинуса от аргумента, заданного в градусах.
Пример.
Вычисление синуса 47
о можно выполнить инструкцией –
Sin
(47*3.14/180). При этом полученная погрешность будет достаточ- но велика. Для получения результата с максимально достижимой точностью следует инструкцию записать как
Sin
(47*3.141592653589793/180), либо Sin(47*Atn(1#)*4/180). Как из- вестно арктангенс 1 равен π/4.
Однако недостаток, связанный с небольшим числом встроенных математических функций, с лихвой возмещается уникальной воз- можностью использования в программах на VBA огромной библио- теки функций Excel. Для этого следует воспользоваться объектом
Application с указанием имени необходимой функции. Имена основ- ных математических функций, доступных в VBA через объект Appli-
cation,
приведены в приложении В. Помимо этого имена функций доступны через контекстное меню объекта
Applica-
tion.WorksheetFunction.
Пример.
Для вычисления арксинуса от 0,5 можно записать Applica-
tion.Asin
(0.5), ибо Application.WorksheetFunction.Asin(0.5). Отли- чия заключаются в том, что в первом случае имя функции надо знать, а во втором выбрать из контекстного меню, которое высвечивается на экране после ввода точки после объекта WorksheetFunction.
В приложении В приведен список математических функций
VBA с примерами их использования, в приложении Г приведен спи- сок встроенных функций преобразования данных.

34
2.7
Оператор присваивания
Переменная величина получает конкретное значение в результа- те выполнения операции присваивания. Три основных свойства при- сваивания:
- пока переменной не присвоено значение, она остается неопределен- ной;
- значение, присвоенное переменной, сохраняется в ней вплоть до выполнения присваивания этой переменной нового значения;
- новое значение, присвоенное переменной, заменяет ее предыдущее значение.
В левой части оператора присваивания указывается имя пере- менной, правая часть представляет собой выражение.
<
имя переменной> = < выражение >
<
выражение > содержит константы, переменные, указатели функ- ций, соединенные знаками арифметических операций.
При выполнении оператора присваивания сначала вычисляется значение выражения при текущих значениях входящих в него опе- рандов. Затем это значение приводится к типу и размеру переменной и присваивается переменной – получателю присваивания. В ариф-
метическом операторе присваивания переменная и выражение имеют числовой тип.
Примеры записи арифметических операторов присваивания и функций
Математическая запись
Оператор присваивания
4 1 x
b
a
y
+
+
=
Y=(A+B)/(1.+X^4)
)
31
sin(
2 1
o
g
=
G =0.5*Sin(3.14159*31./180.)
2
ln ln
2
log
2 2
x
x
q
=
=
Q=Sqr(2.)* Log(X) / Log(2.)

35
x
e
x
e
z

+

=
1
sin
2
Z=Exp(1)*Sin(X)^2/(1.+Exp(-X))
2 2
1
x
e
f

=
F=Sqr(Abs(0.5-Exp(-X^2)))
3 2
1
x
R
+
=
R=(1.+X^2)^(1./3.)
3
/
1 3
/
1 3
)
(
)
(
x
x
знак
x
x
S
=
=
=
=
, для любого x
S= Abs(X)^(1./3.)*Sgn(X)
В последнем операторе показан приём возведения вещественной переменной x с положительным или отрицательным значением в (ра- циональную) вещественную степень p/q=1/3, q – нечётное.
В языке VBA оператор присваивания может также осуществлять ввод и вывод данных на лист открытой книги Excel. Для этого следует использовать инструкцию Cells(n,m), где n определяет номер строки активного листа рабочей книги, а m – номер столбца на этом листе.
Пример.
Cells(2,3)= 5.2
′ записывает в ячейку C2 число 5,2 d=Cells(3,2)
′ присваивает переменной d значение числа из ячейки В3

36
3
Разветвляющиеся алгоритмы
Алгоритмы разветвляющейся структуры – это такие алго- ритмы, в которых в зависимости от первоначальных условий или промежуточных результатов выполняются вычисления по одним ли- бо другим формулам.
Такие задачи можно описать с помощью алгоритмов разветв- ляющейся структуры. В таких алгоритмах выбор направления про- должения вычисления осуществляется по итогам проверки заданного условия. Ветвящиеся процессы описываются оператором If (условие).
Во всех алгоритмических языках программирования оператор разветвления кодируется как оператор If (ЕСЛИ). Этот оператор мо- жет иметь различный синтаксис, но реализует фрагмент блок-схемы, изображенный на рисунке 1.1.
ЕСЛИ <Логическое выражение> ТО
[действия алгоритма, если условие выполнено]
ИНАЧЕ
[действия алгоритма, если условие НЕ выполнено]
КОНЕЦ оператора ЕСЛИ
Логическое выражение может содержать логические константы и логические выражения, содержащие арифметические выражения, переменные и константы, связанных между собой операциями сравнения.
В VBA операции сравнения обозначаются символами, приведенными в таблице 3.1. Символами Е1 и Е2 обозначены любые арифметические выражения.

37
Таблица 3.1 - Символы операций сравнения
В алгебре
Синтаксис Наименование/описание
<
(меньше)
El
< Е2
Меньше, чем. True, если El меньше, чем
Е2, иначе – False
>
(больше)
El
> Е2
Больше, чем. True, если Е1 больше, чем
Е2, иначе – False
=
(равно)
El
= Е2
Равенство. True, если El равно Е2, иначе – False

(меньше или равно)
El
<= Е2
Меньше, чем или равно. True, если Е1 меньше или равно Е2, иначе – False

(больше или равно)
El >=
Е2
Больше, чем или равно. True, если Е1 больше или равно Е2, иначе – False

(не равно) El <> Е2
Не равно. True, если Е1 не равно Е2, если Е1 и Е2 одинаковы, то False
Операции сравнения выполняются в том порядке, в котором они записаны, но только после выполнения арифметических действий
(приоритеты операций VBA приведены в приложении Б).
Логическое выражение в операторе If имеет значение "истина", если записанная в нем операция сравнения справедлива, или "ложь", если операция сравнение не выполнена. При выполнении логического оператора If вычисляется значение логического выражения. Если оно

«истина», то выполняются действия алгоритма по ветви «ДА». Если логическое выражение прияло значение «ложь», то выполняются действия алгоритма по ветви «НЕТ».
Простые логические выражения можно объединять в более сложные с помощью логических операций: «И», «ИЛИ», «НЕ» и дру- гих. В таблице 3.2 представлены операции математической логики, реализованные в VBA. Символами Е1 и Е2 обозначены любые ариф- метические выражения, допустимые в языке программирования. В

38 таблице 3.3 приведена таблица истинности для основных логических операций.
Таблица 3.2 - Логические операторы VBA
Оператор Синтаксис Имя/Описание
And
El And E2
Конъюнкция. True, если оба выражения Е1 и
Е2 имеют значение True, иначе – False
Or
El Or E2
Дизъюнкция. False, если оба выражения Е1 и
Е2 имеют значение False, иначе –True
Not
Not El
Отрицание. True, если Е1 имеет значение
False; False
, если El является True
Xor
El Xor E2
Исключение. True, если Е1 и Е2 имеют раз- ные значения; если одинаковые, то результат
False
Eqv
El Eqv E2
Эквивалентность. True, если Е1 имеет то же самое значение, что и Е2; иначе – False
Imp
El Imp E2
Импликация. False, когда Е1 является рав- ным True и Е2 равно False; иначе True
Таблица 3.3 - Таблица истинности логических операций
А
В
Not A
A and B
A or B
A xor B
0 0
1 0
0 0
0 1
1 0
1 1
1 0
0 0
1 1
1 1
0 1
1 0
Сложное (составное) выражение (complex expression)это любое выражение, образованное из двух или более выражений.При- оритеты выполнения операций при вычислении сложных выражений приведены в таблице Б.4 приложения Б.

39
3.1
Оператор IF и его формы записи
Оператор сравнения («If») является структурным оператором и имеет следующую форму записи.
If
Логическое_выражение ТНЕN ' (то / тогда)
операторы блока ветви «ДА»
[
Else '
(иначе) операторы блока ветви «НЕТ»
]
End If '
(конец оператора IF) .
Если значение логического выражения «истина», выполняются операторы блока ветви «ДА, а операторы блока ветви «НЕТ» игнори- руются. Если значение логического выражения есть «ложь», то опе- раторы блока ветви «ДА» игнорируются и выполняются операторы блока ветви «НЕТ». Конец группы операторов блока ветви «ДА» от- мечается оператором Else, а конец группы операторов блока ветви
«НЕТ» и всего блока If - оператором End If. После того, как выпол- нены операторы блока ветви «ДА», выполняется оператор, следую- щий за оператором End If.
Пример 3.1.

If A > B Then
BIG = A
Else
BIG = B
End If
Debug.print BIG

В этом примере, если А > В, переменной BIG присваивается значение А и дальше управление передается оператору следующему за оператором END IF, т.е. оператору вывода значения переменной
BIG в окно отладки интегрированной среды программирования VBA.
Если значение переменной А окажется меньше либо равным значе-

40 нию В, то переменной BIG присваивается значение В. Далее выпол- няется оператор следующийза оператором END
IF,
т.е. оператор
Debug.print
1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта