Funcții matematice vizuale încorporate. Caracteristici încorporate ale Visual Basic. TIP Funcții de verificare

Procedura de funcționare - Acesta este un tip special de procedură VBA care returnează rezultatul. Procedurile personalizate ale funcțiilor, cum ar fi funcțiile VBA încorporate, pot avea argumente opționale și denumite. Pentru a scrie proceduri de funcții, nu puteți utiliza macrorecorectorul, deși puteți edita macro înregistrat de înregistrator și îl puteți transforma în funcția de procedură.

Principala diferență dintre procedura funcțională și alte proceduri, pe lângă returnarea funcțiilor și procedurile - nu, este că cuvintele cheie sunt utilizate în funcția de procedură Funcţie. și Funcția finală..

Sintaxă:

Numele funcției ()
"Declarații VBA
Funcția finală.

Funcția este un cuvânt cheie care anunță începutul funcției.

Numele este numele funcției. Numele funcțiilor urmează aceleași reguli ca și numele altor identificatori VBA.

Arglist - Lista argumentelor acestei funcții, element opțional.

Tip - orice tip de funcție de funcție de returnare. Dacă tipul nu este definit, rezultatul care returnează procedura de funcționare are un tip de variantă.

Nume \u003d Expresie - Alocarea unei funcții care indică VBA, care valoare ar trebui să returneze funcția, un element opțional. Cu toate acestea, trebuie să includeți întotdeauna operatorul de atribuire în procedura de funcționare.

Funcția de încheiere - Cuvinte cheie care încheie funcția.


Chiar dacă funcția nu are argumente (de exemplu, acum, data) în declarația funcției de care aveți nevoie pentru a utiliza paranteze.

De obicei, funcția este destinată să efectueze calculul și să returneze rezultatul. La declararea unei proceduri de funcționare, este indicat numele fiecărui argument transmis. Numele argumentelor din listă sunt separate unul de celălalt dintre virgulă și trebuie să respecte regulile aplicate oricărui identificator VBA.


Mai jos este listarea utilizării celei mai simple proceduri de funcționare, care elimină golurile inițiale și finale și calculează numărul de caractere din expresie.



Fără utilizarea funcției, listarea ar arăta astfel:



Din acest exemplu simplu, cred că ideea de bază a utilizării funcțiilor de funcționare a funcțiilor este clară - îmbunătățind lizibilitatea codului programului și abrevierea acesteia (cu alte cuvinte, procedura de funcționare este scrisă atunci când același cod "piesă" " este mai mult de 2-3 ori în codul programului). Într-adevăr, dacă funcția noastră de procedură a constat de la o linie, dar, să spunem, din 10 linii; Iar codul programului ar folosi această procedură de funcționare de 5 ori, listarea totală a programului ar fi mai mică de 38 de linii.


După cum sa menționat deja anterior, VBA transmite toate argumentele din funcția de procedură ca tipuri de variante. Puteți declara anumite tipuri de date pentru fiecare argument din lista argumentelor.

Înainte de a începe să vă creați propriile funcții VBA, este util să știți că Excel VBA are o colecție extinsă de funcții încorporate gata, care pot fi utilizate la scrierea codului.

Lista acestor funcții poate fi vizualizată în editorul VBA:

  • Deschideți cartea de lucru Excel și rulați editorul VBA (faceți clic pe acest lucru Alt + F11.), apoi faceți clic pe F2..
  • În lista derulantă din partea stângă sus a ecranului, selectați Biblioteca VBA..
  • Va apărea o listă de clase încorporate și funcții VBA. Faceți clic pe numele funcției, astfel încât descrierea sa scurtă să fie afișată în partea de jos a ferestrei. Presare F1. Deschideți pagina de ajutor online pentru această caracteristică.

În plus, lista completă a funcțiilor VBA încorporate cu exemple poate fi găsită pe site-ul web al Centrului de Development de bază Visual.

Procedurile utilizatorului "Funcție" și "Sub" în VBA

În Excel Visual Basic, un set de comenzi care efectuează o sarcină specifică este plasată în procedură Funcţie. (Funcție) sau Sub. (Subrutina). Principala diferență între proceduri Funcţie. și Sub. este că procedura Funcţie. Returnează rezultatul, procedura Sub. - nu.

Prin urmare, dacă doriți să efectuați acțiuni și obțineți un rezultat (de exemplu, însumând mai multe numere), atunci procedura este de obicei utilizată Funcţie., și pentru a efectua pur și simplu unele acțiuni (de exemplu, schimbați formatarea grupului celulelor), trebuie să selectați procedura Sub..

Argumente

Cu ajutorul argumentelor, diversele date pot fi transferate în procedurile VBA. Lista argumentelor este specificată la declararea procedurii. De exemplu, procedura Sub. În VBA adaugă un număr întreg (număr întreg) pentru fiecare celulă din gama dedicată. Pentru a transfera procedura, acest număr este posibil cu ajutorul argumentului, astfel:

SUB ADDTOCELLS (I AS INTEGER) ... END SUB

Rețineți că prezența argumentelor pentru proceduri Funcţie. și Sub. VBA este opțională. Pentru unele proceduri, nu sunt necesare argumente.

Argumente opționale

Procedurile VBA pot avea argumente opționale. Acestea sunt argumentele pe care utilizatorul le poate specifica dacă dorește și dacă sunt săriți, procedura utilizează valorile implicite pentru acestea.

Revenind la exemplul anterior pentru a face un argument integer al funcției opțional, acesta trebuie anunțat astfel:

SUB ADDTOCELLS (opțional I ca Integer \u003d 0)

În acest caz, un argument între i. Implicit va fi 0.

Argumentele opționale în procedură pot fi mai multe, toate sunt enumerate la sfârșitul listei argumentelor.

Transferați argumente după valoare și referință

Argumentele din VBA pot fi transferate în procedura în două moduri:

  • Byval. - transmiterea argumentului cu valoare. Aceasta înseamnă că procedura este transmisă numai valorii (adică o copie a argumentului) și, prin urmare, orice modificări făcute cu argumentul din cadrul procedurii vor fi pierdute la ieșirea din acesta.
  • BYREF. - Transferul argumentului prin referință. Adică, procedura este transmisă adresa reală de plasare a argumentului în memorie. Orice modificări efectuate cu argumentul din cadrul procedurii vor fi salvate la părăsirea procedurii.

Cu cuvinte cheie Byval. sau BYREF. În declarația procedurii, puteți întreba cum este transmis argumentul la procedură. Acest lucru este arătat sub exemple:

Amintiți-vă că argumentele din VBA sunt transmise în mod implicit. Cu alte cuvinte, dacă cuvintele cheie nu sunt utilizate Byval. sau BYREF.Argumentul va fi transferat prin referință.

Înainte de a continua studiul procedurilor Funcţie. și Sub. În detaliu, va fi util să se uite la caracteristicile acestor două tipuri de proceduri. Următoarele sunt proceduri scurte de discuții VBA. Funcţie. și Sub. Și sunt afișate exemple simple.

Procedura VBA "Funcție"

VBA Editor recunoaște procedura Funcţie.

Funcție ... Funcția de sfârșit

Așa cum am menționat mai devreme, procedura Funcţie. în VBA (spre deosebire de Sub.) Returnează valoarea. Pentru valorile returnate, se aplică următoarele reguli:

  • Tipul de date al valorii returnate trebuie declarat în antetul procedurii Funcţie..
  • Variabila care conține valoarea de returnare trebuie să fie denumită și procedura Funcţie.. Această variabilă nu trebuie anunțată separat, deoarece există întotdeauna ca parte integrantă a procedurii Funcţie..

Acest lucru este excelent ilustrat în exemplul următor.

Exemplu VBA Procedură "Funcție": Realizăm o operație matematică cu 3 numere

Mai jos este un exemplu al codului de procedură VBA. Funcţie.care primește argumente de trei tipuri Dubla. (Numere cu un punct plutibil de precizie dual). Ca urmare, procedura returnează un alt număr de Dubla.egală cu suma primelor două argumente minus al treilea argument:

Funcție summin (DNUM1 ca dublu, dnum2 ca dublu, dnum3 ca dublu) ca dublu summinus \u003d DNUM1 + DNUM2 - Funcția de capăt DNUM3

Această procedură foarte simplă VBA Funcţie. ilustrează modul în care datele sunt transmise procedurii prin argumente. Puteți vedea că tipul de date returnate de procedură este definit ca Dubla. (cuvinte spun despre asta Ca dublu. După lista argumentelor). De asemenea, acest exemplu arată modul în care rezultatul procedurii Funcţie. Salvat într-o variabilă cu un nume care coincide cu numele procedurii.

Apelarea procedurilor VBA "Funcție"

Dacă procedura simplă discutată mai sus Funcţie. Inserat în modulul din editorul Visual Basic, acesta poate fi apelat din alte proceduri VBA sau utilizat în lista de lucru din cartea Excel.

Apelarea procedurilor VBA "Funcție" dintr-o altă procedură

Procedură Funcţie. Puteți apela de la o altă procedură VBA utilizând o sarcină simplă a acestei proceduri variabile. Următorul exemplu prezintă recursul la procedură. Summinus.care a fost definită mai sus.

Sub principal () total total ca dublu total \u003d summinus (5, 4, 3)

Apelarea procedurilor VBA "Funcție" din foaia de lucru

Procedura VBA Funcţie. Puteți apela de la foaia de lucru Excel în același mod ca orice altă funcție Excel Embedded. În consecință, procedura creată în exemplul anterior Funcţie.Summinus. Puteți apela, introducând o foaie de lucru în celulă care exprimă aici:

Summinus (10, 5, 2)

Procedura VBA "Sub"

Editorul VBA înțelege că, înainte de a fi o procedură. Sub.Când întâlnește un grup de echipe, încheiat între astfel de operatori de deschidere și închidere:

Sub ... Sfârșitul sub

Procedura VBA "Sub": Exemplul 1. Alinierea în centru și schimbarea dimensiunii fontului în gama dedicată de celule

Luați în considerare un exemplu de procedură simplă VBA. Sub.A cui sarcină este de a schimba formatarea gamei dedicate de celule. Celulele sunt instalate în centru (și vertical și orizontal), iar dimensiunea fontului se modifică la utilizatorul definit de utilizator:

Sub formatul_centered_and_sizat (opțional iFontsize ca Integer \u003d 10) Selecție.HorizontalIngnment \u003d XLCenter Selection.verticalIngnment \u003d XLCenter Selection.font.Size \u003d IFONTSIZE END SUB SUB

Această procedură Sub. Efectuează acțiuni, dar nu returnează rezultatul.

În acest exemplu, este utilizat și un argument opțional (opțional). ifontsize.. Dacă argumentul ifontsize. Care nu sunt transferate la procedură Sub., valoarea sa implicită este egală cu 10. Cu toate acestea, dacă argumentul ifontsize. Procedura transmisă Sub.Gama dedicată de celule va fi setată dimensiunea fontului specificată de utilizator.

Procedura VBA "Sub": Exemplul 2. Alinierea în centru și aplicarea unui font îndrăzneț la font din gama dedicată de celule

Următoarea procedură este similară cu cea recent luată în considerare, dar de data aceasta, în loc de redimensionare, fontul este aplicat în gama selectată de celule. Acesta este un exemplu al procedurii Sub.care nu sunt transmise niciun argument:

Sub Format_Centered_And_Bold () Selecție.HorizontalIngnment \u003d XLCENTER SELECTION.FTTALALIGNment \u003d XLCENTER SELECTION.FONT.BOLD \u003d Adevărat Sub

Apelând procedura "sub" în Excel VBA

Apelați procedura VBA "sub" dintr-o altă procedură

Pentru a apela procedura VBA Sub. Din altă procedură VBA, trebuie să scrieți un cuvânt cheie Apel, Numele procedurii Sub. Și apoi în paranteze argumentele procedurii. Acest lucru este afișat în exemplul de mai jos:

Sub-Main () Call Format_Centered_and_sizat (20) Sub sub

Dacă procedura Format_centered_and_sizat Are mai mult de un argument, ele trebuie să fie separate prin virgule. Ca aceasta:

Sub-Main () Call Format_Centered_and_sizat (arg1, arg2, ...) Sub sub substanță

Apelați procedura VBA "sub" din foaia de lucru

Procedură Sub. nu pot fi introduse direct în celula frunzei Excel, deoarece se poate face cu procedura Funcţie.Deoarece procedura Sub. Nu returnează o valoare. Cu toate acestea, procedurile Sub.nu au argumente și declarate ca Public (Așa cum va fi prezentat mai jos), va fi disponibil pentru utilizatorii foii de lucru. Astfel, dacă procedurile simple discutate mai sus Sub. Inserat în modulul din editorul de bază Visual, apoi procedura Format_cented_and_bold. va fi disponibil pentru utilizarea pe lista de lucru a cărții Excel și procedura Format_centered_and_sizat - Nu va fi disponibil, deoarece are argumente.

Iată o modalitate ușoară de a rula (sau executa) procedura Sub.Disponibil din foaia de lucru:

  • Clic Alt + F8. (Apăsați tasta Alt. și țineți-o în jos apăsată, apăsați tasta F8.).
  • În lista Macros care apare, selectați cea pe care doriți să o executați.
  • Clic A executa (ALERGA)

Pentru a efectua procedura Sub. Rapid și ușor, puteți atribui o combinație de taste pentru aceasta. Pentru aceasta:

  • Clic Alt + F8..
  • În lista Macros care apare, selectați unul la care doriți să atribuiți o combinație de taste.
  • Clic Parametri (Opțiuni) și în caseta de dialog care apare, introduceți combinația de taste.
  • Clic O.K Și închideți caseta de dialog Macro. (Macro).

Atenţie: Atribuirea unei comenzi rapide de la tastatură pentru macro, asigurați-vă că nu este utilizat ca standard în Excel (de exemplu, Ctrl + C.). Dacă selectați o combinație de taste existente, acesta va fi realocat de macro și, ca rezultat, utilizatorul poate executa execuția macrocomenzii din întâmplare.

Procedura VBA Domeniul de aplicare

În partea 2 a acestui tutorial, a fost discutată subiectul domeniului de acțiune al variabilelor și constantelor și rolul cuvintelor cheie Public și Privat. Aceste cuvinte cheie pot fi utilizate și în legătură cu procedurile VBA:

Amintiți-vă că, dacă înainte de anunțarea Procedurile VBA Funcţie. sau Sub. Cuvântul cheie nu este introdus, apoi proprietatea implicită este setată la procedură. Public (Adică va fi disponibil peste tot în acest proiect VBA). Aceasta este diferența față de declarația de variabile care sunt implicite Privat.

Ieșire timpurie din procedurile VBA "Funcție" și "Sub"

Dacă trebuie să finalizați execuția procedurilor VBA Funcţie. sau Sub.Fără a aștepta finalele sale naturale, atunci există operatori pentru acest lucru Funcția de ieșire și Ieșiți sub.. Utilizarea acestor operatori este prezentată mai jos a exemplului unei proceduri simple. Funcţie.care este de așteptat să primească un argument pozitiv pentru a îndeplini alte operațiuni. Dacă procedura nu este transmisă nu o valoare pozitivă, atunci alte operații nu pot fi executate, astfel încât utilizatorul trebuie să fie afișat un mesaj de eroare și procedura trebuie completată imediat:

Funcția TVA_amount (Svat_rate ca single) ca un singur TVA_amount \u003d 0 dacă svat_rate<= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received " & sVAT_Rate Exit Function End If ... End Function

Rețineți că înainte de a finaliza procedura Funcţie.Vat_amount., în funcția de VBA introdusă codul introdus Msgbox.care arată pop-up-urile utilizatorului cu un avertisment.

Tabelul 6.1. Funcții matematice încorporate
Funcţie Descriere
Abs. Valoare absolută
Atn Arctanens.
Cos. Numerele cosinei
Exp. Returnează numărul E (2.718282), ridicat la gradul de funcție de argument.
Fixați Returnează partea fracțională a numărului și returnează întregul. Ca rezultat, pentru numere pozitive, numărul este mai mic decât intrarea (fix (2.5) retur 2), pentru negativ - mai mare (fix (-2,5) retur -2)
Int. Returnează partea fracțională a numărului și returnează întregul. Pentru pozitiv, numărul este mai puțin introdus (INT (2.5) va returna 2), pentru negativ - la fel de mic (int (-2.5) -3).
Buturuga. Se intoarce logaritmul natural Numere
RND. Returnează un număr aleatoriu de tip unic, iar acest număr este între 0 și 1. Pentru a inițializa generatorul de numere aleatorii, utilizați directiva Randomize - trebuie apelată înainte de a apela RND..
SGN. Funcția este concepută pentru a determina semnul numărului. Dacă numărul este pozitiv - acesta returnează 1. Pentru zero, funcția va returna 0 pentru un număr negativ -1.
Păcat. Sinus
SQR. Rădăcină pătrată
Tan. Tangentă

Să luăm în considerare un exemplu. Adăugați la un document Microsoft Word, îl apelați CMD_Calc, îl scriem ca calcule și adăugăm următorul cod (listarea 6.1), ilustrând activitatea funcțiilor considerate.

DB DBLNUMBER ca dublu "Variabila utilizată în Calculul Varresult Dim Varresult" Varianta variabilă DBLNumber \u003d Val (Introducere (introduceți numărul ")))" Calculați valoarea absolută a numărului introdus "Prima atribuie rezultatul variabilei Varresult" Următorul - retrageți Un rezultat semnat în "Mesaje" Vom folosi semnul "+" pentru "concatenarea rândului, în alte cazuri" vom apela direct funcțiile "în MsgBox" E "Vă rugăm să rețineți că convertim" Valori numerice la șiruri de caractere String function varresult \u003d abs (dblnumber) msgbox ("valoare absolută" + _ str (dblnumber) + "egal" + str (varresult) "Arctangents msgbox (" arcthancence "+ _ str (dblnumber) +" egal "+ _ str ( ATN (DBLNUMBER))) "MsgBox Cosine (" Cosine "+ _ STR (DBLNUMBER) +" Equals "+ _ STR (COS (DBLNUMBER)))" E în gradul de număr de MsgBox ("numărul E la gradul E la gradul "+ _ STR (DBLNumber) +" Equals "+ _ STR (EXP (DBLNUMBER)))" Fix MsgBox ("Funcționarea distractivă Orașele Fihe pentru "+ _ str (dblnumber) +" egal "+ _ str (fix (dblnumber)))" int msgbox ("rezultatul funcției int pentru" + _ str (dblnumber) + "egal" + _ STR (INT (dblnumber))) "Logaritmul Natural MsgBox (" Logaritmul natural "+ _ STR (DBLNumber) +" Equals "+ _ Str (log (dblnumber)))" Obținem câteva numere aleatorii "primul număr - de la 0 la 1 "al doilea - de la 0 la 10." al treilea - de la 25 la 100 "al patrulea - un întreg de la 0 la 34 Randomize MsgBox (" Un grup de numere aleatorii: "+ _ STR (RND ()) +", " _ STR (RND () * 10) + "," + _ STR (RND () * 75 + 25) + "," + _ STR (INT (RND () * 34)) "SGN Msgbox Funcția (" SGN Rezultat pentru "+ _ str (dblnumber) +" egal "+ _ STR (SGN (DBLNumber))" MsgBox ("sinus" + _ str (DBLNumber) + "+" + _ STR (SIN (DBLNUMBER)) "Square Msgbox Rădăcină ("Rădăcina pătrată" + _ str (DBLNumber) + "Equalnumber" + _ STR (SQR (DBLNUMBER))) "Tangentul Msgbox (" Tangent "+ _ STR (DBLNumber) +" Equals "+ _ S TR (Tan (dblnumber))) Listarea 6.1. Faceți clic pe butoanele CMD_Calc de eveniment

Rețineți algoritmul pentru obținerea unui număr aleator amplasat într-o gamă specifică utilizând funcția RND.. Să presupunem că trebuie să obținem un număr aleatoriu de la 15 la 40. Începem cu un număr de la 0 la 40. Evident, vom avea nevoie de o astfel de provocare pentru acest lucru: RND () * 40.

Pentru a "ridica" nivelul celui mai mic număr aleator returnat de expresie, la 15, vom face următoarele.

În primul rând, calculăm diferența 40 și 15 - vom reuși 25. Aceasta înseamnă obținerea unui număr aleator de la 0 la 25, puteți utiliza apelul RND () * 25.

În al doilea rând, adăugați la numărul 15 aleatorii rezultat. Acum, expresia pentru a obține un număr aleator de la 15 la 40 arată astfel: RND () * 25 + 15.

Verificați această afirmație la corectitudine. Funcţie RND., după cum știți, returnează numere aleatorii de la 0 la 1. Dacă funcția revine 0 - rezultatul calculării expresiei va fi egal cu 15 (0 * 25 + 15). Dacă funcția revine 1 - rezultatul va fi egal cu 40 (25 * 1 + 15). Valori intermediare RND. Acestea vor da numerele aleatorie dorite între 15 și 40.

Apăsând butonul cmd_len (listarea 6.2) Acesta va conține o soluție la următoarea sarcină: pentru a informa utilizatorul lungimea textului introdus. Evident, pentru a rezolva această sarcină, vom avea nevoie de funcția LEN.

"DIM STR_INPStr ca linia de coarde de intrare șir" variabilă pentru depozitarea lungimii Lungime Dim Lng_strlen ca Long Str_inpstr \u003d Inputbox ("Introduceți un șir") "Calculați lungimea lungimii LNG_Strlen \u003d Lenter Lenter (str_inpstr) Msgbox (" Lungimea introducerii Linie: _ "+ _ str_inpstr +" _ este egal "+ str (lng_strlen) + _" simboluri ") Listarea 6.2. Exemplu de utilizare a funcției LEN

În fig. 6.2. Puteți vedea rezultatul calculării lungimii șirului.


Smochin. 6.2.

Acum ne vom ocupa de convertirea simbolurilor - Funcțiile LCAS și UZASE (listarea 6. 3. 3.).

"Depozitare variabilă DIM STR_INPStr ca rând de intrare șir" variabilă pentru stocarea unui șir modificat Dim str_newstr ca șir str_inpstr \u003d inputbox ("Introduceți textul") "în str_newstr va fi introdus în șirul" în care toate literele majuscule sunt înlocuite cu linia str_newstr \u003d LCSE (str_inpstr) MsgBox ("String schimbat:" + str_newstr) "Acum în Str_Newstr va fi același șir" în care toate literele au devenit majuscrise de Str_Newstr \u003d ucase (str_inpstr) msgbox ("linia schimbată: + str_newstr) Listarea 6.3. Exemplu de utilizare a funcțiilor LCCAS și UCASE

Pe caracterele de tăiere a coadă - Mid, LTRIM, RTRIM, stânga, caracteristici drepte (listare 6.4) Printre aceste funcții este cel mai puternic mijloc de mijloc - folosind-o, puteți face multe lucruri.

"Variabila de stocare Dim str_inpstr ca șir" variabilă pentru stocarea caracterelor de decupare Dim str_newstr ca șir "setați un șir cu care va fi convenabil să lucrați Str_inpstr \u003d" Bună ziua, Alexander "" "Funcții de îndepărtare a fraților" Când vă retrageți un șir înainte de a vă retrage un șir a început "și simbolul final" _ "în ordine" la "mai mult vizibil" sau fără lipsa lipsă MsgBox ("Lucrăm cu un astfel de șir:" + _ "_" + str_inpstr + "_") "LTRIM - Atribuiți Rezultatele activității "Informații variabile și afișate în msgbox str_newstr \u003d LTRIM (str_inpstr) msgbox (" rezultatul lui LTRIM: "+ _" _ "+ str_newstr +" _ ")" RTRIM Msgbox ("rezultatul RTRIM:" + _ "_" + RTRIM (str_inpstr) + "_") "Trim MsgBox (" Rezultatul lui Trim: "+ _" _ "+ Trim (str_inpstr) +" _ ")" stânga - tăiat din Str_inpstr 12 "caractere de curățare anterior" Din spațiile inițiale ale STR_NEWSTR \u003d stânga (LTRIM (str_inpstr), 12) msgBox ("primele 12 caractere din stânga:" + _ str_Newstr) "În mod similar - în mod similar, tăiați 9 caractere la dreapta str_newstr \u003d dreapta (RTRIM (str_inpstr), 9) msgbox (" Primele 9 caractere din dreapta: "+ _ str_newstr)" Mid Funcție - pentru a începe retragerea unui caracter "de la A doua și a cincisprezecea poziție "a fost purificată predominant din spațiile excesive" la început și la sfârșitul Str_newstr \u003d MID (Trim (str_inpstr), 2, 1) MsgBox ("Al doilea caracter al șirului introdus:" + _ str_newstr) str_newstr \u003d Mid (Trim (str_inpstr), 15, 1) MsgBox ("linia a cincisprezecea simbol introdus:" + _ str_newstr) "Retrage 5 caractere, începând cu 15 str_Newstr \u003d Mid simbol (Trim (str_inpstr), 15, 5) MsgBox (" Cinci caractere șir din poziția a 15-a: "+ _ str_newstr) Listarea 6.4. Exemplu de utilizare a caracteristicilor pentru tăierea caracterelor

Ia în considerare acum exemple de funcții

Funcţie. nume ([listă_ argumente])
[instrucțiuni]
[nume = expresie]
[instrucțiuni]
[nume = expresie]
Funcția finală.

Valoarea este întotdeauna atribuită numelui funcției cel puțin o dată și, de regulă, când funcția a terminat execuția. Crearea unei funcții de utilizator Începeți prin crearea unui modul VBA (puteți utiliza, de asemenea, un modul existent). Introduceți cuvântul cheie funcției, după care specificați numele funcției și lista argumentelor sale (dacă există) în paranteze. De asemenea, puteți declara valoarea tipului de date care returnează o funcție utilizând cuvântul cheie drept (nu este necesar să îl faceți, dar recomandat). Introduceți codul VBA care efectuează acțiunile necesare și asigurați-vă că valoarea necesară este atribuită unei proceduri variabile corespunzătoare denumirii funcției cel puțin o dată în corpul funcției. Funcția se termină cu operatorul de funcții finale.

Numele funcțiilor sunt supuse acelorași reguli ca și. Dacă intenționați să utilizați funcția din formula de lucru, asigurați-vă că numele nu are forma formularului de celule. De asemenea, nu atribuiți nume care să corespundă numelor funcțiilor Excel încorporat. Dacă zona de funcționare nu este specificată, valoarea implicită este publicul. Funcțiile declarate ca private nu sunt afișate în caseta de dialog. Maestru de funcții.

Funcția poate fi cauzată de una dintre următoarele moduri:

  • sunați-l dintr-o altă procedură;
  • includeți-o în formula foii de lucru;
  • includ în format de formatare condiționată;
  • sunați-l în fereastra VBU de depanare ( Imediat.). Această metodă este aplicată, de obicei, la etapa de încercare (figura 3).

Smochin. 3. Apelarea unei funcții în fereastra de depanare

Spre deosebire de proceduri, funcțiile nu sunt afișate în caseta de dialog. Macro. (meniul Dezvoltator –> Codul –> Macrocomenzile.; sau alt + F8).

Argumentele funcțiilor

Argumentele pot fi variabile (inclusiv arrays), constante, date simbolice sau expresii. Unele funcții nu au argumente. Funcțiile au atât argumente obligatorii, cât și opționale.

Funcții fără argumente

Excel are mai multe funcții încorporate care nu au argumente, de exemplu, adezis, astăzi, TDAT. Este ușor să creați funcții similare ale utilizatorului. De exemplu:

Utilizator de funcții ()
"Returnează numele de utilizator
Utilizator \u003d aplicație.Username.
Funcția finală.

La introducerea formulei \u003d utilizatorul (), celula returnează numele utilizatorului curent (figura 4). Notă: Când utilizați funcția fără argument în formula foii de lucru, trebuie să specificați paranteze goale.

Smochin. 4. Formula \u003d utilizator () returnează numele utilizatorului curent

Funcțiile personalizate se comportă ca caracteristici Excel încorporat. De obicei, funcția de utilizator este recalculată când este necesară, adică În cazul modificărilor într-unul din argumentele funcției. Cu toate acestea, puteți efectua mai des recalcularea funcțiilor. Funcția este recalculată când se modifică orice celulă, dacă procedura este adăugată de către operator

Cerere.volatil adevărat.

Metoda voltibilă a obiectului aplicației are un argument (adevărat sau fals). Dacă funcția este evidențiată ca volatil. (variabil), este recalculată ori de câte ori se schimbă orice celule celulare. Când utilizați argumentul fals, metoda voltibilă este tradusă numai atunci când unul dintre argumentele sale variază ca rezultat al recalculării.

Excel are o funcție adezivă încorporată. Dar mi-a plăcut prea mult că numerele aleatoare se schimbă de fiecare dată când foaia de lucru este recalculată. Prin urmare, am dezvoltat o funcție care returnează numere aleatorii care nu se schimbă la recalcularea formulelor. Pentru a face acest lucru, a fost utilizată funcția RND încorporată VBA:

Funcție staticrand ()
"Returnează un număr aleatoriu, nu variabil la recalcularea formulelor
Staticrand \u003d rnd ()
Funcția finală.

Valorile obținute folosind această formulă nu se schimbă niciodată. Dar utilizatorul rămâne posibilitatea recalculării forțate a formulei utilizând combinația cheie .

O funcție de argumentare

Smochin. 5. Tabelul Comisiei

Există mai multe modalități de a calcula comisioanele. De exemplu, folosind următoarea formulă (dacă volumul vânzărilor este plasat în celula D1):

Dacă (și (d1\u003e \u003d 0; d1<=9999,99);D1*0,08;ЕСЛИ(И(D1>\u003d 10.000; D1<=19999,99);D1*0,105; ЕСЛИ(И(D1>\u003d 20000; D1<=39999,99);D1*0,12;ЕСЛИ(D1>\u003d 40000; D1 * 0,14))))

Această formulă nu reușește din mai multe motive. În primul rând, este dificil, nu este ușor să-l formați, iar în viitor editați. În al doilea rând, valorile sunt strict definite în formula, motiv pentru care este dificil de schimbat. Este mult mai bine să utilizați HDP (figura 6).

Smochin. 6. Folosind funcția PRD pentru a calcula Comisia

Chiar mai bine (atunci nu este nevoie să utilizați o masă potrivită) Creați o funcție personalizată:

Comisiile de funcții (vânzări)
Const tier1 \u003d 0,08
Const tier2 \u003d 0,105
Const tier3 \u003d 0.12
Const tier4 \u003d 0,14
"Calculul comisiilor din vânzări
Selectați vânzările de caz.
Cazul 0 la 9999.99: Comisia \u003d Vânzări * Nivel1
Case 10000 până la 19999.99: Comisia \u003d Vânzări * Tier2
Case 20000 la 39999.99: Comisia \u003d Vânzări * Tie3
Cazul este\u003e \u003d 40000: comision \u003d vânzări * Tie4
END SELECT.
Funcția finală.

După introducerea în modulul VBA, această funcție poate fi utilizată în formula din foaia de lucru sau apelul de la alte proceduri VBA. La introducerea următoarei formule, rezultatul a 3000 va fi obținut în celulă:

Comisia (B2)

Funcție dublă ()
DoubleLell \u003d Interval ("Al") * 2
Funcția finală.

Deși această caracteristică funcționează, în unele cazuri oferă un rezultat incorect. Motivul este că mecanismul de calcul Excel nu ia în considerare intervalele care nu sunt transmise ca argumente. Ca rezultat, uneori înainte de a returna funcția, toate valorile aferente nu sunt calculate. De asemenea, trebuie să scrieți funcția Doublell, ca argument al cărui valoare a celulei A1 este transmisă.

Funcția dublă (celulă)
Doublell \u003d Cell * 2
Funcția finală.

Funcționează cu două argumente

Imaginați-vă că managerul de a face cu cele de mai sus introduce o nouă politică menită să reducă fluxul de personal: valoarea totală a comisiei plătibile este majorată cu 1% pe an, pe care angajatul a lucrat în cadrul companiei. Schimbați comisionul de funcționare a utilizatorului, astfel încât să ia două argumente. Noul argument reprezintă numărul de ani elaborați de angajat în companie. Să numim această nouă funcție a Comisiei2:

Funcția Comisiei2 (vânzări, ani) ca fiind singure
"Calculul comisiei de vânzări pe baza
"Durata experienței
COMISIA2 \u003d Comisia (vânzări) + _
(Comisia (vânzări) * Ani / 100)
Funcția finală.

Funcție cu argument sub formă de matrice

Ca argumente, funcția poate lua una sau mai multe matrice, procesează această matrice (matrice) și returnează singura valoare. Funcția prezentată mai jos acceptă o matrice ca argument și returnează cantitatea de elemente.

Funcția sumarray (listă) ca dublu
Dim element ca variantă
Sumarray \u003d 0.
Pentru fiecare element din listă
Dacă foile de lucru.isnumber (element), atunci _
Sumarray \u003d sumarray + element
Elementul următor.
Funcția finală.

Funcția Excel Encoxer verifică dacă fiecare element este un număr înainte de ao adăuga într-un număr întreg comun. Adăugarea acestui simplu operator de verificare a datelor elimină tipurile de inconsecvențe de tip atunci când încercați să efectuați o operațiune aritmetică asupra șirului.

Funcția cu argumente opționale

Multe funcții Excel încorporate au argumente opționale. Exemplu - Funcția LEVMB care returnează caracterele de pe marginea din stânga a liniei. Are următoarea sintaxă:

Levsimv ( text, numără_simvolov.)

Primul argument este obligatoriu, spre deosebire de al doilea. Dacă nu este specificat al doilea argument, Excel sugerează valoarea 1.

Funcțiile personalizate dezvoltate în VBA pot avea, de asemenea, argumente opționale. Argumentul opțional Veți specifica dacă introduceți cuvântul cheie opțional pe numele argumentului. În lista argumentelor, argumentele opționale sunt determinate după toate obligatorii. De exemplu:

Funcție Utilizator2 (opțional majuscule ca varianta)
Dacă este izbire (majusculă), apoi majusculă \u003d falsă
User2 \u003d aplicație.username.
Dacă majusculă, apoi user2 \u003d uzina (USER2)
Funcția finală.

Dacă argumentul este fals sau omis, numele de utilizator este returnat fără modificări. Dacă argumentul este adevărat, numele de utilizator este returnat în simbolurile majuscule (utilizând funcția Usa VBA). Acordați atenție primului operator de funcții - conține funcția VBA izbire, care determină prezența unui argument. Dacă argumentul lipsește, operatorul atribuie variabila majusculă la falsă (implicită).

Funcția VBA returnează o matrice

VBA conține o caracteristică foarte utilă intitulată matrice. Returnează o valoare cu un tip de date variantă, care conține o matrice (adică mai multe valori). Dacă nu sunteți familiarizat cu formulele de matrice din Excel, vă propun să începem cu. Formula masivului este introdusă în celulă după apăsare . Excel adaugă un suport în jurul formulei pentru a indica faptul că aceasta este o formulă de matrice.

Funcția de familie este un exemplu simplu de aplicare a funcției de matrice în funcția utilizatorului.

Numele de luna functionale ()
Lunare \u003d matrice ("ianuarie", "februarie", "martie", _
"Aprilie", "May", "iunie", "iulie", "august", _
" Septembrie octombrie noiembrie decembrie "
Funcția finală.

Caracteristica lunilor returnează o gamă orizontală de nume de luni. Pe foaia de lucru, selectați 12 celule, introduceți formula \u003d nume lunare () și faceți clic pe . Dacă aveți nevoie să generați o gamă verticală de nume de luni, evidențiați intervalul vertical, introduceți formula \u003d TRACC (lunare ()) și apăsați .

Funcția de returnare a valorii erorii

  • xlerrivo (pentru erorile # Business / 0!);
  • xlerna (pentru eroarea # n / d);
  • xlerName (pentru numele de eroare #);
  • xLERRNULL (EMFED # gol!);
  • xlerrnum (pentru eroare # #);
  • xlerref (pentru eroare # referință!);
  • xlerrValue (pentru eroare # înseamnă!).

Mai jos este caracteristica convertită removeVowels (vezi exemplul la început). Designul IF-TEN este utilizat pentru a efectua o acțiune alternativă în cazul în care argumentul nu este text. Această caracteristică necesită o funcție Excel Etext care determină dacă argumentul conține textul. Dacă celula conține text, atunci funcția returnează un rezultat normal. Dacă celula conține text (sau goală), atunci funcția returnează o eroare # medie!

Funcția de îndepărtareVowels3 (txt) ca variantă
"Șterge toate literele vocale din argumentul TXT
"Returnează o eroare # înseamnă!, Dacă argumentul nu este un șir
Dim i cât de mult
Removevowels3 \u003d ""
Dacă aplicația.WorkesheetFunction.istext (txt) atunci
Pentru i \u003d 1 până la len (txt)
Dacă nu este use (mijlocul (txt, i, 1)) ca "" atunci
Removevowels3 \u003d removevowels3 & mijloc (txt, i, 1)
Terminați dacă
APOI EU.
Altfel.
Removevowels3 \u003d Cverr (XlerrValue)
Terminați dacă
Funcția finală.

Rețineți că tipul de date a fost modificat pentru valoarea returnată de funcție. Deoarece funcția poate returna altceva, cu excepția șirului, tipul de date a fost modificat în varianta.

Funcționează cu un număr nedeterminat de argumente

Este posibil să se creeze funcții de utilizator care au un număr nedeterminat de argumente. Aplicați o matrice ca ultimă (sau numai) și adăugați un cuvânt cheie Paramarray înainte de aceasta (Paramarray se aplică numai ultimului argument din lista argumentelor procedurii. Are întotdeauna un tip de date variante și este întotdeauna un argument opțional). Următoarea funcție returnează valoarea tuturor argumentelor, care pot acționa ca o valoare (celulă) și interval.

Funcția simpleum (paramarray arglist () ca varianta) ca dublu
Celula dim ca interval
Dim arg ca varianta
Pentru fiecare arg în arglist
Pentru fiecare celulă din Arg
Simpleum \u003d simpleum + celula
Următoarea celulă.
ARG ANG
Funcția finală.

Funcții de depanare

Când se utilizează formula de pe fisca de lucru pentru a testa funcțiile care apar în timpul executării erorii, nu sunt afișate în caseta de dialog familiară. Formula returnează pur și simplu valoarea de eroare (# medie!). Din fericire, acest lucru nu reprezintă o mare problemă la depanarea funcțiilor, deoarece există întotdeauna mai multe căi de by-pass.

  • Plasați funcția MsgBox în locuri importante pentru a monitoriza valorile variabilelor individuale.
  • Testați funcția apelându-l din procedură și nu în formula foii de lucru. Erori în procesul de execuție sunt afișate în mod obișnuit.
  • Determinați punctul de oprire din funcție și vizualizați funcția pas cu pas. În acest caz, puteți utiliza toate instrumentele standard de depanare. Pentru a adăuga un punct de oprire, plasați cursorul în operatorul în care vă decideți să întrerupeți execuția și selectați comanda Debug. –> Comutați punctul de întrerupere. (Debugging. –> Opriți punctul de oprire) sau faceți clic pe .
  • Utilizați unul sau mai mulți operatori temporari de imprimare în program pentru a afișa valori în fereastră. Imediat. Editor VBA. De exemplu, pentru a monitoriza valoarea ciclic schimbabilă, utilizați următoarea metodă:

Smochin. 7. Utilizați fereastra de depanare pentru a afișa rezultatele când efectuați o funcție.

În acest caz, valorile a două variabile, CH și I sunt afișate în fereastra de depanare ( Imediat.) Ori de câte ori operatorul Debug.print se găsește în program. Stați cursorul la orice proces de testare () și apăsați F5. În fig. 7 prezintă rezultatul cazului în care funcția acceptă argumentul Tusconarizona.

Folosind metoda macrooptions

Puteți utiliza metoda Macrooptions din obiectul de aplicație, care vă permite să activați funcțiile funcțiilor încorporate ale Excel. Această metodă vă permite să:

  • adăugați descrierea funcției (pornind de la Excel 2010;
  • specificați categoria de funcții;
  • adăugați o descriere a argumentelor funcției.

Sub descriere ()
Dim FunNname ca șir
Dim funcdesc ca șir
Dim funcatat atâta timp
Dim Arg1Desc ca șir, arg2desc ca șir
FunNname \u003d "Draw"
Funcdesc \u003d "Conținutul unui interval aleatoriu"
FUNCCAT \u003d 5 "Link-uri și matrice
Arg1DeC \u003d "Gama care conține valori"
Arg2desc \u003d "(opțional) dacă este fals sau absent, _
Funcția RND nu este recalculată. "
Arg2desc \u003d arg2desc & "dacă este adevărat, funcția rnd este recalculată"
Arg2desc \u003d arg2desc & "cu orice schimbare pe o foaie".
Cerere.macrooptions _
Macro: \u003d funnme, _
Descriere: \u003d funcdesc, _
Categorie: \u003d FUNCCAT, _
ArgumentareDescrieri: \u003d Array (Arg1DeC, Arg2DeC)
Sfârșitul sub.

În fig. 8 prezintă casete de dialog Maestru de funcții și Argumentele funcțieidupă executarea procedurii descrisfuncționale ().

Smochin. 8. Tipul de casete de dialog Maestru de funcții și Argumentele funcției Pentru funcția utilizatorului

Descriere () procedura ar trebui să fie numită o singură dată. După apelul său, informațiile asociate funcției sunt salvate în registrul de lucru. Dar dacă ați modificat procedura, repetați apelul.

Dacă nu specificați categoria de caracteristici utilizând metoda Macrooptions, funcția de utilizator a utilizatorului va apărea în categorie Definiția utilizatorului căsuță de dialog Maestru de funcții. Tabelul (fig.9) enumeră numerele de categorii care pot fi utilizate ca valori de argumentare a categoriei ale metodei macrooptions. Rețineți că unele dintre aceste categorii (de la 10 la 13) nu sunt de obicei afișate în caseta de dialog. Maestru de funcții. Dacă puteți atribui unul dintre funcțiile utilizatorului într-o categorie similară, acesta va apărea în caseta de dialog.

Utilizarea suplimentelor pentru stocarea funcțiilor utilizatorului

Dacă doriți, puteți salva funcțiile utilizator frecvent utilizate în fișierul de add-on. Principalul avantaj al acestei abordări este după cum urmează: Funcțiile pot fi aplicate în formule fără specificatorul de nume de fișier. Să presupunem că aveți o funcție de utilizator ZAPSPACES; Este stocat în fișierul MyFuncs.xlsm. Pentru ao aplica în formula unei alte cărți de lucru (altele decât mifuncs.xlsm), trebuie să introduceți următoarea formulă: \u003d MyFuncs.XLSM! ZAPSPACES (A1: C12).

Dacă creați un add-on Bazat pe fișierul MyFuncs.xlsm și acest add-in va fi încărcat în sesiunea de operare Excel curentă, link-ul la fișier poate fi omis prin introducerea următoarei formule: \u003d ZAPSPACES (A1: C12) . Crearea suplimentelor vor fi luate în considerare separat.

O problemă potențială care poate apărea datorită utilizării add-urilor pentru stocarea funcțiilor personalizate sunt legate de dependența cărții de lucru din dosarul add-on. Dacă treceți angajatul regisului de lucru, nu uitați să transferați și o copie a suprastructurii care conține funcțiile necesare.

Utilizarea funcțiilor Windows API

VBA poate împrumuta metode din alte fișiere care nu au nimic de-a face cu Excel sau VBA, de exemplu, fișiere DLL (bibliotecă dinamică Link - bibliotecă conectată dinamic) care sunt utilizate de Windows și alte programe. Ca urmare, VBA apare capacitatea de a efectua operațiuni care, fără metode împrumutate, depășesc limitele capacităților lingvistice.

Windows API (interfață de programare aplicație - interfață de programare a aplicațiilor) este un set de funcții disponibile programatorilor din mediul Windows. Când apelați funcția Windows de la VBA, accesați Windows API. Multe resurse de ferestre utilizate de programatorii Windows pot fi obținuți din fișierele DLL în care programele și funcțiile sunt conectate în procesul de executare a programului și nu în timpul compilării.

Înainte de a utiliza funcția API Windows, acesta trebuie anunțat în partea de sus a modulului software. Dacă modulul software nu este un modul VBA standard (adică modulul pentru UserForm., Foaie sau Această carte), funcția API trebuie anunțată ca privată.

Un anunț al funcției API are o dificultate - funcția trebuie declarată cât mai exactă posibil. Un operator de anunțuri indică VBA după cum urmează:

  • care funcționează API folosiți;
  • În ce bibliotecă există o funcție API;
  • argumentele API funcționează.

După anunțuri, funcția API poate fi utilizată în programul VBA.

Luați în considerare un exemplu al unei funcții API care afișează numele folderului Windows (folosind instrucțiuni standard VBA Această sarcină este uneori imposibilă). Pentru a începe cu, vom declara funcția API:

Declarați funcția PTRSAFE GetWindWireDirectorya lib "Kernel32" _
(Byval LPBuffer ca șir, Byval NSize cât mai lung)

Această caracteristică având două argumente returnează numele dosarului în care este instalat sistemul de operare Windows. După ce ați apelat această funcție, folderul Windows va fi stocat în variabila LPBuffer, iar lungimea șirului lungimei este în variabila NSSIZ.

Următorul exemplu afișează rezultatul în fereastra Mesaje:

Sub showwindowsdir ()
Dim Winpath ca șir * 255
Dim Winder ca șir
Winpath \u003d Spațiu (255)
Windr \u003d Stânga (Winpath, Getwindowsdirectorya _
(Winpath, Len (WinPath)))
Msgbox windrir, vbinformation, "Windows Directory"
Sfârșitul sub.

În timpul procesului de execuție, procedura showwindowsir afișează fereastra de mesaje cu locația folderului Windows.

Uneori trebuie să creați o coajă (înveliș) pentru funcțiile API. Cu alte cuvinte, veți crea propria dvs. funcție utilizând funcția API. Această abordare simplifică foarte mult utilizarea funcției API. Mai jos este un exemplu de o astfel de funcție VBA:

Funcția Windowsdir () ca șir
"Numele folderului Windows
Dim Winpath ca șir * 255
Winpath \u003d Spațiu (255)
Windowsdir \u003d Stânga (Winpath, Getwindowsdirectorya _
(Winpath, Len (WinPath)))
Funcția finală.

După declararea acestei caracteristici, îl puteți numi de la o altă procedură: MsgBox Windowsdir (). De asemenea, puteți utiliza această caracteristică în formula de lucru: \u003d Windowsdir ().

Atenţie! Nu fi surprins de eșecul sistemului atunci când utilizați funcțiile Windows API în VBA. Salvați-vă munca în avans înainte de testare.

Determinarea stării cheii

Să presupunem că ați scris o macro VBA care va fi efectuată utilizând butonul din bara de instrumente. Este necesar ca acest macro să fie efectuat diferit, dacă utilizatorul după ce faceți clic pe buton conține cheia . Pentru a afla despre apăsarea de la cheie Puteți utiliza funcția API GetkeyState. Funcția GetkeyState raportează dacă este apăsată tasta specifică. Funcția are un argument, nvirtkey, care prezintă codul cheilor care vă interesează.

Mai jos este un program care dezvăluie că atunci când se execută procedura evenimentului Button_Click, cheia a fost apăsată . Rețineți că pentru a determina starea cheii Se utilizează o constantă (primă valoare hexazecimală), care este apoi folosită ca argument al funcției de getkeystate. Dacă IetkeyState returnează o valoare mai mică de 0, înseamnă că cheia presat; altfel cheia nu a apăsat. O verificare similară poate fi aranjată pentru tastele CTRL și ALT (figura 10).

Smochin. 10. Verificarea tastelor Shift, Ctrl și ALT

Codul funcției VBA poate fi găsit în fișierul Excel atașat.

Lucrul cu funcțiile API Windows poate fi destul de complicat. În multe cărți de programare, operatorii AD API sunt enumerați cu exemple adecvate. De regulă, puteți copia pur și simplu expresiile de anunțuri și puteți utiliza funcțiile, care nu sunt atacate în esența lor. Majoritatea programatilor VBA din Excel consideră că API funcționează ca un panaceu pentru a rezolva cele mai multe sarcini. Pe Internet veți găsi sute de exemple destul de fiabile care pot fi copiate și inserate în propriul program.

Un fișier text conține anunțuri și constante de API Windows. Puteți deschide acest fișier într-un editor de text și copiați anunțurile corespunzătoare la modulul VBA.

În funcție de materialele cărții. - M: Dialectică, 2013. - P. 287-323.

Funcția scrisă pe VBA este un cod care efectuează calcule și returnează o valoare (sau o serie de valori). Prin crearea unei funcții, îl puteți folosi în trei moduri:

  1. Ca o formulă pe o foaie unde poate lua argumente și valori de returnare.
  2. Ca parte a subrutinei dvs. VBA. În sub procedura sau în alte funcții.
  3. În regulile de formatare condiționată.

Deși Excel conține deja mai mult de 450 de funcții încorporate, dar sunt, de asemenea, periodic lipsesc. Uneori funcțiile încorporate nu pot face ceea ce doriți să faceți. Uneori, pentru a atinge rezultatul, este necesar să se creeze o formulă imensă și complexă care nu este de înțeles cu ceilalți. În acest caz, puteți crea o funcție personalizată ușor de citit și de utilizat.

Rețineți că funcțiile utilizatorilor create folosind VBA sunt, de obicei, mult mai lentă decât funcțiile încorporate. În consecință, ele sunt cele mai potrivite pentru situații în care nu puteți obține rezultatul utilizând funcții sau calcule încorporate, nu prea mult și reducerea productivității nu este critică.

Funcțiile integrate pot folosi nu numai dvs., ci și colegii dvs. Funcțiile scrise vor apărea împreună cu alții în caseta de dialog Master Function. Poate că sunteți înspăimântați de procesul de a crea funcții, dar mă grăbesc să vă asigur că este suficient de simplu.

Care este diferența dintre procedură (sub) din funcție (funcție)?

Principala diferență este că procedura (sub) este utilizată pentru a efectua un set de comenzi și nu este destinat să returneze valoarea (sau o serie de valori), spre deosebire de funcția (funcția).

Pentru o demonstrație, dăm un exemplu. De exemplu, există un număr de numere de la 1 la 100 și este necesar să se separe chiar de la ciudat.

Folosind procedura (sub), puteți, de exemplu, să treceți prin celule și să alocați ciudat prin umplere. Și funcția poate fi utilizată în coloana adiacentă și va returna adevărul sau se află în funcție de valoarea uniformă sau nu. Acestea. Nu veți putea schimba culoarea completării cu funcția pe foaie.

Crearea unei funcții simple de utilizator în VBA

Să creăm o funcție simplă de utilizator pe VBA și să vedeți cum funcționează totul acolo.

Următorul este un cod de funcții care lasă numai numere din text, discând valorile literei.

Numere de funcții (text ca șir) atâta timp cât de mult dimează ca rezultat mult timp ca șir pentru i \u003d 1 până la len (text) dacă isnumeric (textul, i, 1)), atunci rezultatul \u003d rezultat și mijlocul (text, i, 1 ) Next Figuri \u003d CLNG (rezultat) Funcția de capăt

Pentru a face totul câștigat, trebuie să introduceți acest cod în modulul de carte. Dacă nu știți cum să faceți acest lucru, porniți de la articol Cum să înregistrați un macro în Excel.

Acum, să vedem cum funcționează funcția, încercați să o utilizați pe foaie:

Înainte de a dezasambla funcția în sine, notăm 2 momente plăcute care au apărut după crearea:

  • A devenit disponibil, ca orice altă funcție încorporată (cum să creați o funcție ascunsă, să spunem mai târziu).
  • Când ați introdus semnul "\u003d" și începeți să introduceți numele funcției, atunci Excel afișează toate coincidențele și arată nu numai funcțiile încorporate, ci și personalizate.

Dezasamblează pasul pas cu pas

Acum, haideți profund plonjați și vedem cum a fost creată această caracteristică. Funcția de la linie începe

Funcțiile de funcții (ca text de șir) cât timp

Cuvânt Funcţie. Vorbește despre începutul funcției, atunci numele său merge, în cazul nostru Numere.

  • Numele funcției nu poate conține spații. În plus, nu puteți apela funcția dacă se confruntă cu numele legăturii către celulă. De exemplu, nu puteți numi funcția ABC123, deoarece acest nume se referă, de asemenea, la celula din foaia Excel.
  • Nu trebuie să indicați funcția dvs. același nume ca și funcția existentă. Dacă o faceți, Excel va da preferință funcției încorporate.
  • Puteți utiliza simbolul de accent dacă doriți să împărțiți cuvintele. De exemplu, Suma în cuirsiveeste un nume admisibil.

După numele în paranteze, sunt descrise argumentele funcției. Prin analogie cu caracteristicile excelate încorporate. În cazul nostru, se folosește singurul argument. Text. După numele argumentului, am indicat Ca șirAceasta înseamnă că argumentul nostru este o valoare a textului sau o referire la o celulă care conține o valoare a textului. Dacă nu specificați tipul de date, VBA va considera ca Variantă. (ceea ce înseamnă că puteți utiliza orice tip de date, VBA o va determina singur).

Ultima parte a primei linii Atâta timp. Specifică tipul de date care returnează o funcție. În cazul nostru, funcția va returna valorile întregi. De asemenea, nu este necesar.

Al doilea și al treilea rând al funcției anunță variabile interne suplimentare pe care le vom folosi.

Dim I Cât de mult rezultat greu ca șir

Variabil i. Vom fi folosiți pentru a enumera personajele. O variabilă rEZULTAT Pentru a stoca rezultatul intermediar al funcției.

Sarcina funcției este de a trece prin toate simbolurile textului variabil și de a salva numai cele care sunt numere. Prin urmare, porniți ciclul de la 1 la ultimul simbol.

Pentru i \u003d 1 la len (text)

Len este o funcție care definește numărul de caractere.

Rândul principal al funcției este de a verifica dacă următorul simbol text este numărul și dacă da - apoi salvați-l în variabila de rezultate

Dacă isnumeric (mijloc (text, i, 1)), atunci rezultatul \u003d rezultat și mijlocul (text, i, 1)

Pentru aceasta avem nevoie de o funcție Isnumeric.- Ea se întoarce Adevărat.dacă textul este numărul și Falsin caz contrar.

Funcţie Mid.ia text din argument i.Simbol (valoare 1 indică faptul că funcția Mid.doar 1 simbol are) /

Funcţie Următorul - închide ciclul Pentru Totul este clar aici.

Figuri \u003d CLNG (rezultat)

Convertiți variabila de text la acest șir. rEZULTATcare conține toate cifrele argumentului Text, sensul numeric. Și spunem ce fel de rezultat ar trebui ca funcția noastră Numere.

Ultima linie de cod - Funcția finală.. Aceasta este o linie obligatorie de cod care raportează VBA că codul funcției se încheie aici.

Codul de mai jos descrie diferitele părți ale unei funcții tipice de utilizator create în VBA. În următoarele articole, vom analiza aceste elemente în detaliu, precum și luați în considerare diferite modalități de a efectua funcția VBA în Excel.