Информатика VBA. Учебное пособие по дисциплинам Информатика иИнформационные технологии
Скачать 1.05 Mb.
|
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 используют логические операции для операндов, принимающих значения ложь и истина, например, ус- танавливают истинность высказывания 0 Арифметические выражения 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. Если значение переменной А окажется меньше либо равным значе- |