Funcțiile de bază ale vba. Să creăm prima noastră funcție în Excel. Crearea unei funcții în VBA cu argumente opționale

28.03.2020 Recenzii

Dim nResult ca întreg

nMult1 = CInt(InputBox("Introduceți primul număr: ")) nMult2 = CInt(InputBox("Introduceți al doilea număr: ")) nResult = fMultiply(nMult1, nMult2)

Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd

4. Pentru a comenta codul AutoNew() , evidențiați tot codul pentru această procedură (inclusiv Public Sub AutoNew() și End Sub ) și faceți clic pe butonul Blocare comentarii din bara de instrumente Editare.

3.9. Funcții de limbaj VBA încorporate

3.9.1. Ce sunt funcțiile încorporate

ÎN Limbajul de programare VBA oferă câteva zecifuncții încorporate. Sunt disponibile în orice program VBA, indiferent în ce mediu produs software ne aflăm - Excel, Word, Access sau, de exemplu, AutoCAD. Sunt folosite foarte activ și în multe situații nu se poate face fără ele. Programatorii profesioniști le folosesc complet automat și utilizatori obișnuiți Aș dori să vă sfătuiesc să petreceți câteva ore pentru a le cunoaște, deoarece fără cunoașterea acestor funcții nu veți putea lucra eficient în VBA. Un argument suplimentar în favoarea studierii lor este că un set aproape identic de funcții se găsește în cele obișnuite Visual Basicși VBScript, iar multe dintre aceste funcții cu aceleași nume și sintaxă se găsesc în alte limbaje de programare - C++, Delphi, Java, JavaScript etc.

ÎN În ajutorul VBA, funcțiile încorporate sunt grupate după litere (Fig. 3.2).

Mulți participanți la cursuri au pus întrebarea: există ajutor pentru aceste funcții în limba rusă? Din păcate, nu am reușit să găsesc astfel de informații, așa că voi încerca să ofer o scurtă referință în această carte. În continuare, vom vorbi despre majoritatea funcțiilor utilizate în mod activ ale limbajului VBA (funcții matematice, cum ar fi cosinusul sau tangenta, care nu sunt aproape niciodată folosite în lucrările practice și nu vom lua în considerare funcțiile financiare). Pentru a economisi spațiu, nu va fi dată sintaxa completă a funcțiilor: principalul lucru este să înțelegeți ce face fiecare funcție și în ce situații poate fi utilizată.

Funcțiile din următoarele secțiuni sunt grupate în funcție de funcționalitate. Dacă aveți nevoie să găsiți informații doar după numele unei funcții, puteți utiliza index al subiectelor la sfârşitul cărţii.

Orez. 3.2. Ajutor pentru funcțiile încorporate

3.9.2. Funcții de conversie și de verificare a tipului de date

În programele VBA, este foarte frecvent convertirea valorilor de la un tip de date la altul. Îți dau câteva situatii tipice cand trebuie sa faci asta:

conversia dintr-o valoare șir într-o valoare numerică atunci când se primește o valoare de la utilizator prin InputBox() ;

Conversia unei valori date/ora într-o valoare șir atunci când trebuie să afișăm data sau ora în mod constant, indiferent de setările regionale de pe computerele utilizatorilor;

conversia unei valori dintr-un șir într-o dată/oră pentru a utiliza funcții speciale de dată/oră.

Cel mai adesea, pentru a converti tipuri de date, se folosesc funcții al căror nume constă din prefixul „C” (din cuvântul Convert) și numele tipului de date. Lista acestor funcții este următoarea: CBool(), CByte(), CCur(), CDate(),

CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr().

Puteți vedea ce s-a întâmplat în final folosind funcția TypeName(), care returnează numele tipului de date utilizat, de exemplu:

nVar1 = CInt(InputBox(„Introduceți o valoare”)) MsgBox TypeName(nVar1)

În acest caz, această funcție va returna „Integer” .

În plus, există câteva alte funcții utile pentru conversie.

Str() - vă permite să convertiți o valoare numerică într-un șir. Face aproape același lucru ca CStr(), dar inserează un spațiu înaintea numerelor pozitive.

Val() - „extrage” doar o valoare numerică dintr-un amestec de numere și litere. În acest caz, funcția citește datele de la stânga la dreapta și se oprește la prima valoare nenumerică (singura valoare nenumerică permisă este punctul, care va separa partea întreagă de partea fracțională). Este foarte convenabil când notăm unități de măsură sau monedă intercalate cu date numerice.

IsNumeric() și IsDate() - verificați coerența valorilor, astfel încât să nu existe erori în timpul conversiei. Pentru a verifica conformitatea cu valorile speciale, puteți utiliza funcțiile IsArray(), IsEmpty(),

IsError(), IsMissing(), IsNull() și IsObject() . Toate aceste funcții revin

Adevărat sau Fals în funcție de rezultatele verificării valorii transmise acestora.

Hex() și Oct() - Convertiți datele zecimale într-o reprezentare șir de valori hexazecimale și octale.

3.9.3. Funcții șiruri

Acestea sunt cele mai frecvent utilizate funcții. Sunt necesare în mod constant și trebuie să le cunoașteți foarte bine.

Asc() - această funcție vă permite să returnați codul numeric pentru caracterul transmis. De exemplu, Asc("D") va returna 68. Această funcție este utilă pentru a determina litera următoare sau anterioară. Este folosit de obicei împreună cu funcția Chr(), care efectuează operația inversă - returnează caracterul conform codului său numeric. De exemplu, acest cod în Excel vă permite să scrieți secvenţial literele alfabetului rus de la A la U în celulele A1 la A20:

Dim n, nCharCode Ca întreg n = 1

nCharCode = Asc("A") Do While n<= 20

ActiveWorkbook.ActiveSheet.Range(„A” și n).Value = Chr(nCharCode)

Sintaxă VBA și constructe de programare

nCharCode = nCharCode + 1 buclă

Variantele acestei funcții sunt AscB() și AscW() . AscB() returnează doar primul octet al codului numeric pentru caracter, în timp ce AscW() returnează codul Unicode pentru caracter.

Chr() - returnează un caracter prin codul său numeric. Pe lângă faptul că este folosit împreună cu funcția Asc() (vezi exemplul anterior), nu puteți face fără ea într-o altă situație: când trebuie să scoateți un caracter de serviciu. De exemplu, trebuie să introducem valoarea „Gazprom” (între ghilimele) în Word. Citatul este un caracter de serviciu și o încercare de a utiliza un șir de caractere ca:

Selection.Text = ""Gazprom""

va avea ca rezultat o eroare de sintaxă. Și așa va fi totul bine:

Selection.Text = Chr(34) & „Gazprom” & Chr(34)

Există variante ale acestei funcții - ChrB() și ChrW(). Ele funcționează în mod similar cu aceleași opțiuni pentru funcția Asc().

InStr() și InStrRev() sunt unele dintre cele mai populare funcții. Vă permite să detectați o secvență de caractere în corpul unei variabile șir și să returnați poziția acesteia. Dacă secvența nu este găsită, atunci este returnat 0. Funcția InStr() caută de la începutul șirului, iar InStrRev() caută de la sfârșit.

Left() , Right() , Mid() - vă permit să luați numărul de caractere pe care îl specificați dintr-o variabilă șir existentă în stânga, în dreapta sau în mijloc, respectiv.

Len() - returnează numărul de caractere din șir (lungimea șirului). Folosit adesea cu bucle, operații de înlocuire etc.

LCase() și UCase() - convertesc un șir în litere mici și, respectiv, majuscule. Adesea folosit pentru a pregăti valori pentru comparație atunci când cazul nu este important (nume de familie, nume de companii, orașe etc.).

LSet() și RSet() - umple o variabilă cu simboluri ale alteia fără a-i modifica lungimea (stânga și respectiv dreapta). Caracterele suplimentare sunt tăiate și spațiile sunt înlocuite cu caracterele lipsă.

LTrim() , RTrim() , Trim() - elimină spațiile din stânga, dreapta sau ambele din stânga și, respectiv, din dreapta.

Replace() - înlocuiește o secvență de caractere cu alta dintr-un șir.

Space() și String() - returnează un șir cu numărul de spații sau, respectiv, caractere specificate. De obicei folosit pentru a forma

Aproape tot codul de program al modulelor VBA este conținut în proceduri de două tipuri: Sub (subrutine) și Function (funcții). Sarcina principală a unei proceduri Function este să calculeze o anumită valoare și să o returneze la punctul în care este apelată procedura funcției.

Sintaxa procedurii funcției:

Funcție Nume_funcție(argumente As) As

Function_Name = Return_Value

Funcția de sfârșit

Procedurile de funcționare pot fi utilizate într-o varietate de expresii.

Exemplul 1

De exemplu, cea mai simplă procedură-funcție Funcție:

Funcția F1(x ca monedă) ca monedă

Funcția F1(x) poate fi utilizată în calcule ulterioare (codul modulului). O procedură de tip Funcție poate fi executată doar apelând-o dintr-o altă procedură. Pentru a face acest lucru, procedura de apelare trebuie să atribuie numele acestui F1(x) unei variabile.

Exemplul 2

De exemplu, Funcția F1(x) poate fi utilizată în procedura MySub() prin denumirea variabilei „y” F1(x).

Dim y As Single ‘Declarația variabilei y

y = F1 (9) ‘Să se determine F1 (x) pentru valoarea x=9

Debug.Print y ‘Imprimați valori în fereastra Imediat

Funcția F1 (x As Single) Ca Single

F1 = x^10 „Return valoarea lui x la puterea lui 10

Aici Funcția F1(x)=$x^(10)$ pentru valoarea $ x=9$ returnează valoarea $3.486785E+09$ la procedura de apelare MySub(). Dacă o valoare returnată de funcție sau o variabilă care este utilizată într-o procedură VBA nu are un tip de date declarat, tipul de date implicit va fi Variant.

VBA utilizează atât procedurile Function, cât și funcțiile încorporate.

Funcțiile încorporate constau din două părți: un nume (identificator) ​​și argumente. Funcțiile încorporate sunt formule VBA gata făcute care efectuează anumite acțiuni asupra expresiilor și returnează o anumită valoare în momentul apelului lor.

Funcțiile returnează o valoare rezultată în loc de numele lor, care este folosită în calcule ulterioare. De obicei, funcțiile necesită argumente, care sunt scrise între paranteze separate prin virgule. Dar unele funcții nu necesită argumente. De exemplu, funcția Now(), care nu necesită argumente, returnează data și ora curentă a sistemului. Funcțiile pot fi folosite pentru a crea expresii sau funcții noi.

Cum se inserează o funcție într-un text de program? Pentru a utiliza o funcție în expresii, trebuie să introduceți numele acesteia într-o instrucțiune VBA. Pentru a apela o funcție încorporată care nu necesită argumente, trebuie doar să introduceți numele acesteia (de exemplu, Acum) în codul programului modulului:

Sub MyDate()

Dim TD „Declarați o variabilă TD

TD = Acum „Determinați data și ora curentă a sistemului

Debug.Print TD „Tipărește valori în fereastra Imediat

Pentru a apela o funcție care necesită introducerea unuia sau mai multor argumente, trebuie să introduceți numele acesteia în partea dreaptă a operatorului de atribuire cu parametrii (valorile argumentului) încadrați în paranteze. De exemplu, pentru a apela Function Log (N) încorporat cu o variabilă N într-o procedură de tip Sub, variabilei Log_N i se atribuie numele funcției Log (50) cu o valoare a argumentului de 50.

Logaritm subnatural()

Dim LogN „Declarați variabila LogN

Debug.Print LogN „Tipărește valori în fereastra Imediat

Nota 1

Aici, funcția încorporată Log(N) pentru o valoare a argumentului de 50 returnează valoarea 3.91202300542815 la punctul de apelare Log(50) al procedurii de apelare „Sub Natural_logarithm()”. O funcție poate fi apelată fie folosind o instrucțiune VBA separată, fie plasând numele acesteia cu o listă de valori de argument (parametri) într-o formulă sau expresie într-un program VBA. VBA folosește imbricarea funcțiilor pentru a scurta notația, permițând ca un apel de funcție să fie specificat ca argument pentru o altă funcție. În acest caz, valoarea returnată a primei funcție este folosită ca argument pentru următoarea funcție.

VBA are un set mare de funcții și rutine încorporate care facilitează programarea, care pot fi împărțite în următoarele categorii:

  • matematic;
  • funcții de verificare a tipului;
  • funcții de procesare a șirurilor de caractere;
  • funcția de formatare;
  • funcții de conversie a formatului;
  • funcții de dată și oră.

Funcții matematice

Funcțiile matematice includ:

  • Abs (x) - modulul argumentului $x$;
  • Cos(x) - cosinusul argumentului $x$;
  • Exp(x) - ridicarea bazei logaritmului natural la puterea $x$;
  • Log(x) - logaritmul natural al argumentului $x$;
  • Rnd - număr aleator din interval;
  • Sin(x) - sinusul argumentului $x$;
  • Sqr(x) - rădăcină pătrată a lui $x$;
  • Atn(x) - arctangent de $x$;
  • Tan(x) – tangenta lui $x$;
  • Sgn(x) – semnul lui $x$.

Fix(x) și Int(x) ambele funcții elimină partea fracționară a unui număr și returnează o valoare întreagă. Diferența dintre aceste funcții este pentru valorile argumentelor negative. Int(x) returnează cel mai apropiat număr întreg negativ mai mic sau egal cu x, iar Fix(x) returnează cel mai apropiat număr întreg negativ mai mare sau egal cu x.

Funcții de verificare a tipului

Iată funcțiile care determină ce tip este o variabilă:

  • IsArray(x) – funcția verifică dacă variabila este o matrice;
  • IsDate(x) determină dacă variabila este o dată;
  • IsError(x) determină dacă variabila este un cod de eroare;
  • IsNull(x) determină dacă variabila este o valoare goală;
  • IsNumeric(x) determină dacă variabila este o valoare numerică;
  • IsObject(x) determină dacă o variabilă este un obiect.

Funcția de formatare

Funcția de formatare returnează o valoare Variant (Șir) care conține o expresie formatată în conformitate cu sintaxa funcției:

Format(Expresie[,Format [,Prima zi a săptămânii[,Prima săptămână a anului]]]), unde:

  • Expresie – un argument necesar (orice expresie validă – o combinație de cuvinte cheie, operatori, variabile și constante, al căror rezultat este un șir, număr sau obiect);
  • Formatul este un parametru opțional (orice expresie de format validă denumită sau definită de utilizator).

Dacă se adaugă semnul $ la numele funcției, atunci funcția returnează o valoare de tip String., apoi funcția returnează o valoare de tip String.

Când creați propriul format de număr, puteți utiliza următoarele caractere:

  • 0 – rezervă poziția bitului digital. Afișează o cifră sau zero. Dacă numărul formatat are orice cifră în acea poziție a cifrei unde există un 0 în șirul de format, funcția afișează acea cifră; dacă nu, atunci este afișat un zero în acea poziție;
  • „#” - acțiunea acestui simbol este similară cu acțiunea lui 0, cu singura diferență că nu sunt afișate zerouri nesemnificative;
  • . – rezervă poziția separatorului zecimal, determină câte cifre trebuie afișate în stânga și în dreapta punctului zecimal;
  • % - rezervă afișarea procentuală a unui număr;
  • . – separă sute de mii.

Funcții de conversie a formatului

Acestea includ:

  • Val(șir) – returnează numerele conținute în șir ca valoare numerică de tipul adecvat.
  • Str(number) – returnează o valoare Variant (String) care este o reprezentare șir a unui număr.

Pe lângă funcțiile Val și Str, există o serie de funcții pentru conversia tipurilor de expresii.

Funcții de procesare a șirurilor

Printre numeroasele funcții se numără următoarele:

  • Chr(code) – convertește codul ASCII într-un șir. De exemplu, Chr(10) efectuează o nouă linie, Chr(13) efectuează o întoarcere de cărucior;
  • Mid(șir, pos[,lungime]) – returnează un subșir al unui șir care conține numărul specificat de caractere, unde String este expresia șirului din care este extras subșirul;
  • Pos – poziția caracterului în String de la care începe subșirul dorit;
  • Lungime – numărul de caractere subșir returnate;
  • Len(șir) – returnează numărul de caractere dintr-un șir.

Funcții de oră și dată

Returnează o valoare Variant care conține data sistemului, ora curentă etc. De exemplu, funcția Date returnează o valoare care conține data sistemului.

Expresii aritmetice Visual Basic.

Partea teoretică

Expresii și funcții

LUCRARE DE LABORATOR Nr 4. Lucrul cu aritmetica

Întrebări pentru control

1. Ce componente vă permit să creați imagini statice în aplicație?

2. Cum se plasează o poză pe formular? Ce metode există în acest scop și care este diferența lor?

3. Ce formate de imagine se poate conecta componenta Image la aplicație?

4. Care proprietate a obiectului Image este responsabilă pentru scalare? Pentru vizibilitatea imaginii?

Scopul lucrării:se familiarizează cu expresiile aritmetice și funcțiile matematice ale limbajului Visual Basic; învață să dezvolte aplicații folosind expresii și funcții matematice

Expresiile sunt folosite pentru a efectua operații asupra datelor. În funcție de date și de operațiile utilizate, expresiile sunt împărțite în aritmetice, logice și simbolice

Expresii aritmetice este o succesiune de numere, constante, variabile, funcții care sunt conectate prin semne ale operațiilor aritmetice. Un caz special al unei expresii este pur și simplu o constantă, variabilă sau apel de funcție.

Operațiile aritmetice ale limbajului Visual Basic sunt prezentate în Tabelul 4.1.

Tabelul 4.1 – Operații aritmetice ale limbajului Visual Basic

O prioritate efectuați operații (în ordine descrescătoare): exponențierea, înmulțirea și împărțirea, împărțirea întregului, restul, adunarea și scăderea. Calculele se fac de la stânga la dreapta. Parantezele își schimbă precedența.

Exemple:

14 /5*2 = 5.6 – operațiile cu aceeași prioritate vor fi executate de la stânga la dreapta

14\5*2 = 1 – înmulțirea are o prioritate mai mare și în timpul împărțirii întregi partea fracțională este eliminată

27^1/3 = 9 – exponentiarea are cea mai mare prioritate

27^(1/3) = 3 – parantezele modifică succesiunea operațiilor

Visual Basic are o gamă largă de incorporat (standard) funcții care facilitează scrierea programelor. Există funcții matematice, funcții pentru procesarea șirurilor, funcții pentru lucrul cu datele și orele și cele financiare.

Funcții matematice:

Abs(x) – calculează modulul argumentului



Atn (x) – calculează arctangenta unui număr x

Sin (x) – calculează sinusul lui x

Cos (x) – calculează cosinusul unui număr x

Tan (x) – calculează tangenta unui număr x

Exp(x) – calculează e^x

Log(x) – calculează logaritmul natural

Sqr(x) – calculează rădăcina pătrată

Rnd() – returnează un număr aleatoriu cuprins între 0 și 1

Int (x) – calculează cel mai mare număr întreg care nu depășește x

Fix (x) – calculează un număr rotunjit (elimină partea fracțională a argumentului)

CInt(x) – returnează argumentul rotunjit la cel mai apropiat număr întreg conform regulilor matematice de rotunjire

Sgn (x) – returnează semnul unui număr

X^(1/n) – extrage a n-a rădăcină a lui X

Hex (x) – convertește un număr zecimal în hexazecimal

Oct(x) – convertește un număr zecimal în octal

Exemple de rotunjire a numerelor:

Int(7,32) = 7 CInt(5,5) = 6 Fix(-7,32) = -7

Int(-7,32) = -8 CInt(-7,5) = -7

Valorile argumentelor din funcțiile trigonometrice sunt date în radiani!

Pentru a converti un argument din grade în radiani, utilizați formula:

Argument (în radiani) = argument (în grade)*PI / 180

Numărul PI poate fi determinat prin formula:

PI = Atn(1)*4

Pentru informații complete despre funcțiile încorporate și despre cum să le utilizați, consultați sistemul de ajutor Visual Basic.

Tabelul 6.1. Funcții matematice încorporate
Funcţie Descriere
Abs Valoare absolută
Atn Arctangent
Cos Cosinusul unui număr
Exp Returnează numărul e (2,718282) ridicat la puterea argumentului funcției.
Fix Îndepărtează partea fracționară a unui număr și returnează numărul întreg. Ca rezultat, pentru numerele pozitive rezultatul este un număr mai mic decât intrarea (Fix(2.5) va returna 2), pentru numerele negative - un număr mai mare (Fix(-2.5) va returna -2)
Int Îndepărtează partea fracționară a unui număr și returnează numărul întreg. Pentru cele pozitive, rezultatul este un număr mai mic decât cel introdus (Int(2,5) va returna 2), pentru cele negative, același număr este mai mic (Int(-2,5) va returna -3).
Buturuga Se intoarce logaritmul natural numere
Rnd Returnează un număr aleator de tip Single, iar acest număr este între 0 și 1. Pentru a inițializa generatorul de numere aleatoare, utilizați directiva Randomize - trebuie apelat înainte de a apela Rnd.
Sgn Funcția este concepută pentru a determina semnul unui număr. Dacă numărul este pozitiv, returnează 1. Pentru zero, funcția va returna 0, pentru un număr negativ -1.
Păcat Sinusul
sqr Rădăcină pătrată
bronzat Tangentă

Să ne uităm la un exemplu. Să adăugăm un buton în documentul Microsoft Word, să-l numim cmd_Calc, să-l etichetăm ca Calcule și să adăugăm următorul cod (Listing 6.1), ilustrând funcționarea funcțiilor discutate.

Dim dblNumber As Double "Variabilă utilizată în calcule Dim varResult "Variabilă de tip Variant dblNumber = Val(InputBox("Introduceți un număr")) "Calculați valoarea absolută a numărului introdus "Mai întâi, atribuiți rezultatul variabilei varResult "Next , afișați rezultatul semnat în fereastra de mesaj, vom folosi semnul „+” pentru „concatenarea șirurilor, în alte cazuri „vom apela funcții direct „în MsgBox” e „Rețineți că convertim „valorile numerice în șiruri de caractere”. folosind funcția Str varResult = Abs(dblNumber) MsgBox ( "Valoare absolută " + _ Str(dblNumber) + " equals " + Str(varResult)) " Arctangent MsgBox ("Arctangent " + _ Str(dblNumber) + " equals " + _ Str(Atn(dblNumber))) "Cosine MsgBox ("Cosinus" + _ Str(dblNumber) + " este egal cu " + _ Str(Cos(dblNumber)))) "e la puterea numărului introdus MsgBox ("Numărul e la puterea " + _ Str(dblNumber) + " equals " + _ Str(Exp(dblNumber))) "Fix function MsgBox ("Rezultatul functiei Fix pentru " + _ Str(dblNumber) + " equals " + _ Str(Fix(dblNumber))) "Int function MsgBox ("Rezultatul functiei Int pentru " + _ Str(dblNumber) + " este egal cu " + _ Str(Int(dblNumber))) "Logaritm natural MsgBox ("Logaritm natural " + _ Str(dblNumber) + " equals " + _ Str(Log(dblNumber)) ) "Să obținem mai multe numere aleatorii "primul număr este de la 0 la 1" al doilea este de la 0 la 10. "Al treilea este de la 25 la 100 „Al patrulea este un număr întreg de la 0 la 34 Randomize MsgBox („Grup de numere aleatoare: „ + _ Str( Rnd()) + „, „ + _ Str(Rnd() * 10) + „, „ + _ Str(Rnd() * 75 + 25) + ", " + _ Str(Int(Rnd() * 34) )) "Funcția Sgn MsgBox ("Rezultatul Sgn pentru " + _ Str(dblNumber) + " este egal cu " + _ Str(Sgn(dblNumber))) "Sine MsgBox ("Sine" + _ Str(dblNumber) + " este egal cu " + _ Str(Sin(dblNumber))) "Rădăcina pătrată MsgBox ("Rădăcină pătrată" + _ Str( dblNumber) + " este egal cu " + _ Str(Sqr(dblNumber))) "Tangent MsgBox (" Tangent " + _ Str( dblNumber) + " equals " + _ Str(Tan(dblNumber))) Lista 6.1. Faceți clic pe butonul de gestionare a evenimentelor pentru cmd_Calc

Acordați atenție algoritmului pentru obținerea unui număr aleatoriu într-un anumit interval folosind funcția Rnd. Să presupunem că trebuie să obținem un număr aleatoriu de la 15 la 40. Să obținem, mai întâi, un număr de la 0 la 40. Evident, pentru asta avem nevoie de un apel ca acesta: Rnd()*40.

Pentru a „ridica” nivelul celui mai mic număr aleatoriu returnat de expresie la 15, procedați în felul următor.

Mai întâi, să calculăm diferența dintre 40 și 15 - obținem 25. Deci, pentru a obține un număr aleatoriu de la 0 la 25, puteți folosi apelul Rnd()*25.

În al doilea rând, adăugați 15 la numărul aleatoriu rezultat. Acum, expresia pentru obținerea unui număr aleatoriu de la 15 la 40 arată astfel: Rnd()*25+15.

Să verificăm corectitudinea acestei afirmații. Funcţie Rnd se știe că returnează numere aleatoare între 0 și 1. Dacă funcția returnează 0, rezultatul calculării expresiei va fi egal cu 15 (0*25+15) . Dacă funcția returnează 1, rezultatul va fi 40 (25*1+15) . Valori intermediare Rnd va da numerele aleatoare dorite între 15 și 40.

Manipulatorul de clic pe butonul cmd_Len (Listing 6.2) va conține o soluție la următoarea problemă: informați utilizatorul cu privire la lungimea textului introdus. Evident, pentru a rezolva această problemă avem nevoie de funcția Len.

"Variabilă pentru stocarea șirului de intrare Dim str_InpStr As String "Variabilă pentru stocarea lungimii găsite a șirului Dim lng_StrLen As Long str_InpStr = InputBox("Introduceți un șir") "Calculați lungimea șirului lng_StrLen = Len(str_InpStr) MsgBox () "Lungimea șirului introdus: _" + _ str_InpStr + "_ este egal cu " + Str(lng_StrLen) + _ " caractere") Lista 6.2. Exemplu de funcție Len

În fig. 6.2. puteți vedea rezultatul calculului lungimii șirului.


Orez. 6.2.

Acum să ne ocupăm de conversia caracterelor - funcțiile LCase și UCase (Listing 6. 3.).

"Variabilă pentru stocarea șirului de intrare Dim str_InpStr As String "Variabilă pentru stocarea șirului modificat Dim str_NewStr As String str_InpStr = InputBox("Introduceți text") "Str_NewStr va conține șirul introdus "în care toate majusculele sunt înlocuite cu minuscule str_NewStr = LCase(str_InpStr) MsgBox ("Șir schimbat: " + str_NewStr) "Acum în str_NewStr va fi același șir "în care toate literele au devenit majuscule str_NewStr = UCase(str_InpStr) MsgBox ("Șir modificat: " + str_NewStr) Lista 6.3. Un exemplu de utilizare a funcțiilor LCase și UCase

Următorul pe rând este decuparea caracterelor - funcțiile Mid, LTrim, Rtrim, Left, Right (Listing 6.4).Dintre aceste funcții, cea mai puternică este Mid - folosindu-l, puteți face o mulțime de lucruri cu șiruri.

„Variabilă pentru stocarea șirului de intrare Dim str_InpStr As String „Variabilă pentru stocarea caracterelor tăiate Dim str_NewStr As String „Să setăm un șir care să fie convenabil pentru a lucra cu str_InpStr = „Bună, Alexander „ „Funcții pentru eliminarea spațiilor „La ieșirea unei linii , puneți-l înainte de începutul „și se termină cu simbolul „_”, astfel încât prezența sau absența spațiilor să poată fi văzută mai bine MsgBox („Lucrăm cu următoarea linie: „ + _ „_” + str_InpStr + „_” ) "LTrim - atribuiți rezultatele muncii unei variabile și afișați informații în MsgBox str_NewStr = LTrim(str_InpStr) MsgBox ("Rezultatul LTrim: " + _ "_" + str_NewStr + "_") "RTrim MsgBox ("Rezultat de RTrim: " + _ "_" + RTrim(str_InpStr) + " _") "Trim MsgBox ("Rezultatul Trim: " + _ "_" + Trim(str_InpStr) + "_") "Stânga - tăiați 12 " caractere din șirul str_InpStr, ștergându-l mai întâi „de spațiile de început str_NewStr = Left(LTrim (str_InpStr), 12) MsgBox („Primele 12 caractere în stânga: „ + _ str_NewStr) „Dreapta - similar Tăiați 9 caractere în dreapta str_NewStr = Right(RTrim(str_InpStr), 9) MsgBox ("Primele 9 caractere din dreapta: " + _ str_NewStr ) "Funcția Mid - pentru început, vom scoate câte un caracter fiecare "din a doua și a cincisprezecea poziție a liniei" șters preliminar de spații suplimentare „la început și la sfârșit str_NewStr = Mid(Trim(str_InpStr), 2, 1) MsgBox ("Al doilea caracter al șirului introdus: " + _ str_NewStr) str_NewStr = Mid(Trim(str_InpStr), 15, 1) MsgBox ("Al cincisprezecelea caracter al șirului introdus: " + _ str_NewStr) "Vom scoate 5 caractere, începând cu al 15-lea caracter str_NewStr = Mid(Trim(str_InpStr), 15, 5) MsgBox ("Cinci caractere a liniei din a 15-a poziție: " + _ str_NewStr) Lista 6.4. Un exemplu de utilizare a funcțiilor pentru a tăia caractere

Acum să ne uităm la exemple despre cum funcționează funcțiile

Aproape tot codul de program al modulelor VBA este conținut în proceduri de două tipuri: Sub (subrutine) și Function (funcții). Sarcina principală a unei proceduri Function este să calculeze o anumită valoare și să o returneze la punctul în care este apelată procedura funcției.

Sintaxa procedurii funcției:

Funcție Nume_funcție(argumente As) As

Function_Name = Return_Value

Funcția de sfârșit

Procedurile de funcționare pot fi utilizate într-o varietate de expresii.

Exemplul 1

De exemplu, cea mai simplă procedură-funcție Funcție:

Funcția F1(x ca monedă) ca monedă

Funcția F1(x) poate fi utilizată în calcule ulterioare (codul modulului). O procedură de tip Funcție poate fi executată doar apelând-o dintr-o altă procedură. Pentru a face acest lucru, procedura de apelare trebuie să atribuie numele acestui F1(x) unei variabile.

Exemplul 2

De exemplu, Funcția F1(x) poate fi utilizată în procedura MySub() prin denumirea variabilei „y” F1(x).

Dim y As Single ‘Declarația variabilei y

y = F1 (9) ‘Să se determine F1 (x) pentru valoarea x=9

Debug.Print y ‘Imprimați valori în fereastra Imediat

Funcția F1 (x As Single) Ca Single

F1 = x^10 „Return valoarea lui x la puterea lui 10

Aici Funcția F1(x)=$x^(10)$ pentru valoarea $ x=9$ returnează valoarea $3.486785E+09$ la procedura de apelare MySub(). Dacă o valoare returnată de funcție sau o variabilă care este utilizată într-o procedură VBA nu are un tip de date declarat, tipul de date implicit va fi Variant.

VBA utilizează atât procedurile Function, cât și funcțiile încorporate.

Funcțiile încorporate constau din două părți: un nume (identificator) ​​și argumente. Funcțiile încorporate sunt formule VBA gata făcute care efectuează anumite acțiuni asupra expresiilor și returnează o anumită valoare în momentul apelului lor.

Funcțiile returnează o valoare rezultată în loc de numele lor, care este folosită în calcule ulterioare. De obicei, funcțiile necesită argumente, care sunt scrise între paranteze separate prin virgule. Dar unele funcții nu necesită argumente. De exemplu, funcția Now(), care nu necesită argumente, returnează data și ora curentă a sistemului. Funcțiile pot fi folosite pentru a crea expresii sau funcții noi.

Cum se inserează o funcție într-un text de program? Pentru a utiliza o funcție în expresii, trebuie să introduceți numele acesteia într-o instrucțiune VBA. Pentru a apela o funcție încorporată care nu necesită argumente, trebuie doar să introduceți numele acesteia (de exemplu, Acum) în codul programului modulului:

Sub MyDate()

Dim TD „Declarați o variabilă TD

TD = Acum „Determinați data și ora curentă a sistemului

Debug.Print TD „Tipărește valori în fereastra Imediat

Pentru a apela o funcție care necesită introducerea unuia sau mai multor argumente, trebuie să introduceți numele acesteia în partea dreaptă a operatorului de atribuire cu parametrii (valorile argumentului) încadrați în paranteze. De exemplu, pentru a apela Function Log (N) încorporat cu o variabilă N într-o procedură de tip Sub, variabilei Log_N i se atribuie numele funcției Log (50) cu o valoare a argumentului de 50.

Logaritm subnatural()

Dim LogN „Declarați variabila LogN

Debug.Print LogN „Tipărește valori în fereastra Imediat

Nota 1

Aici, funcția încorporată Log(N) pentru o valoare a argumentului de 50 returnează valoarea 3.91202300542815 la punctul de apelare Log(50) al procedurii de apelare „Sub Natural_logarithm()”. O funcție poate fi apelată fie folosind o instrucțiune VBA separată, fie plasând numele acesteia cu o listă de valori de argument (parametri) într-o formulă sau expresie într-un program VBA. VBA folosește imbricarea funcțiilor pentru a scurta notația, permițând ca un apel de funcție să fie specificat ca argument pentru o altă funcție. În acest caz, valoarea returnată a primei funcție este folosită ca argument pentru următoarea funcție.

VBA are un set mare de funcții și rutine încorporate care facilitează programarea, care pot fi împărțite în următoarele categorii:

  • matematic;
  • funcții de verificare a tipului;
  • funcții de procesare a șirurilor de caractere;
  • funcția de formatare;
  • funcții de conversie a formatului;
  • funcții de dată și oră.

Funcții matematice

Funcțiile matematice includ:

  • Abs (x) - modulul argumentului $x$;
  • Cos(x) - cosinusul argumentului $x$;
  • Exp(x) - ridicarea bazei logaritmului natural la puterea $x$;
  • Log(x) - logaritmul natural al argumentului $x$;
  • Rnd - număr aleator din interval;
  • Sin(x) - sinusul argumentului $x$;
  • Sqr(x) - rădăcină pătrată a lui $x$;
  • Atn(x) - arctangent de $x$;
  • Tan(x) – tangenta lui $x$;
  • Sgn(x) – semnul lui $x$.

Fix(x) și Int(x) ambele funcții elimină partea fracționară a unui număr și returnează o valoare întreagă. Diferența dintre aceste funcții este pentru valorile argumentelor negative. Int(x) returnează cel mai apropiat număr întreg negativ mai mic sau egal cu x, iar Fix(x) returnează cel mai apropiat număr întreg negativ mai mare sau egal cu x.

Funcții de verificare a tipului

Iată funcțiile care determină ce tip este o variabilă:

  • IsArray(x) – funcția verifică dacă variabila este o matrice;
  • IsDate(x) determină dacă variabila este o dată;
  • IsError(x) determină dacă variabila este un cod de eroare;
  • IsNull(x) determină dacă variabila este o valoare goală;
  • IsNumeric(x) determină dacă variabila este o valoare numerică;
  • IsObject(x) determină dacă o variabilă este un obiect.

Funcția de formatare

Funcția de formatare returnează o valoare Variant (Șir) care conține o expresie formatată în conformitate cu sintaxa funcției:

Format(Expresie[,Format [,Prima zi a săptămânii[,Prima săptămână a anului]]]), unde:

  • Expresie – un argument necesar (orice expresie validă – o combinație de cuvinte cheie, operatori, variabile și constante, al căror rezultat este un șir, număr sau obiect);
  • Formatul este un parametru opțional (orice expresie de format validă denumită sau definită de utilizator).

Dacă se adaugă semnul $ la numele funcției, atunci funcția returnează o valoare de tip String., apoi funcția returnează o valoare de tip String.

Când creați propriul format de număr, puteți utiliza următoarele caractere:

  • 0 – rezervă poziția bitului digital. Afișează o cifră sau zero. Dacă numărul formatat are orice cifră în acea poziție a cifrei unde există un 0 în șirul de format, funcția afișează acea cifră; dacă nu, atunci este afișat un zero în acea poziție;
  • „#” - acțiunea acestui simbol este similară cu acțiunea lui 0, cu singura diferență că nu sunt afișate zerouri nesemnificative;
  • . – rezervă poziția separatorului zecimal, determină câte cifre trebuie afișate în stânga și în dreapta punctului zecimal;
  • % - rezervă afișarea procentuală a unui număr;
  • . – separă sute de mii.

Funcții de conversie a formatului

Acestea includ:

  • Val(șir) – returnează numerele conținute în șir ca valoare numerică de tipul adecvat.
  • Str(number) – returnează o valoare Variant (String) care este o reprezentare șir a unui număr.

Pe lângă funcțiile Val și Str, există o serie de funcții pentru conversia tipurilor de expresii.

Funcții de procesare a șirurilor

Printre numeroasele funcții se numără următoarele:

  • Chr(code) – convertește codul ASCII într-un șir. De exemplu, Chr(10) efectuează o nouă linie, Chr(13) efectuează o întoarcere de cărucior;
  • Mid(șir, pos[,lungime]) – returnează un subșir al unui șir care conține numărul specificat de caractere, unde String este expresia șirului din care este extras subșirul;
  • Pos – poziția caracterului în String de la care începe subșirul dorit;
  • Lungime – numărul de caractere subșir returnate;
  • Len(șir) – returnează numărul de caractere dintr-un șir.

Funcții de oră și dată

Returnează o valoare Variant care conține data sistemului, ora curentă etc. De exemplu, funcția Date returnează o valoare care conține data sistemului.