Когато пишете VBA код в Excel, на всяка стъпка се използва набор от вградени оператори. Тези оператори са разделени на математически, низови, сравнителни и логически оператори. След това ще разгледаме подробно всяка група оператори.

Математически оператори

Основните математически оператори на VBA са изброени в таблицата по-долу.

Дясната колона на таблицата показва приоритета на оператора по подразбиране при липса на скоби. Като добавите скоби към израз, можете да промените реда, в който VBA изразите се изпълняват, както желаете.

Стрингови оператори

Основният низов оператор в Excel VBA е конкатенационният оператор & (сливане):

Оператори за сравнение

Операторите за сравнение се използват за сравняване на две числа или низове и връщане булевоТип Булева стойност(Истина или лъжа). Основните оператори за сравнение на Excel VBA са изброени в тази таблица:

Логически оператори

Логическите оператори, подобно на операторите за сравнение, връщат булева стойност на тип Булева стойност(Истина или лъжа). Основен логически оператори Excel VBA са изброени в таблицата по-долу:

Таблицата по-горе не изброява всички логически оператори, налични във VBA. Пълен списъклогическите оператори могат да бъдат намерени на сайта на Visual Basic Developer Center.

Вградени функции

Във VBA има много вградени функции, които могат да се използват при писане на код. По-долу са изброени някои от най-често използваните:

функция Действие
коремни мускули Връща абсолютната стойност на даденото число.
  • Корем (-20)връща стойността 20;
  • корем (20)връща стойността 20.
Chr Връща ANSI знака, съответстващ на числовата стойност на параметъра.
  • Chr (10)връща нов ред;
  • Chr (97)връща знак а.
Дата Връща текущата системна дата.
Добавяне на дата Добавя определен интервал от време към дадената дата. Синтаксис на функцията:

Добавяне на дата( интервал , номер , датата )

Къде е аргументът интервалопределя вида на интервала от време, добавен към даденото датав размера, посочен в аргумента номер .

Аргумент интервалможе да приема една от следните стойности:

  • DateAdd("d", 32, "01/01/2015")добавя 32 дни към датата 01/01/2015 и по този начин връща датата 02/02/2015.
  • DateAdd("ww", 36, "01/01/2015")добавя 36 седмици към датата 01/01/2015 и връща датата 09/09/2015.
DateDiff Изчислява броя на посочените интервали от време между две дадени дати.
  • DateDiff("d", "01/01/2015", "02/02/2015")изчислява броя на дните между 01/01/2015 и 02/02/2015, връща 32.
  • DateDiff("ww", "01/01/2015", "03/03/2016")изчислява броя на седмиците между 01/01/2015 и 03/03/2016, връща 61.
ден Връща цяло число, съответстващо на деня от месеца в дадената дата.

Пример: ден („29/01/2015“)връща числото 29.

час Връща цяло число, съответстващо на броя часове в дадения момент.

Пример: Час („22:45:00“)връща числото 22.

InStr Приема цяло число и два низа като аргументи. Връща позицията на срещане на втория низ в първия, започвайки търсенето от позицията, зададена от цяло число.
  • InStr(1, „Ето думата за търсене“, „дума“)връща числото 13.
  • InStr(14, „Ето думата за търсене и ето друга дума за търсене“, „дума“)връща числото 38.

Забележка:Аргументът номер може да не е посочен, в който случай търсенето започва от първия знак на низа, зададен във втория аргумент на функцията.

вътр Връща цялата част от даденото число.

Пример: Int (5,79)връща резултат 5.

Isdate се завръща Вярноако дадената стойност е дата, или Невярно– ако датата не е.
  • IsDate(“01/01/2015”)се завръща Вярно;
  • IsDate (100)се завръща Невярно.
IsError се завръща Вярноако дадената стойност е грешка, или Невярно– ако не е грешка.
Липсва Името на незадължителен аргумент на процедурата се предава като аргумент на функцията. Липсвасе завръща Вярноако не е предадена стойност за въпросния аргумент на процедурата.
IsNumeric се завръща Вярноако дадената стойност може да се третира като число, в противен случай връща Невярно.
Наляво Връща зададения брой знаци от началото на дадения низ. Синтаксисът на функцията е следният:

Наляво( линия , дължина )

където линия- това е оригинален низ, а дължинае броят знаци за връщане, като се брои от началото на низа.

  • Ляво ("abvgDeZicleMn", 4)връща низа "abcg";
  • Ляво ("abvgDeZicleMn", 1)връща низа "a".
Лен Връща броя знаци в низ.

Пример: Len("abcdej")връща числото 7.

месец Връща цяло число, съответстващо на месеца на дадената дата.

Пример: Месец („29/01/2015“)връща стойност 1.

средата Връща посочения брой знаци от средата на дадения низ. Синтаксис на функцията:

Средно( линия , Започнете , дължина )

където линияе оригиналният низ Започнете- позицията на началото на низа, който ще бъде извлечен, дължинае броят знаци за извличане.

  • Среден ("abvgDeZicleMn", 4, 5)връща низа "къде";
  • Mid("abvgDeZicleMn", 10, 2)връща низа "cl".
минута Връща цяло число, съответстващо на броя минути в даденото време. Пример: Минута ("22:45:15")връща стойността 45.
Сега Връща текущата системна дата и час.
вярно Връща зададения брой знаци от края на дадения низ. Синтаксис на функцията:

точно( линия , дължина )

Където линияе оригиналният низ и дължинае броят знаци за извличане, като се брои от края на дадения низ.

  • Вдясно ("abvgDeZicleMn", 4)връща низа "clmn";
  • Вдясно ("abvgDeZicleMn", 1)връща низа "n".
Второ Връща цяло число, съответстващо на броя секунди в даденото време.

Пример: Второ („22:45:15“)връща стойност 15.

кв Връща корен квадратен от числовата стойност, предадена в аргумента.
  • Sqr (4)връща 2;
  • квадрат (16)връща стойността 4.
време Връща текущото системно време.
Ubound Връща горния индекс на указаното измерение на масива.

Забележка:За многомерни масивикато незадължителен аргумент можете да посочите кой индекс на измерение да се върне. Ако не е посочено, по подразбиране е 1.

Оператор за присвояване (=)

Операторът за присвояване се използва за присвояване на резултата от израз към променлива.

Операторът за присвояване има две синтактични форми:

име на променлива = израз

varname- всяка променлива на VBA

изразяване- произволен VBA израз

Когато изпълнява оператор за присвояване, VBA първо оценява израза отдясно на оператора за присвояване и след това съхранява резултата от израза в променливата, чието име е вляво от знака за равенство.

X = 5 + 7; Y = X + 5; Z = X - Y; A=B; I = I + 1

Начинаещите потребители понякога не разбират значението на последната операция за присвояване, когато и лявата, и дясната част на операцията съдържат една и съща променлива. В този случай първо резултатът от изчисляването на израза от дясната страна на оператора за присвояване се поставя в междинната клетка на паметта и след това този резултат се присвоява на променливата от лявата страна.

Например, ако в оператора за присвояване A = A +5, променливата A преди операцията за присвояване е съдържала стойност 7, то след операцията тя ще съдържа стойност 12 (7+5).

Трябва да се помни:

· Можете да присвоите всяка числова променлива (или израз) на всяка друга променлива от числов тип (или променлива от тип Variant);

· Ако присвоите числов израз на въведена променлива с по-ниска точност (например Double - Long), VBA закръгля стойността на израза, за да съответства на точността на променливата, която приема новата стойност;

Ако променлива от тип Stringвъзложено тип променливаВариант, съдържащ число, VBA автоматично ще преобразува това число в низ.

Оператор за добавяне (+)

Операторът за събиране извършва просто събиране. И двата операнда трябва да са числови изрази или низове, които VBA може да конвертира в число. Операторът за събиране може също да се използва за извършване на аритметични операции върху данни за дата.

Типът данни на резултата от израз за добавяне обикновено е същият като най-точния тип в този израз. Но има изключения:

· Резултатът от събирането на тип Single и Long ще бъде Double;

· Резултатът от добавяне на тип Дата към всеки друг тип данни винаги ще бъде Дата;

· Ако резултатът надхвърля диапазона от тип Integer, тогава VBA ще го преобразува в Long;

· Ако резултатът надхвърля типовете Long, Single, Date, тогава VBA го преобразува в Double;

· Ако някой операнд в израза за добавяне е Null, тогава резултатът от израза за добавяне също е Null.

Припомнете си реда на нарастване на точността за числови типове данни: байт, цяло число, дълъг, единичен, двоен, валута.

Трябва да се каже, че човек трябва ясно да разбере как VBA преобразува типовете данни в резултат на аритметични операции. Това ще помогне в бъдеще да се избегнат много "ненужни" грешки при писане на код.

Оператор за изваждане (-)

Операторът за изваждане прави две неща: използва се за изваждане на едно число от друго; обозначава унарен знак минус (това е знакът минус, който се поставя пред число, за да покаже, че то е отрицателно число). Поставянето на унарен минус пред променлива или израз е същото като умножаването на това число по -1.

И двата операнда в израза за изваждане трябва да са числови променливи (изрази) или низови изрази, които VBA може да конвертира в число. Можете да използвате оператора за изваждане, за да работите с дати.

VBA използва същите правила за определяне на типа данни на резултата от израз за изваждане, както за изрази, които използват оператора за добавяне. Но има едно допълнение:

· Ако и двата операнда в израза са от тип Date, тогава резултатът от израза ще бъде от тип Double.

Оператор за умножение (*)

Операторът за умножение умножава две числа - резултатът от израза за умножение е произведението на двата операнда. И двата операнда в израза за умножение трябва да са числови изрази или низове, които VBA може да преобразува в число.

VBA следва същите правила за определяне на типа данни на резултата от израз за умножение, както и за изрази, които използват оператора за добавяне. В изразите за умножение всички променливи Variant, които съдържат стойности на Date, се преобразуват в числови стойности.

Оператор на разделяне (/)

Операторът за деление с плаваща запетая извършва обичайното аритметично деление на своите операнди.

В изразите за деление първият операнд се разделя на втория операнд - резултатът от делението е частното.

И двата операнда в израз за деление с плаваща запетая трябва да са числови изрази или низове, които VBA може да конвертира в число.

Ако поне един операнд в израза за деление е от тип Null, тогава резултатът от делението също ще бъде Null.

Типът данни на операцията за деление с плаваща запетая е Double, с изключение на:

И двата операнда в израза за деление са от тип Integer или Single – резултатът от Single;

Ако резултатът от израза не надхвърли диапазона от стойности за единичния тип.

Цялочислено деление (\)

Целочисленото деление се различава от делението с плаваща запетая по това, че резултатът винаги е цяло число без дробна част.

И двата операнда в израз за целочислено деление трябва да са числови изрази или низове, които VBA може да конвертира в число.

Преди да извърши операция за целочислено деление, VBA закръгля всеки операнд до число от тип Integer или Long (същия тип като резултата от целочисленото деление).

VBA отхвърля (но не закръгля!) всеки дробен остатък от резултата от израз за целочислено деление. Например, изразите 22\5 и 24\5 ще имат същия резултат = 4.

Ако поне един операнд в израз за целочислено деление е от тип Null, тогава резултатът от делението също е Null.

Modulo Division (Mod)

Модулното деление, така да се каже, допълва целочисленото деление. При деление по модул изразът връща само остатъка от операцията деление като цяло число.

22 Mod 5 = 2

24 Mod 5 = 4

25 Mod 5 = 0

Останалите свойства на модулното деление са идентични с целочисленото деление.

степенуване (^)

Операторът за степенуване повдига число на степен.

5 ^ 3 =125

И двата оператора в израза за степенуване трябва да са числови изрази или низове, които VBA може да конвертира в числа.

Операндът отляво на оператора за степенуване може да бъде отрицателно число само ако операндът отдясно е цяло число.

Резултатът от израза е от тип Double.

Ако поне един операнд в израза е от тип Null, тогава резултатът от степенуването също ще бъде Null.

Нека обобщим горното:

ЛОГИЧЕСКИ ОПЕРАТОРИ на VBA

Като операнд за логически оператор можете да използвате всеки валиден израз, който има булев резултат, както и число, което може да бъде преобразувано в булева стойност.

Резултатът от логическа операция е стойност от тип Boolean (или Null, ако поне един от операндите е Null).

Логически оператор И

СИНТАКСИС:

Операнд_1 И Операнд_2

Операторът И изпълнява логическа връзка.

Резултатът от тази операция е True само когато и двата операнда са True, в противен случай False.

таблица на истината

Операторът И може да се използва за множество операнди:

(5<7) AND (4>3) И (5=6) резултатът ще бъде False

Независимо от броя на операндите, резултатът е логически И операциище бъде True само ако всички операнди на израза се изчислят като True. Във всеки друг случай резултатът ще бъде False. Имайте предвид, че операндите са оградени в скоби. VBA първо оценява стойността на всеки операнд в скобите, а след това и целия израз.

Логически оператор ИЛИ

СИНТАКСИС:

Операнд_1 ИЛИ Операнд_2

Операторът OR изпълнява логическа дизюнкция.

Резултатът от тази операция е True, ако поне един от операндите е True, в противен случай False.

таблица на истината

Операторът OR може да се използва за множество операнди:

(5<7) OR (4>3) OR (5=6) резултатът ще бъде True

Независимо от броя на операндите, резултатът от логическата операция ИЛИ винаги ще бъде True, ако поне един от операндите на израза се изчисли като True. В противен случай резултатът ще бъде False.

Операторите И и ИЛИ могат да се комбинират:

((5<7) AND (4>3)) ИЛИ (5=6) резултатът ще бъде True

Булев оператор NOT

СИНТАКСИС:

НЕ операнд

НЕ операторизпълнява логическо отрицание.

Операторът NOT използва само един операнд.

таблица на истината

Операторите И ИЛИ НЕ могат да се комбинират:

((5<7) AND (4>3)) ИЛИ НЕ (5=6) резултатът ще бъде True

Логически оператор XOR

СИНТАКСИС:

Операнд_1 XOR Операнд_2

Операторът XOR изпълнява логично изключение.

Резултатът от тази операция е True, ако операндите имат различни значения, в противен случай - False.

таблица на истината

((5<7) AND (4>3)) ИЛИ НЕ (5=6) XOR (5=5) резултатът е False

Логически оператор EQV

СИНТАКСИС:

Операнд_1 EQV Операнд_2

Операторът EQV е операторът логическа еквивалентност.

Резултатът от тази операция е True, ако операндите имат една и съща стойност, в противен случай False.

таблица на истината

((5<7) AND (4>3)) ИЛИ НЕ (5=6) EQV (5=5) ще доведе до True.

Оператори за сравнение

Обикновено операциите за сравнение се използват в оператори за цикъл, за да се вземе някакво решение относно по-нататъшния ход на операциите.

Резултатът от всяка операция за сравнение е булева стойност: True, False.

Ако и двата операнда в израз за сравнение са от един и същи тип данни, VBA извършва просто сравнение на този тип.

Ако и двата операнда в израз за сравнение са от определени типове и тези типове не са съвместими, VBA издава грешка при несъответствие на типа.

Ако един или двата операнда в израза за сравнение са променливи от тип Variant, VBA се опитва да преобразува типа Variant в някакъв съвместим тип.

Оператори на VBA: аритметика, булеви, сравнения, присвоявания

Операторе най-малката единица VBA код, която може да работи. Изявление може да декларира или дефинира променлива, да зададе опция за VBA компилатор или да извърши някакво действие в програма.

Във VBA има само 7 аритметични оператора.Четири стандартни: събиране (+), изваждане (-), умножение (*), деление (/) и още три:

  • степенуване (^), например 2^3 = 8 ;
  • целочислено деление (\). Дели първото число на второто, изхвърляйки (не закръглявайки) дробна част. Например, 5\2 = 2 ;
  • деление по модул (Mod). Дели първото число на второто, като връща само остатъка от делението. Например, 5 Mod 2 = 1.

Операторът за присвояване във VBA е знакът за равенство. Може да се напише така:

Нека nVar = 10

или още по-просто:

nvar = 10

Във втория случай не бъркайте знака за равенство с оператора за равенство.

Изразяване

nvar = 10

означава "задайте променливата nVar на 10" и ако редът изглежда така:

Ако (nVar = 10)

това означава "ако стойността на променливата nVar е равна на 10".

Ако трябва да присвоите обект на променлива, това се прави по други начини.

Във VBA има само 8 оператора за сравнение:

  • равенство (=), например, Ако (nVar = 10);
  • по-голямо от и по-малко от (> и<), например, Ако (nVar > 10);
  • по-голямо или равно на и по-малко или равно на (>= и<=), например, Ако (nVar >= 10);
  • не е равно (<>), например, Ако (nVar<>10) ;
  • сравнение на обекти (I). Определя дали обектните променливи се отнасят към един и същи обект или към различни, например, Ако (obj1 е obj2);
  • сходство (Харесва ми). Сравнява низов обект с шаблон и определя дали шаблонът съвпада.

Операторите за сравнение винаги връщат true или false - true, ако твърдението е вярно, и false, ако е невярно.

Малко за сравняването на низови стойности:

  • когато сравнявате низови стойности, главните и малките букви са чувствителни;
  • интервалите в низовите стойности също се вземат предвид;
  • при сравняване текстови низовеповече/по-малко по подразбиране се сравняват просто двоични кодовегерои - какво повече или по-малко. Ако трябва да използвате реда, който върви в азбуката, можете да използвате командата

Опция Сравнете текст

Още малко за оператора Like. Общият му синтаксис изглежда така

Израз1 Като Израз2

В този случай Expression1 е всеки текстов израз на VBA, а Expression2 е шаблон, който се предава на оператора Like. Можете да използвате специални заместващи символи в този модел (вижте Таблица 3.1)

Раздел. 3.1Заместващи знаци за оператора LIKE

Много често при тестване на няколко условия се използват логически оператори:

  • И - логическо И, и двете условия трябва да са верни;
  • ИЛИ - логическо ИЛИ, поне едно от условията трябва да е вярно;
  • NOT - логическо отрицание, връща TRUE, ако условието е невярно;
  • XOR е логично изключение. В израз E1 XOR, E2 връща TRUE, ако само E1 = TRUE или само E2 = TRUE, в противен случай FALSE;
  • EQV - еквивалентност на два израза, връща TRUE, ако имат еднаква стойност;
  • IMP - импликация, връща FALSE, ако E1 = TRUE и E2 = FALSE, в противен случай TRUE.

Трябва да запомните И, ИЛИ, НЕ, други логически оператори се използват рядко.

Почти всяка програма на VBA използва оператори за конкатенация. Има два от тях във VBA - + или &. Препоръчва се винаги да се използва & защото:

  • при използване на & се извършва автоматично преобразуване на числови стойности в низове - няма опасност от грешка;
  • когато използвате оператора +, добавянето на низова стойност към стойност от тип Null дава Null.

MsgBox „Съобщение до потребителя“ & vUserName

Редът, в който се прилагат операторите, може да се контролира с помощта на скоби.

Нека да разгледаме по-подробно как VBA извършва аритметични операции като събиране, изваждане, умножение, деление и степенуване, както и специални операции като целочислено деление и модулно. Таблицата по-долу показва знаците за операции, използвани при писане на аритметични VBA изрази.

Изразът е стойност или група от стойности, които изразяват една стойност. Резултатът от израз е една стойност от определен тип данни. Знаците (обозначенията) на операциите се използват за работа с определени стойности в изрази. За да присвоите резултата от израз на променлива, се използва операторът за присвояване (=), който съхранява каквато и да е стойност, представена от израза вдясно от оператора за присвояване, в мястото на паметта, посочено от променливата вляво от този оператор.

Във всички операции по-долу и двата операнда трябва да са числови изрази или низове, които VBA може да конвертира в число.

Допълнение

Знакът (+) се използва за извършване на операция за събиране. Термините трябва да са числови изрази, низове, които VBA може да преобразува в числа, или дати, които също могат да се използват за аритметика.

Sub Slozhenie() "Пример за аритметичен израз със знак "+" Dim A1, A2, A3 As Integer "деклариране на променливи A1=1 "присвояване на стойност 1 на променлива A1 A2=2 "присвояване на стойност 2 на променлива A2 A3=A1+A2 "присвояване на резултата добавяне на променлива A3 MsgBox A3 "Изход A3 в диалоговия прозорец End Sub

Типът данни на резултата от израз за добавяне обикновено е същият като най-точния тип в този израз, с няколко изключения. Всички изключения от това правило са ясно показани в примерите.

Изваждане

Знакът (-) се използва за извършване на операция за изваждане, както и за обозначаване на отрицателни числа (когато е поставен пред променлива или израз и означава същото като умножение по -1). Знак минус, който се поставя пред число, за да покаже, че числото е отрицателно, се нарича унарен знак минус.

За да определи типа данни на резултата от израз за изваждане, VBA следва същите правила като за изрази, които използват знака на оператора за добавяне, но има две допълнителни правила.

Правило 1. Ако един от операндите в израз за изваждане е от тип Дата, тогава резултатът от израза също ще бъде от тип Дата.

Правило 2. Ако и двата операнда в израз за изваждане са от тип Date, тогава резултатът от израза ще бъде от тип Double.

Sub Vychitanie() "Пример за аритметичен израз със знак "-" Dim D1, D2 As Date "декларация на променлива D1=Now "присвояване на стойност текуща датапроменлива D1 D2=Now-5 "присвоява стойност на дата на променлива D2 MsgBox TypeName(D2), vbOKOnly, "Now-5" MsgBox TypeName(D1-D2), vbOKOnly, "D1-D2" End Sub

Умножение

Знакът (*) се използва за извършване на операция за умножение, резултатът от тази операция е произведението на операндите. За да определи типа данни на резултата от израз за умножение, VBA използва същите правила като за изрази, които използват събиране. В изразите за умножение всички променливи Variant, съдържащи стойности на Date, се преобразуват в числови стойности.

"Пример за аритметични изрази със знак "*" 4*10 "умножете 4 по 10 MyVar*2 "умножете MyVar по 2 MyVar*OtherVar "умножете MyVar по OtherVar

дивизия

Знакът (/) се използва за извършване на операцията деление, този знак се нарича знак за деление на реални числа. В изразите за деление единият операнд се дели на другия и резултатът от делението е частно.

"Пример за аритметични изрази със знак"/"10/4" разделете 10 на 4 MyVar/2 "разделете MyVar на 2 MyVar/OtherVar" разделете MyVar на OtherVar

Ако който и да е операнд в израз за деление се изчисли като Null, тогава резултатът от израза също е Null. Типът данни в изразите за реално деление обикновено е Double, но има изключение.

Ако и двата операнда в израза за деление са от тип Integer или Single, тогава резултатът от израза за деление е от тип Single. Ако резултатът надхвърли диапазона за Single, VBA го преобразува в Double.

Целочислено деление

Знакът (\) се използва за извършване на целочислено деление, при което резултатът от делението винаги е цяло число без дробна част. VBA не закръгля частното от целочислено деление, а просто го съкращава до цяло число, изхвърляйки дробната част.

Типът данни на резултата от израз за целочислено деление е или Integer, или Long. VBA използва най-малкия тип данни, който съответства на резултата от израза.

"Пример за аритметични изрази със знака "\" 10\4 "разделете 10 на 4; връща стойността 2 MyVar\2 "разделяне на MyVar на 2 MyVar\OtherVar "разделяне на MyVar на OtherVar

Деление по модул

Знакът (Mod) се използва за извършване на операцията по модул. При деление по модул изразът връща само остатъка от делението като цяло число.

"Пример за аритметични изрази със знак "Mod" 8 Mod 2 "връща стойността 0; 5.1 Mod 3 "връща стойността 2; 6 Mod MyVar "ако MyVar съдържа 3, връща 0

Разбираемо обяснение на това математическа операциядадено в един от форумите на програмисти. Ще цитирам от там: „представете си, че има пълна туба от 50 л и туба от 3 л. И започвате да черпите вода от бидона с бидон (можете да изтеглите само пълен бидон). Изгребват 48 л, остават 2 литра .." С други думи, 50 Mod 3 връща 2.

Типът данни на резултата от модулен израз е Integer или Long. VBA използва най-малкия тип, който отговаря на резултата от израза.

степенуване

Знакът (^) се използва за извършване на операцията за степенуване на число или израз. Експонентата показва колко пъти едно число или израз трябва да се умножи сам по себе си.

„Примерен аритметичен израз със знак „^“ 3 ^ 3“ е същият като 3*3*3, връща стойността 27


Оператор за присвояване (=)

Операторът за присвояване се използва за присвояване на резултата от израз към променлива.

Операторът за присвояване има две синтактични форми:

1 Нека varname = израз
2 име на променлива = израз


varname- всяка променлива на VBA

изразяване- произволен VBA израз


Първата версия на оператора за присвояване се използва в ранните основни езици за програмиране. Втората опция се използва в съвременната версия на VBA.


Когато изпълнява оператор за присвояване, VBA първо оценява израза отдясно на оператора за присвояване и след това съхранява резултата от израза в променливата, чието име е вляво от знака за равенство.


X = 5 + 7; Y = X + 5; Z = X - Y; A=B; I = I + 1


Начинаещите потребители понякога не разбират значението на последната операция за присвояване, когато и лявата, и дясната част на операцията съдържат една и съща променлива. В този случай първо резултатът от изчисляването на израза от дясната страна на оператора за присвояване се поставя в междинната клетка на паметта и след това този резултат се присвоява на променливата от лявата страна.

Например, ако в оператора за присвояване A = A +5, променливата A преди операцията за присвояване е съдържала стойност 7, то след операцията тя ще съдържа стойност 12 (7+5).

Трябва да се помни:

  • Можете да присвоите всяка числова променлива (или израз) на всяка друга променлива от числов тип (или променлива от тип Variant);
  • Ако присвоите числов израз на въведена променлива с по-ниска точност (например Double - Long), VBA закръгля стойността на израза, за да съответства на точността на променливата, която приема новата стойност;
  • Когато на променлива String се присвои вариант, съдържащ число, VBA автоматично преобразува числото в низ.

Оператор за добавяне (+)

Операторът за събиране извършва просто събиране. И двата операнда трябва да са числови изрази или низове, които VBA може да конвертира в число. Операторът за събиране може също да се използва за извършване на аритметични операции върху данни за дата.


Типът данни на резултата от израз за добавяне обикновено е същият като най-точния тип в този израз. Но има изключения:

  • Резултатът от събирането на тип Single и Long е Double;
  • Добавянето на тип Дата към всеки друг тип данни винаги ще доведе до Дата;
  • Ако резултатът надхвърля диапазона от тип Integer, тогава VBA го преобразува в Long;
  • Ако резултатът надвишава типовете Long, Single, Date, VBA го преобразува в Double;
  • Ако някой операнд в израза за добавяне е Null, тогава резултатът от израза за добавяне също е Null.

Припомнете си реда на нарастване на точността за числови типове данни: байт, цяло число, дълъг, единичен, двоен, валута.

Трябва да се каже, че човек трябва ясно да разбере как VBA преобразува типовете данни в резултат на аритметични операции. Това ще помогне в бъдеще да се избегнат много "ненужни" грешки при писане на код.

Оператор за изваждане (-)

Операторът за изваждане прави две неща: използва се за изваждане на едно число от друго; обозначава унарен знак минус (това е знакът минус, който се поставя пред число, за да покаже, че то е отрицателно число). Поставянето на унарен минус пред променлива или израз е същото като умножаването на това число по -1.


И двата операнда в израза за изваждане трябва да са числови променливи (изрази) или низови изрази, които VBA може да конвертира в число. Можете да използвате оператора за изваждане, за да работите с дати.

VBA използва същите правила за определяне на типа данни на резултата от израз за изваждане, както за изрази, които използват оператора за добавяне. Но има едно допълнение:
Ако и двата операнда в израза са от тип Date, тогава резултатът от израза ще бъде от тип Double.

Оператор за умножение (*)

Операторът за умножение умножава две числа - резултатът от израза за умножение е произведението на двата операнда. И двата операнда в израза за умножение трябва да са числови изрази или низове, които VBA може да преобразува в число.

VBA следва същите правила за определяне на типа данни на резултата от израз за умножение, както и за изрази, които използват оператора за добавяне. В изразите за умножение всички променливи Variant, които съдържат стойности на Date, се преобразуват в числови стойности.

Оператор на разделяне (/)

Операторът за деление с плаваща запетая извършва обичайното аритметично деление на своите операнди.

В изразите за деление първият операнд се разделя на втория операнд - резултатът от делението е частното.

И двата операнда в израз за деление с плаваща запетая трябва да са числови изрази или низове, които VBA може да конвертира в число.

Ако поне един операнд в израза за деление е от тип Null, тогава резултатът от делението също ще бъде Null.

Типът данни на операцията за деление с плаваща запетая е Double, с изключение на:

  • И двата операнда в израза за деление са от тип Integer или Single – резултатът от Single;
  • Ако резултатът от израза не надхвърли диапазона от стойности за единичния тип.

Цялочислено деление (\)

Целочисленото деление се различава от делението с плаваща запетая по това, че резултатът винаги е цяло число без дробна част.

И двата операнда в израз за целочислено деление трябва да са числови изрази или низове, които VBA може да конвертира в число.

Преди да извърши операция за целочислено деление, VBA закръгля всеки операнд до число от тип Integer или Long (същия тип като резултата от целочисленото деление).

VBA отхвърля (но не закръгля!) всеки дробен остатък от резултата от израз за целочислено деление. Например, изразите 22\5 и 24\5 ще имат същия резултат = 4.

Ако поне един операнд в израз за целочислено деление е от тип Null, тогава резултатът от делението също е Null.

Modulo Division (Mod)

Модулното деление, така да се каже, допълва целочисленото деление. При деление по модул изразът връща само остатъка от операцията деление като цяло число.
22 Mod 5 = 2
24 Mod 5 = 4
25 Mod 5 = 0

Останалите свойства на модулното деление са идентични с целочисленото деление.

степенуване (^)

Операторът за степенуване повдига число на степен.



И двата оператора в израза за степенуване трябва да са числови изрази или низове, които VBA може да конвертира в числа.

Операндът отляво на оператора за степенуване може да бъде отрицателно число само ако операндът отдясно е цяло число.

Резултатът от израза е от тип Double.

Ако поне един операнд в израза е от тип Null, тогава резултатът от степенуването също ще бъде Null.


Нека обобщим горното.