Ugrađene vba funkcije. VBA Excel. Prilagođena funkcija (sintaksa, komponente). Kreiranje funkcije u VBA sa više argumenata

Funkcija napisana u VBA je kod koji izvodi proračun i vraća vrijednost (ili niz vrijednosti). Nakon što kreirate funkciju, možete je koristiti na tri načina:

  1. Kao formula u radnom listu, gdje može uzeti argumente i vratiti vrijednosti.
  2. Kao dio vaše VBA rutine. U podproceduri ili unutar drugih funkcija.
  3. U pravilima uslovnog oblikovanja.

Iako Excel već sadrži više od 450 ugrađenih funkcija, one ponekad nedostaju. Ponekad ugrađene funkcije ne mogu učiniti ono što želite. Ponekad, da biste postigli rezultat, morate stvoriti ogromnu i složenu formulu koja drugima nije razumljiva. U tom slučaju možete kreirati prilagođenu funkciju koja je laka za čitanje i korištenje.

Imajte na umu da su korisnički definirane funkcije kreirane pomoću VBA općenito znatno sporije od ugrađenih funkcija. Stoga su najprikladniji za situacije u kojima ne možete dobiti rezultat korištenjem ugrađenih funkcija ili nema puno računanja, a kazna performansi nije kritična.

Ne samo vi, već i vaše kolege možete koristiti ugrađene funkcije. Funkcije koje napišete će se pojaviti pored ostalih u dijalogu Čarobnjak za funkcije. Možda ćete biti zastrašeni procesom kreiranja funkcija, ali žurim da vas uvjerim da je prilično jednostavan.

Koja je razlika između procedure (Sub) i funkcije (Function)?

Glavna razlika je u tome što se procedura (sub) koristi za izvršavanje skupa naredbi i nije namijenjena, za razliku od funkcije (funkcije), da vrati vrijednost (ili niz vrijednosti).

Da demonstriramo, dajmo primjer. Na primjer, postoji niz brojeva od 1 do 100 i morate odvojiti parne od neparnih.

Koristeći (pod) proceduru, možete, na primjer, proći kroz ćelije i označiti neparne pomoću ispune. A funkcija se može koristiti u susjednoj koloni i vratit će TRUE ili FALSE ovisno o tome da li je vrijednost parna ili ne. One. nećete moći promijeniti boju ispune pomoću funkcije na radnom listu.

Kreiranje jednostavne korisnički definirane funkcije u VBA

Kreirajmo jednostavnu prilagođenu funkciju u VBA i vidimo kako sve funkcionira.

Ispod je kod za funkciju koja ostavlja samo brojeve iz teksta, odbacujući vrijednosti slova.

Brojevi funkcija(tekst kao niz) kao dugi dim i kao dugi dim rezultat kao niz za i = 1 do Len(tekst) ako je numerički(sredina(tekst, i, 1)) Tada je rezultat = rezultat & sredina(tekst, i, 1 ) Sljedeći brojevi = CLng(rezultat) Krajnja funkcija

Da bi sve funkcionisalo za vas, morate da ubacite ovaj kod u modul knjige. Ako ne znate kako to učiniti, počnite sa člankom Kako snimiti makro u Excelu.

Sada da vidimo kako funkcija funkcionira, pokušajmo je koristiti na listu:

Prije analize same funkcije, zabilježimo 2 ugodna trenutka koja su se pojavila nakon njenog kreiranja:

  • Postala je dostupna kao i svaka druga ugrađena funkcija (kako kreirati skrivena funkcija, reći ćemo dalje).
  • Kada unesete znak "=" i počnete kucati naziv funkcije, Excel prikazuje sva podudaranja i prikazuje ne samo ugrađene funkcije, već i one prilagođene.

Analizirajmo funkciju korak po korak

Hajdemo sada duboko zaroniti i vidjeti kako je ova funkcija stvorena. Funkcija počinje linijom

Brojevi funkcija (tekst kao string) dokle god

Riječ Funkcija govori o početku funkcije, nakon čega slijedi njen naziv, u našem slučaju Brojevi.

  • Ime funkcije ne može sadržavati razmake. Također, ne možete pozvati funkciju ako se sudari s referentnim imenom ćelije. Na primjer, ne možete imenovati funkciju ABC123 jer se to ime također odnosi na ćeliju u Excel radnom listu.
  • Ne biste trebali svojoj funkciji dati isto ime kao postojeća funkcija. Ako to učinite, Excel će dati prednost ugrađenoj funkciji.
  • Možete koristiti donju crtu ako želite razdvojiti riječi. Na primjer, Suma u kurzivu je važeći naziv.

Nakon imena, argumenti funkcije su opisani u zagradama. Slično kao i ugrađeni Excel funkcije. U našem slučaju, jedini argument koji se koristi je Tekst. Nakon naziva argumenta koji smo naveli Kao String, to znači da je naš argument tekstualna vrijednost ili referenca na ćeliju koja sadrži tekstualnu vrijednost. Ako ne navedete tip podataka, VBA će ga tretirati kao Varijanta(što znači da možete koristiti bilo koji tip podataka, VBA će to shvatiti za vas).

Poslednji deo prvog reda Sve dok specificira tip podataka koji funkcija vraća. U našem slučaju, funkcija će vratiti cjelobrojne vrijednosti. Ovo takođe nije neophodno.

Drugi i treći red funkcije deklariraju dodatne interne varijable koje ćemo koristiti.

Dim i As Long Dim rezultat As String

Varijabilna i koristićemo ga za nabrajanje znakova. Varijabla rezultat za pohranjivanje međurezultata funkcije.

Zadatak funkcije je da prođe kroz sve znakove u varijabli Text i sačuva samo one koji su brojevi. Stoga ćemo započeti petlju od 1 do posljednjeg znaka.

Za i = 1 do Len(tekst)

Len je funkcija koja određuje broj znakova.

Glavna linija funkcije provjerava je li sljedeći znak teksta broj i, ako jeste, pohranjuje ga u varijablu rezultata

Ako je Numerički (sredina (tekst, i, 1)) onda je rezultat = rezultat i sredina (tekst, i, 1)

Za ovo nam je potrebna funkcija IsNumeric- ona se vraća Istinito ako je tekst broj i False inače.

Funkcija Mid preuzima iz argumenta Text i taj znak (značenje 1 , označava da je funkcija Mid zauzima samo 1 znak)/

Funkcija Sljedeći- zatvara petlju Za ovde je sve jasno.

Brojevi = CLng(rezultat)

Ovom linijom konvertujemo tekstualnu promenljivu rezultat, koji sadrži sve cifre argumenta Tekst, V numerička vrijednost. I mi kažemo koji rezultat bi naša funkcija trebala dati Brojevi.

Zadnji red koda je End Funkcija. Ovo je obavezna linija koda koja govori VBA da se kod funkcije završava ovdje.

Gornji kod opisuje različite dijelove tipične korisnički definirane funkcije kreirane u VBA. U budućim člancima ćemo detaljnije razmotriti te elemente i također ih pogledati razne načine izvršenje VBA funkcije u Excelu.

Dim nRezult As Integer

nMult1 = CInt(InputBox("Unesite prvi broj: ")) nMult2 = CInt(InputBox("Unesite drugi broj: ")) nResult = fMultiply(nMult1, nMult2)

Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd

4. Za komentiranje koda AutoNew(), označite sav kod za ovu proceduru (uključujući javni pod AutoNew() i End Sub) i kliknite na dugme Blok komentara na traci sa alatkama Uredi.

3.9. Ugrađene VBA jezičke funkcije

3.9.1. Šta su ugrađene funkcije

IN Programski jezik VBA nudi nekoliko desetinaugrađene funkcije. Dostupni su u bilo kom programu na VBA jeziku i nije bitno u kom se softverskom proizvodu nalazimo - Excel, Word, Access ili, na primer, AutoCAD. Koriste se vrlo aktivno, a u mnogim situacijama bez njih se ne može. Profesionalni programeri ih koriste potpuno automatski, ali bih savjetovao običnim korisnicima da provedu nekoliko sati upoznajući ih, jer bez poznavanja ovih funkcija neće moći efikasno da rade u VBA. Dodatni argument u prilog njihovom proučavanju je da se gotovo identičan skup funkcija nalazi u uobičajenom Visual basic i VBScript, a mnoge od ovih funkcija sa istim imenima i sintaksom nalaze se u drugim programskim jezicima - C++, Delphi, Java, JavaScript, itd.

IN U VBA pomoći, ugrađene funkcije su grupisane po slovu (slika 3.2).

Mnogi polaznici kurseva postavili su pitanje: postoji li pomoć za ove funkcije na ruskom? Nažalost, nisam mogao pronaći takav certifikat, pa ću pokušati dati kratke informacije u ovoj knjizi. Zatim ćemo govoriti o većini aktivno korišćenih funkcija jezika VBA (matematičke funkcije kao što su kosinus ili tangenta, koje su praktičan rad se gotovo nikada ne koriste i nećemo razmatrati finansijske funkcije). Da bi se uštedio prostor, neće biti data potpuna sintaksa funkcija: glavna stvar je razumjeti što svaka funkcija radi i u kojim situacijama se može koristiti.

Funkcije u sljedećim odjeljcima grupirane su prema funkcionalnosti. Ako trebate pronaći informacije samo po imenu funkcije, možete koristiti indeks na kraju knjige.

Rice. 3.2. Pomoć za ugrađene funkcije

3.9.2. Funkcije konverzije i provjere tipa podataka

U VBA programima je vrlo uobičajeno pretvaranje vrijednosti iz jednog tipa podataka u drugi. Evo nekoliko tipičnih situacija kada to morate učiniti:

pretvaranje iz vrijednosti niza u numeričku vrijednost kada prima vrijednost od korisnika putem InputBox() ;

Pretvaranje vrijednosti datuma/vremena u vrijednost stringa kada trebamo dosljedno prikazati datum ili vrijeme bez obzira na regionalne postavke na računarima korisnika;

pretvaranje vrijednosti iz stringa u datum/vrijeme za korištenje posebnih funkcija datuma/vremena.

Za pretvaranje tipova podataka najčešće se koriste funkcije čije se ime sastoji od prefiksa “C” (od riječi Convert) i naziva tipa podataka. Lista ovih funkcija je sljedeća: CBool(), CByte(), CCur(), CDate(),

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

Možete vidjeti što se na kraju dogodilo pomoću funkcije TypeName(), koja vraća naziv korištenog tipa podataka, na primjer:

nVar1 = CInt(InputBox("Unesite vrijednost")) MsgBox TypeName(nVar1)

U ovom slučaju, ova funkcija će vratiti "Integer".

Osim toga, postoji nekoliko drugih funkcija korisnih za konverziju.

Str() - omogućava vam da pretvorite numeričku vrijednost u string. Radi skoro istu stvar kao CStr(), ali umeće razmak ispred pozitivnih brojeva.

Val() - "izvlači" samo numeričku vrijednost iz mješavine brojeva i slova. U ovom slučaju, funkcija čita podatke s lijeva na desno i zaustavlja se na prvoj nenumeričkoj vrijednosti (jedina dozvoljena nenumerička vrijednost je tačka, koja će odvojiti cijeli broj od razlomka). Vrlo je zgodno kada zapisujemo mjerne jedinice ili valutu isprepletene brojčanim podacima.

IsNumeric() i IsDate() - provjerite konzistentnost vrijednosti kako ne bi bilo grešaka tokom konverzije. Da biste provjerili usklađenost s posebnim vrijednostima, možete koristiti funkcije IsArray(), IsEmpty(),

IsError(), IsMissing(), IsNull() i IsObject() . Sve ove funkcije se vraćaju

Tačno ili Netačno u zavisnosti od rezultata provjere vrijednosti koja im je proslijeđena.

Hex() i Oct() - Pretvorite decimalne podatke u string prikaz heksadecimalnih i oktalnih vrijednosti.

3.9.3. Funkcije niza

Ovo su najčešće korištene funkcije. Oni su stalno potrebni i morate ih dobro poznavati.

Asc() - ova funkcija vam omogućava da vratite numerički kod za proslijeđeni znak. Na primjer, Asc("D") će vratiti 68. Ova funkcija je korisna za određivanje sljedećeg ili prethodnog slova. Obično se koristi zajedno sa funkcijom Chr(), koja izvodi inverznu operaciju - vraća znak prema njegovom numeričkom kodu. Na primjer, ovaj kod u Excelu vam omogućava da uzastopno pišete slova ruske abecede od A do U u ćelijama A1 do A20:

Dim n, nCharCode kao cijeli broj n = 1

nCharCode = Asc("A") Uradi Dok n<= 20

ActiveWorkbook.ActiveSheet.Range("A" & n).Value = Chr(nCharCode)

VBA sintaksa i programske konstrukcije

nCharCode = nCharCode + 1 petlja

Varijante ove funkcije su AscB() i AscW(). AscB() vraća samo prvi bajt numeričkog koda za znak, dok AscW() vraća Unicode kod za znak.

Chr() - vraća znak po njegovom numeričkom kodu. Osim što se koristi zajedno s funkcijom Asc() (pogledajte prethodni primjer), ne možete bez nje u još jednoj situaciji: kada trebate ispisati uslužni karakter. Na primjer, u Wordu trebamo upisati vrijednost "Gazprom" (pod navodnicima). Navod je uslužni znak i pokušaj korištenja niza kao što je:

Selection.Text = ""Gazprom""

će rezultirati sintaksičkom greškom. I ovako će sve biti u redu:

Selection.Text = Chr(34) & "Gazprom" & Chr(34)

Postoje varijante ove funkcije - ChrB() i ChrW(). One rade slično kao iste opcije za funkciju Asc().

InStr() i InStrRev() su neke od najpopularnijih funkcija. Omogućava vam da otkrijete niz znakova u tijelu string varijable i vratite njenu poziciju. Ako sekvenca nije pronađena, onda se vraća 0. Funkcija InStr() pretražuje od početka niza, a InStrRev() pretražuje od kraja.

Left() , Right() , Mid() - omogućavaju vam da uzmete broj znakova koji navedete iz postojeće varijable stringa na lijevoj, desnoj ili sredini, respektivno.

Len() - vraća broj znakova u nizu (dužina niza). Često se koristi sa petljama, operacijama zamjene itd.

LCase() i UCase() - pretvaraju niz u mala i velika slova, respektivno. Često se koristi za pripremu vrijednosti za poređenje kada veliki i veliki slova nisu važni (prezimena, nazivi kompanija, gradova itd.).

LSet() i RSet() - ispunite jednu varijablu simbolima druge bez promjene njene dužine (lijevo i desno, respektivno). Dodatni znakovi su odsječeni, a razmaci se zamjenjuju za znakove koji nedostaju.

LTrim() , RTrim() , Trim() - uklanjaju razmake s lijeve, desne ili i lijeve i desne strane.

Zamijeni() - zamjenjuje jedan niz znakova drugim u nizu.

Razmak() i String() - vraćaju niz broja razmaka ili znakova koje navedete. Obično se koristi za formiranje

Funkcija-procedura je posebna vrsta VBA procedure koja vraća rezultat. Korisnički definirane proceduralne funkcije, poput ugrađenih funkcija VBA, mogu imati opcione i imenovane argumente. Ne možete koristiti makro snimač za snimanje funkcije procedure, iako možete urediti makro snimljen diktafonom i pretvoriti ga u funkciju procedure.

Glavna razlika između funkcije procedure i drugih procedura, osim činjenice da funkcije vraćaju vrijednost, a procedure ne, je u tome što funkcija procedure koristi ključne riječi Funkcija I End Funkcija.

sintaksa:

Naziv funkcije()
„VBA izjave
End Funkcija

Funkcija je ključna riječ koja deklarira početak funkcije.

Ime - naziv funkcije. Imena funkcija slijede ista pravila kao i druga imena VBA identifikatora.

Arglist - lista argumenata za ovu funkciju, opcioni element.

Vrsta - bilo koja vrsta povratne vrijednosti funkcije. Ako je tip nedefiniran, rezultat koji vraća funkcija procedure je tipa Variant.

Ime = izraz je dodjela funkcije koja govori VBA koju vrijednost funkcija treba da vrati, opcioni element. Međutim, uvijek biste trebali uključiti operator dodjeljivanja u funkcije procedure.

Završna funkcija - ključne riječi koje završavaju funkciju.


Čak i ako funkcija nema argumente (na primjer, sada, datum), morate koristiti zagrade u deklaraciji funkcije.

Obično je funkcija dizajnirana da izvrši izračunavanje i vrati rezultat. Kada deklarirate funkciju procedure, specificirate ime svakog argumenta koji se prosljeđuje funkciji. Imena argumenata na listi su odvojena zarezom i moraju slijediti pravila koja se primjenjuju na bilo koji VBA identifikator.


Ispod je popis upotrebe jednostavne procedure funkcije koja uklanja početne i zadnje razmake i broji broj znakova u izrazu.



Bez korištenja funkcije, lista bi izgledala ovako:



Iz ovog jednostavnog primjera, mislim da je glavna ideja korištenja proceduralnih funkcija jasna - poboljšanje čitljivosti programskog koda i njegovo smanjenje (drugim riječima, funkcija procedure se piše kada se isti "komad" koda pojavljuje više od 2 -3 puta u programskom kodu). Zaista, kada bi se naša proceduralna funkcija sastojala ne od jednog reda, već, recimo, od 10 redova; i programski kod bi koristio ovu proceduru funkciju 5 puta, tada bi ukupna lista programa bila 38 redova kraća.


Kao što je ranije rečeno, VBA prosljeđuje sve argumente funkcijskoj proceduri kao tipove Variant. Možete deklarisati specifične tipove podataka za svaki argument na listi argumenata.

Prije nego počnete kreirati vlastite VBA funkcije, korisno je znati da Excel VBA ima veliku kolekciju unaprijed ugrađenih funkcija koje možete koristiti prilikom pisanja koda.

Spisak ovih funkcija može se videti u VBA editoru:

  • Otvorite Excel radnu svesku i pokrenite VBA editor (kliknite ovde Alt+F11), a zatim kliknite F2.
  • Izaberite biblioteku sa padajuće liste u gornjem levom uglu ekrana VBA.
  • Pojavljuje se lista ugrađenih VBA klasa i funkcija. Kliknite na naziv funkcije za prikaz kratkog opisa na dnu prozora. Pritiskom F1će otvoriti stranicu pomoći na mreži za tu funkciju.

Dodatno, potpuna lista ugrađenih VBA funkcija sa primjerima može se naći na web stranici Visual Basic Developer Center.

Prilagođene funkcije i podprocedure u VBA

U programu Excel Visual Basic, skup naredbi koje izvršavaju određeni zadatak stavlja se u proceduru Funkcija(Funkcija) ili Sub(Podrutina). Glavna razlika između procedura Funkcija I Sub da li je to procedura Funkcija vraća rezultat, proceduru Sub- Ne.

Stoga, ako trebate izvršiti radnje i dobiti neki rezultat (na primjer, zbrojiti nekoliko brojeva), tada se obično koristi postupak Funkcija, a da biste jednostavno izvršili neke radnje (na primjer, promijenili formatiranje grupe ćelija), morate odabrati proceduru Sub.

Argumenti

Različiti podaci se mogu proslijediti VBA procedurama koristeći argumente. Lista argumenata je specificirana kada je procedura deklarirana. Na primjer, procedura Sub u VBA, dodaje navedeni cijeli broj (Integer) svakoj ćeliji u odabranom rasponu. Možete proslediti ovaj broj proceduri koristeći argument, kao što je ovaj:

Sub AddToCells(i As Integer) ... End Sub

Imajte na umu da imate argumente za procedure Funkcija I Sub u VBA je opciono. Neke procedure ne zahtijevaju argumente.

Opcioni argumenti

VBA procedure mogu imati opcione argumente. Ovo su argumenti koje korisnik može specificirati ako želi, a ako su izostavljeni, procedura koristi zadane vrijednosti za njih.

Vraćajući se na prethodni primjer, da biste učinili cjelobrojni argument funkciji opcionim, deklarirali biste je ovako:

Sub AddToCells (opciono i kao cijeli broj = 0)

U ovom slučaju, cjelobrojni argument i default će biti 0.

U proceduri može postojati nekoliko opcionih argumenata; svi su navedeni na kraju liste argumenata.

Prenošenje argumenata po vrijednosti i referenci

Argumenti u VBA mogu se proslediti proceduri na dva načina:

  • ByVal– prosljeđivanje argumenta po vrijednosti. To znači da se samo vrijednost (tj. kopija argumenta) prosljeđuje proceduri, i stoga će sve promjene unesene u argument unutar procedure biti izgubljene kada izađe iz procedure.
  • ByRef– prosljeđivanje argumenta referencom. To jest, proceduri se prosljeđuje stvarna adresa argumenta u memoriji. Sve promjene unesene u argument unutar procedure bit će sačuvane kada se procedura zatvori.

Korištenje ključnih riječi ByVal ili ByRef U deklaraciji procedure možete tačno odrediti kako se argument prosljeđuje proceduri. Ovo je dolje ilustrovano primjerima:

Zapamtite da se argumenti u VBA prosljeđuju kao referenca po defaultu. Drugim riječima, ako se ključne riječi ne koriste ByVal ili ByRef, tada će argument biti proslijeđen referencom.

Prije nego nastavite sa učenjem procedura Funkcija I Sub Detaljnije će biti korisno još jednom pogledati karakteristike i razlike između ove dvije vrste procedura. Sledi kratka rasprava o VBA procedurama Funkcija I Sub a prikazani su jednostavni primjeri.

VBA procedura "Funkcija"

VBA editor prepoznaje proceduru Funkcija

Funkcija...Kraj funkcija

Kao što je ranije pomenuto, procedura Funkcija u VBA (za razliku od Sub), vraća vrijednost. Sljedeća pravila se primjenjuju na povratne vrijednosti:

  • Tip podataka povratne vrijednosti mora biti deklariran u zaglavlju procedure Funkcija.
  • Varijabla koja sadrži povratnu vrijednost mora imati isti naziv kao i procedura Funkcija. Ova varijabla ne mora biti posebno deklarirana jer uvijek postoji kao sastavni dio procedure Funkcija.

Ovo je savršeno ilustrovano u sljedećem primjeru.

Primer VBA procedure “Funkcija”: Izvođenje matematičke operacije sa 3 broja

Ispod je primjer koda VBA procedure Funkcija, koji uzima tri argumenta tipa Dvostruko(brojevi s pomičnim zarezom dvostruke preciznosti). Kao rezultat, procedura vraća drugi broj tipa Dvostruko, jednako zbroju prva dva argumenta minus treći argument:

Funkcija SumMinus(dNum1 kao duplo, dNum2 kao duplo, dNum3 kao duplo) kao dvostruka summinus = dNum1 + dNum2 - dNum3 Krajnja funkcija

Ovo je vrlo jednostavna VBA procedura Funkcija ilustruje kako se podaci prosleđuju proceduri kroz argumente. Možete vidjeti da je tip podataka koji vraća procedura definiran kao Dvostruko(reči govore ovo Kao Double nakon liste argumenata). Ovaj primjer također pokazuje kako je rezultat postupka Funkcija je pohranjen u varijablu s istim imenom kao i ime procedure.

Pozivanje VBA procedure "Funkcija"

Ako je jednostavan postupak opisan gore Funkcija umetnut u modul u uređivaču Visual Basic-a, može se pozvati iz drugih VBA procedura ili koristiti na radnom listu u Excel radnoj knjizi.

Pozivanje VBA procedure "Funkcija" iz druge procedure

Procedura Funkcija može se pozvati iz druge VBA procedure jednostavnim dodeljivanjem ovoj proceduri promenljivoj. Sljedeći primjer pokazuje poziv proceduri SumMinus, koji je gore definisan.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

Pozivanje VBA procedure "Funkcija" sa radnog lista

VBA procedura Funkcija može se pozvati iz Excel radnog lista na isti način kao i bilo koja druga ugrađena Excel funkcija. Stoga je procedura kreirana u prethodnom primjeru FunkcijaSumMinus može se pozvati unošenjem sljedećeg izraza u ćeliju radnog lista:

Zbroj Minus(10, 5, 2)

VBA procedura "Sub"

Urednik VBA shvata da je pred njim procedura Sub, kada naiđe na grupu naredbi zatvorenih između sljedećih naredbi za otvaranje i zatvaranje:

Sub...End Sub

VBA procedura "Sub": Primjer 1. Poravnanje po sredini i promjena veličine fonta u odabranom rasponu ćelija

Pogledajmo primjer jednostavne VBA procedure Sub, čiji je zadatak da promijeni formatiranje odabranog raspona ćelija. Ćelije su postavljene na centralno poravnanje (i okomito i vodoravno) i veličina fonta se mijenja u onu koju je odredio korisnik:

Sub Format_Centered_And_Sized(Opcijski iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Ova procedura Sub izvodi radnje, ali ne vraća rezultate.

Ovaj primjer također koristi Opcijski argument iFontSize. Ako je argument iFontSize nije prosleđen u proceduru Sub, tada se njegova zadana vrijednost uzima kao 10. Međutim, ako je argument iFontSize prešao u proceduru Sub, tada će veličina fonta koju je odredio korisnik biti postavljena u odabranom rasponu ćelija.

VBA procedura “Sub”: Primjer 2. Poravnanje po sredini i primjena podebljanog na font u odabranom rasponu ćelija

Sljedeća procedura je slična onoj o kojoj smo upravo govorili, ali ovaj put, umjesto promjene veličine, primjenjuje podebljani stil fonta na odabrani raspon ćelija. Ovo je primjer postupka Sub, kojem se ne prosljeđuju argumenti:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Pozivanje "Sub" procedure u Excel VBA

Pozivanje VBA procedure "Sub" iz druge procedure

Za pozivanje VBA procedure Sub iz druge VBA procedure, potrebno je da zapišete ključnu reč Zovi, naziv procedure Sub a zatim u zagradama argumenti procedure. Ovo je prikazano u primjeru ispod:

Sub main() Format poziva_Centered_And_Sized(20) End Sub

Ako je procedura Format_centrirano_i_veličinom ima više od jednog argumenata, moraju biti odvojeni zarezima. Volim ovo:

Sub main() Poziv Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Pozivanje VBA procedure "Sub" sa radnog lista

Procedura Sub ne može se uneti direktno u ćeliju Excel radnog lista, kao što se može uraditi procedurom Funkcija, jer procedura Sub ne vraća vrijednost. Međutim, procedure Sub, koji nemaju argumente i deklarirani su kao Javno(kao što će biti pokazano kasnije) biće dostupni korisnicima radnog lista. Dakle, ako su jednostavne procedure opisane gore Sub umetnuti u modul u Visual Basic editoru, a zatim proceduru Format_centrirano_i_podebljano biće dostupan za upotrebu na Excel radnom listu i proceduri Format_centrirano_i_veličinom– neće biti dostupan jer ima argumente.

Evo jednostavnog načina da pokrenete (ili izvršite) proceduru Sub, dostupno sa radnog lista:

  • Kliknite Alt+F8(pritisnite tipku Alt i, dok ga držite pritisnutim, pritisnite taster F8).
  • Na listi makronaredbi koja se pojavi izaberite onaj koji želite da pokrenete.
  • Kliknite Izvrši(trčati)

Za izvođenje procedure Sub brzo i jednostavno, možete mu dodijeliti kombinaciju tipki. Za ovo:

  • Kliknite Alt+F8.
  • Na listi makronaredbi koja se pojavi odaberite onaj kojem želite dodijeliti prečicu na tipkovnici.
  • Kliknite Opcije(Opcije) i unesite prečicu na tastaturi u dijaloški okvir koji se pojavi.
  • Kliknite uredu i zatvorite dijaloški okvir Makro(Makro).

pažnja: Prilikom dodjeljivanja prečice na tipkovnici makrou, uvjerite se da se ne koristi kao standardna u Excelu (na primjer, Ctrl+C). Ako odaberete postojeću prečicu na tipkovnici, ona će biti ponovo dodijeljena makrou, a kao rezultat toga, korisnik može slučajno pokrenuti makro.

Opseg VBA procedure

Drugi dio ovog tutorijala raspravljao je o temi opsega varijabli i konstanti i uloge ključnih riječi Javno I Privatno. Ove ključne riječi se također mogu koristiti u vezi sa VBA procedurama:

Zapamtite da ako prije deklariranja VBA procedure Funkcija ili Sub ključna riječ nije umetnuta, tada je postavljeno zadano svojstvo za proceduru Javno(to jest, biće dostupan svuda u datom VBA projektu). Ovo se razlikuje od deklariranja varijabli, koje su po defaultu Privatno.

Rani izlazak iz VBA procedura “Funkcija” i “Sub”

Ako trebate prekinuti izvršavanje VBA procedure Funkcija ili Sub, bez čekanja na njegov prirodni završetak, onda postoje operatori za ovo Izlaz funkcija I Exit Sub. Upotreba ovih operatora je prikazana u nastavku koristeći primjer jednostavne procedure Funkcija, koji očekuje da će dobiti pozitivan argument za obavljanje daljnjih operacija. Ako je nepozitivna vrijednost proslijeđena proceduri, tada se daljnje operacije ne mogu izvoditi, tako da korisniku mora biti prikazana poruka o grešci i procedura mora odmah prekinuti:

Funkcija Iznos_PDV(sVAT_Stopa kao pojedinačna) Kao pojedinačni iznos_iznos PDV-a = 0 Ako sVAT_stopa<= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received " & sVAT_Rate Exit Function End If ... End Function

Imajte na umu da prije završetka procedure FunkcijaPDV_Iznos, ugrađena VBA funkcija je umetnuta u kod MsgBox, koji korisniku prikazuje iskačući prozor upozorenja.

Prilikom pisanja VBA koda u Excelu, skup ugrađenih operatora se koristi na svakom koraku. Ovi operatori su podijeljeni na matematičke, stringove, uporedne i logičke operatore. Zatim ćemo detaljno pogledati svaku grupu operatora.

Matematički operatori

Osnovni VBA matematički operatori navedeni su u tabeli ispod.

Desna kolona tabele prikazuje podrazumevani prioritet operatora u odsustvu zagrada. Dodavanjem zagrada u izraz, možete promijeniti redosljed u kojem se VBA izrazi izvršavaju po želji.

String operatori

Glavni string operator u Excel VBA je operator konkatenacije & (spajanje):

Operatori poređenja

Operatori poređenja se koriste za poređenje dva broja ili nizova i vraćanje logičke vrijednosti kao što je Boolean(Tačno ili netačno). Glavni Excel VBA operatori poređenja navedeni su u ovoj tabeli:

Logički operatori

Logički operatori, poput operatora poređenja, vraćaju Booleovu vrijednost tipa Boolean(Tačno ili netačno). Osnovni Excel VBA logički operatori navedeni su u tabeli ispod:

Gornja tabela ne navodi sve Bulove operatore dostupne u VBA. Kompletna lista logičkih operatora može se naći u Visual Basic Developer Center-u.

Ugrađene funkcije

Postoje mnoge ugrađene funkcije dostupne u VBA koje se mogu koristiti prilikom pisanja koda. U nastavku su neke od najčešće korištenih:

Funkcija Akcija
Abs Vraća apsolutnu vrijednost datog broja.
  • Trbušnjaci (-20) vraća vrijednost 20;
  • Trbušnjaci(20) vraća vrijednost 20.
Chr Vraća ANSI znak koji odgovara numeričkoj vrijednosti parametra.
  • Chr(10) vraća prijelom reda;
  • Chr(97) vraća karakter a.
Datum Vraća trenutni sistemski datum.
DateAdd Dodaje određeni vremenski interval određenom datumu. Sintaksa funkcije:

Dodaj datum( interval , broj , datum )

Gdje je argument interval definira tip vremenskog intervala koji se dodaje datom datum u iznosu navedenom u argumentu broj .

Argument interval može uzeti jednu od sljedećih vrijednosti:

  • Dodavanje datuma(“d”, 32, “01/01/2015”) dodaje 32 dana na datum 01/01/2015 i tako vraća datum 02/02/2015.
  • DateAdd(“ww”, 36, “01/01/2015”) dodaje 36 sedmica na datum 01/01/2015 i vraća datum 09/09/2015.
DateDiff Izračunava broj specificiranih vremenskih intervala između dva data datuma.
  • DateDiff(“d”, “01/01/2015”, “02/02/2015”) izračunava broj dana između datuma 01/01/2015 i 02/02/2015, vraćajući rezultat 32.
  • DateDiff(“ww”, “01/01/2015”, “03/03/2016”) izračunava broj sedmica između datuma 01/01/2015 i 03/03/2016, vraćajući rezultat 61.
Dan Vraća cijeli broj koji odgovara danu u mjesecu u datom datumu.

primjer: Dan(“01/29/2015”) vraća broj 29.

Sat Vraća cijeli broj koji odgovara broju sati u datom vremenu.

primjer: Sat (“22:45:00”) vraća broj 22.

InStr Uzima cijeli broj i dva niza kao argumente. Vraća poziciju pojavljivanja drugog niza unutar prvog, počevši pretraživanje na poziciji navedenoj cijelim brojem.
  • InStr(1, “Evo riječi koju tražite”, “riječ”) vraća broj 13.
  • InStr(14, “Ovo je riječ za pretraživanje, a ovdje je još jedna riječ za pretraživanje”, “riječ”) vraća broj 38.

Bilješka: Argument broja možda nije naveden, u kom slučaju pretraga počinje od prvog znaka niza specificiranog u drugom argumentu funkcije.

Int Vraća cijeli broj datog broja.

primjer: Int(5.79) vraća rezultat 5.

Isdate Povratak Istinito ako je data vrijednost datum, ili False– ako nije datum.
  • IsDate(“01/01/2015”) vraća Istinito;
  • IsDate(100) vraća False.
IsError Povratak Istinito, ako je data vrijednost greška, ili False– ako nije greška.
Nedostaje Ime opcionog argumenta procedure se prosleđuje kao argument funkciji. Nedostaje vraća Istinito, ako nije proslijeđena vrijednost za argument procedure u pitanju.
IsNumeric Povratak Istinito ako se data vrijednost može smatrati brojem, inače vraća False.
lijevo Vraća navedeni broj znakova s ​​početka proslijeđenog niza. Sintaksa funkcije je ova:

Lijevo( linija , dužina )

Gdje linija je originalni niz, i dužina– broj vraćenih znakova, računajući od početka reda.

  • Lijevo(“abvgdezziklmn”, 4) vraća string “abvg”;
  • Lijevo(“abvgdezziklmn”, 1) vraća string "a".
Len Vraća broj znakova u nizu.

primjer: Len(“abvgdez”) vraća broj 7.

Mjesec Vraća cijeli broj koji odgovara mjesecu u datom datumu.

primjer: Mjesec (“29.01.2015.”) vraća vrijednost 1.

Mid Vraća određeni broj znakova iz sredine proslijeđenog niza. Sintaksa funkcije:

sredina( linija , Počni , dužina )

Gdje linija je originalni niz Počni– položaj početka izvučene linije, dužina– broj znakova koji se izdvajaju.

  • Sredina(“abvgdezziklmn”, 4, 5) vraća string “where”;
  • Sredina(“abvgdezziklmn”, 10, 2) vraća string “cl”.
Minuta Vraća cijeli broj koji odgovara broju minuta u datom vremenu. Primjer: Minuta (“22:45:15”) vraća vrijednost 45.
Sad Vraća trenutni sistemski datum i vrijeme.
U redu Vraća navedeni broj znakova s ​​kraja proslijeđenog niza. Sintaksa funkcije:

tačno ( linija , dužina )

Gdje linija je originalni niz, i dužina– ovo je broj znakova koje treba izdvojiti, računajući od kraja datog niza.

  • Desno(“abvgdezziklmn”, 4) vraća string “clmn”;
  • Desno(“abvgdezziklmn”, 1) vraća string "n".
Sekunda Vraća cijeli broj koji odgovara broju sekundi u datom vremenu.

primjer: Drugi (“22:45:15”) vraća vrijednost 15.

Sqr Vraća kvadratni korijen numeričke vrijednosti proslijeđene kao argument.
  • Sqr(4) vraća vrijednost 2;
  • Sqr(16) vraća vrijednost 4.
Vrijeme Vraća trenutno sistemsko vrijeme.
Ubound Vraća gornji indeks dimenzije navedenog niza.

Bilješka: Za višedimenzionalne nizove, neobavezni argument može specificirati indeks čija se dimenzija treba vratiti. Ako nije navedeno, podrazumevano je 1.