Àðèôìåòè÷åñêèå îïåðàòîðû VBA
Îïåðàòîð ïðèñâàèâàíèÿ (=)
Îïåðàòîð ïðèñâàèâàíèÿ èñïîëüçóåòñÿ äëÿ ïðèñâàèâàíèÿ ðåçóëüòàòà âûðàæåíèÿ ïåðåìåííîé.
Îïåðàöèÿ ïðèñâàèâàíèÿ èìååò äâå ñèíòàêñè÷åñêèå ôîðìû:
1 Let varname = expression
2 varname = expression
varname - ëþáàÿ ïåðåìåííàÿ VBA
expression - ëþáîå âûðàæåíèå VBA
Ïåðâûé âàðèàíò îïåðàöèè ïðèñâàèâàíèÿ èñïîëüçîâàëñÿ â ðàííèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ Basic. Âòîðîé âàðèàíò èñïîëüçóåòñÿ â ñîâðåìåííîé âåðñèè VBA.
Ïðè âûïîëíåíèè îïåðàòîðà ïðèñâàèâàíèÿ VBA ñíà÷àëà âû÷èñëÿåò âûðàæåíèå ñïðàâà îò îïåðàòîðà ïðèñâàèâàíèÿ, à çàòåì ñîõðàíÿåò ðåçóëüòàò âûðàæåíèÿ â ïåðåìåííîé, èìÿ êîòîðîé íàõîäèòñÿ ñëåâà îò çíàêà ðàâåíñòâà.
X = 5 + 7; Y = X + 5 ; Z = X - Y; A = B; I = I + 1
Íà÷èíàþùèì ïîëüçîâàòåëÿì èíîãäà íåïîíÿòåí ñìûñë ïîñëåäíåé îïåðàöèè ïðèñâàèâàíèÿ, êîãäà è â ëåâîé, è â ïðàâîé ÷àñòÿõ îïåðàöèè ñòîèò îäíà è òà æå ïåðåìåííàÿ.  ýòîì ñëó÷àå ñíà÷àëà â ïðîìåæóòî÷íóþ ÿ÷åéêó ïàìÿòè ïîìåùàåòñÿ ðåçóëüòàò âû÷èñëåíèÿ âûðàæåíèÿ ïðàâîé ÷àñòè îïåðàòîðà ïðèñâàèâàíèÿ, à çàòåì ýòîò ðåçóëüòàò ïðèñâàèâàåòñÿ ïåðåìåííîé â ëåâîé ÷àñòè.
Íàïðèìåð, åñëè â îïåðàòîðå ïðèñâàèâàíèÿ À = À +5, ïåðåìåííàÿ À äî îïåðàöèè ïðèñâàèâàíèÿ ñîäåðæàëà çíà÷åíèå 7, òî ïîñëå îïåðàöèè îíà áóäåò ñîäåðæàòü çíà÷åíèå 12 (7+5).
Ñëåäóåò çàïîìíèòü:
- Ìîæíî ïðèñâàèâàòü ëþáóþ ÷èñëåííóþ ïåðåìåííóþ (èëè âûðàæåíèå) ëþáîé äðóãîé ïåðåìåííîé ÷èñëåííîãî òèïà (èëè ïåðåìåííîé òèïà Variant);
- Åñëè ïðèñâàèâàåòñÿ ÷èñëåííîå âûðàæåíèå òèïèçèðîâàííîé ïåðåìåííîé ñ ìåíüøåé òî÷íîñòüþ (íàïðèìåð, Double - Long), VBA îêðóãëÿåò çíà÷åíèå âûðàæåíèÿ äëÿ ñîâïàäåíèÿ ñ òî÷íîñòüþ ïåðåìåííîé, ïðèíèìàþùåé íîâîå çíà÷åíèå;
- Åñëè ïåðåìåííîé òèïà String ïðèñâàèâàåòñÿ ïåðåìåííàÿ òèïà Variant, ñîäåðæàùàÿ ÷èñëî, VBA àâòîìàòè÷åñêè ïðåîáðàçóåò ýòî ÷èñëî â ñòðîêó.
Îïåðàòîð ñëîæåíèÿ (+)
Îïåðàòîð ñëîæåíèÿ âûïîëíÿåò ïðîñòîå ñëîæåíèå. Îáà îïåðàíäà äîëæíû áûòü ÷èñëåííûìè âûðàæåíèÿìè èëè ñòðîêàìè, êîòîðûå VBA ìîæåò ïðåîáðàçîâàòü â ÷èñëî. Îïåðàòîð ñëîæåíèÿ ìîæíî òàêæå èñïîëüçîâàòü äëÿ âûïîëíåíèÿ àðèôìåòè÷åñêèõ îïåðàöèé ñ äàííûìè òèïà Date.
Òèï äàííûõ ðåçóëüòàòà âûðàæåíèÿ ñëîæåíèÿ îáû÷íî òîò æå, ÷òî è íàèáîëåå òî÷íûé òèï â ýòîì âûðàæåíèè. Íî, åñòü èñêëþ÷åíèÿ:
- Ðåçóëüòàòîì ñëîæåíèÿ òèïà Single è Long áóäåò Double;
- Ðåçóëüòàòîì ñëîæåíèÿ òèïà Date ñ ëþáûì äðóãèì òèïîì äàííûõ âñåãäà áóäåò Date;
- Åñëè ðåçóëüòàò ïðåâûøàåò äèàïàçîí òèïà Integer, òî VBA ïðåîáðàçóåò åãî â Long;
- Åñëè ðåçóëüòàò ïðåâûøàåò òèïû Long, Single, Date, òî VBA ïðåîáðàçóåò åãî â Double;
- Åñëè ëþáîé îïåðàíä â âûðàæåíèè ñëîæåíèÿ ÿâëÿåòñÿ Null, òî ðåçóëüòàòîì âûðàæåíèÿ ñëîæåíèÿ òàêæå áóäåò Null.
Íàïîìíèì ïîðÿäîê óâåëè÷åíèÿ òî÷íîñòè äëÿ ÷èñëåííûõ òèïîâ äàííûõ: Byte, Integer, Long, Single, Double, Currency.
Ñëåäóåò ñêàçàòü, ÷òî íàäî ÷åòêî ïîíèìàòü êàê VBA ïðåîáðàçóåò òèïû äàííûõ â ðåçóëüòàòå àðèôìåòè÷åñêèõ îïåðàöèé. Ýòî ïîìîæåò â äàëüíåéøåì èçáåæàòü ìíîãèõ "íåíóæíûõ" îøèáîê ïðè íàïèñàíèè êîäà.
Îïåðàòîð âû÷èòàíèÿ (-)
Îïåðàòîð âû÷èòàíèÿ âûïîëíÿåò äâå çàäà÷è: èñïîëüçóåòñÿ äëÿ âû÷èòàíèÿ îäíîãî ÷èñëà èç äðóãîãî; îáîçíà÷àåò óíàðíûé ìèíóñ (ýòî çíàê ìèíóñ, êîòîðûé ïîìåùàåòñÿ ïðåä ÷èñëîì äëÿ óêàçàíèÿ òîãî, ÷òî ýòî îòðèöàòåëüíîå ÷èñëî). Ïîìåñòèòü óíàðíûé ìèíóñ ïåðåä ïåðåìåííîé èëè âûðàæåíèåì îçíà÷àåò òî æå, ÷òî óìíîæèòü ýòî ÷èñëî íà -1.
Îáà îïåðàíäà â âûðàæåíèè âû÷èòàíèÿ äîëæíû áûòü ÷èñëåííûìè ïåðåìåííûìè (âûðàæåíèÿìè) èëè ñòðîêîâûìè âûðàæåíèÿìè, êîòîðîå VBA ìîæåò ïðåîáðàçîâàòü â ÷èñëî. Ìîæíî èñïîëüçîâàòü îïåðàòîð âû÷èòàíèÿ äëÿ ðàáîòû ñ äàòàìè.
VBA èñïîëüçóåò òå æå ïðàâèëà äëÿ îïðåäåëåíèÿ òèïà äàííûõ ðåçóëüòàòà âûðàæåíèÿ âû÷èòàíèÿ, ÷òî è äëÿ âûðàæåíèé, èñïîëüçóþùèõ îïåðàòîð ñëîæåíèÿ. Íî, åñòü äîïîëíåíèå:
Åñëè îáà îïåðàíäà â âûðàæåíèè ÿâëÿþòñÿ òèïîì Date, òî ðåçóëüòàò âûðàæåíèÿ áóäåò èìåòü òèï Double.
Îïåðàòîð óìíîæåíèÿ (*)
Îïåðàòîð óìíîæåíèÿ ïåðåìíîæàåò äâà ÷èñëà - ðåçóëüòàòîì âûðàæåíèÿ óìíîæåíèÿ ÿâëÿåòñÿ ïðîèçâåäåíèå äâóõ îïåðàíäîâ. Îáà îïåðàíäà â âûðàæåíèè óìíîæåíèÿ äîëæíû áûòü ÷èñëåííûìè âûðàæåíèÿìè èëè ñòðîêàìè, êîòîðûå VBA ìîæåò ïðåîáðàçîâàòü â ÷èñëî.
VBA ñëåäóåò òåì æå ïðàâèëàì äëÿ îïðåäåëåíèÿ òèïà äàííûõ ðåçóëüòàòà âûðàæåíèÿ óìíîæåíèÿ, ÷òî è äëÿ âûðàæåíèé, èñïîëüçóþùèõ îïåðàòîð ñëîæåíèÿ.  âûðàæåíèÿõ óìíîæåíèÿ âñå ïåðåìåííûå Variant, êîòîðûå ñîäåðæàò çíà÷åíèÿ òèïà Date, ïðåîáðàçóþòñÿ â ÷èñëåííûå çíà÷åíèÿ.
Îïåðàòîð äåëåíèÿ (/)
Îïåðàòîð äåëåíèÿ ñ ïëàâàþùåé òî÷êîé âûïîëíÿåò îáû÷íîå àðèôìåòè÷åñêîå äåëåíèå ñâîèõ îïåðàíäîâ.
 âûðàæåíèÿõ äåëåíèÿ ïåðâûé îïåðàíä äåëèòñÿ íà âòîðîé îïåðàíä - ðåçóëüòàòîì äåëåíèÿ ÿâëÿåòñÿ ÷àñòíîå.
Îáà îïåðàíäà â âûðàæåíèè äåëåíèÿ ñ ïëàâàþùåé òî÷êîé äîëæíû áûòü ÷èñëåííûìè âûðàæåíèÿìè èëè ñòðîêàìè, êîòîðûå VBA ìîæåò ïðåîáðàçîâàòü â ÷èñëî.
Åñëè õîòÿ áû îäèí îïåðàíä â âûðàæåíèè äåëåíèÿ èìååò òèï Null, òî ðåçóëüòàò äåëåíèÿ òàêæå áóäåò Null.
Òèïîì äàííûõ îïåðàöèè äåëåíèÿ ñ ïëàâàþùåé òî÷êîé ÿâëÿåòñÿ Double, çà èñêëþ÷åíèåì:
- Îáà îïåðàíäà â âûðàæåíèè äåëåíèÿ èìåþò òèï Integer èëè Single - ðåçóëüòàò Single;
- Åñëè ðåçóëüòàò âûðàæåíèÿ íå ïåðåïîëíÿåò äèàïàçîí çíà÷åíèé äëÿ òèïà Single.
Öåëî÷èñëåííîå äåëåíèå (\)
Öåëî÷èñëåííîå äåëåíèå îòëè÷àåòñÿ îò äåëåíèÿ ñ ïëàâàþùåé òî÷êîé òåì, ÷òî åãî ðåçóëüòàòîì âñåãäà åñòü öåëîå ÷èñëî áåç äðîáíîé ÷àñòè.
Îáà îïåðàíäà â âûðàæåíèè öåëî÷èñëåííîãî äåëåíèÿ äîëæíû áûòü ÷èñëåííûìè âûðàæåíèÿìè èëè ñòðîêàìè, êîòîðûå VBA ìîæåò ïðåîáðàçîâàòü â ÷èñëî.
Ïåðåä âûïîëíåíèåì îïåðàöèè öåëî÷èñëåííîãî äåëåíèÿ VBA îêðóãëÿåò êàæäûé îïåðàíä äî ÷èñëà òèïà Integer èëè Long (òàêîé æå òèï èìååò è ðåçóëüòàò öåëî÷èñëåííîãî äåëåíèÿ).
VBA îòáðàñûâàåò (íî íå îêðóãëÿåò!) ëþáîé äðîáíûé îñòàòîê ðåçóëüòàòà âûðàæåíèÿ öåëî÷èñëåííîãî äåëåíèÿ. Íàïðèìåð, âûðàæåíèÿ 22\5 è 24\5 áóäóò èìåòü îäèí è òîò æå ðåçóëüòàò = 4.
Åñëè õîòÿ áû îäèí îïåðàíä â âûðàæåíèè öåëî÷èñëåííîãî äåëåíèÿ èìååò òèï Null, òî ðåçóëüòàò äåëåíèÿ òàêæå áóäåò Null.
Äåëåíèå ïî ìîäóëþ (Mod)
Äåëåíèå ïî ìîäóëþ êàê áû äîïîëíÿåò öåëî÷èñëåííîå äåëåíèå.  äåëåíèè ïî ìîäóëþ âûðàæåíèå âîçâðàùàåò òîëüêî îñòàòîê îïåðàöèè äåëåíèÿ êàê öåëîå.
22 Mod 5 = 2
24 Mod 5 = 4
25 Mod 5 = 0
Îñòàëüíûå ñâîéñòâà äåëåíèÿ ïî ìîäóëþ èäåíòè÷íû öåëî÷èñëåííîìó äåëåíèþ.
Âîçâåäåíèå â ñòåïåíü (^)
Îïåðàòîð âîçâåäåíèÿ â ñòåïåíü âîçâîäèò ÷èñëî â ñòåïåíü.
5 ^ 3 =125
Îáà îïåðàòîðà â âûðàæåíèè âîçâåäåíèÿ â ñòåïåíü äîëæíû áûòü ÷èñëåííûìè âûðàæåíèÿìè èëè ñòðîêàìè, êîòîðûå VBA ìîæåò ïðåîáðàçîâàòü â ÷èñëà.
Îïåðàíä ñëåâà îò îïåðàòîðà âîçâåäåíèÿ â ñòåïåíü ìîæåò áûòü îòðèöàòåëüíûì ÷èñëîì òîëüêî, åñëè îïåðàíä ñïðàâà ÿâëÿåòñÿ öåëûì.
Ðåçóëüòàò âûðàæåíèÿ èìååò òèï Double.
Åñëè õîòÿ áû îäèí îïåðàíä â âûðàæåíèè èìååò òèï Null, òî ðåçóëüòàò âîçâåäåíèÿ â ñòåïåíü òàêæå áóäåò Null.
Ïîäâåäåì èòîã âûøåèçëîæåííîìó:
Àðèôìåòè÷åñêèå îïåðàòîðû VBA
Îïåðàòîð | Ñèíòàêñèñ | Îïèñàíèå |
+ | A + B | Ñëîæåíèå: ñêëàäûâàåò À è Â. |
- | A - B | Âû÷èòàíèå: âû÷èòàåò èç À Â. |
* | A * B | Óìíîæåíèå: ïåðåìíîæàåò À íà Â. |
/ | A / B | Äåëåíèå: äåëèò À íà Â. |
\ | A \ B | Öåëî÷èñëåííîå äåëåíèå: äåëèò À íà Â, îòáðàñûâàÿ äðîáíóþ ÷àñòü. Ðåçóëüòàò - öåëîå ÷èñëî. |
Mod | A Mod B | Äåëåíèå ïî ìîäóëþ: äåëèò À íà Â, âîçâðàùàÿ òîëüêî îñòàòîê îïåðàöèè äåëåíèÿ êàê öåëîå ÷èñëî. |
^ | A ^ B | Âîçâåäåíèå â ñòåïåíü: âîçâîäèò À â ñòåïåíü Â. |