Osnovne funkcije vba. Kreirajmo našu prvu funkciju u Excelu. Stvaranje funkcije u VBA s izbornim argumentima

28.03.2020 Recenzije

Dim nRezultat kao cijeli broj

nMult1 = CInt(InputBox("Unesite prvi broj: ")) nMult2 = CInt(InputBox("Unesite drugi broj: ")) nRezultat = 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 Sub AutoNew() i End Sub ) i kliknite gumb Blokiraj komentar na alatnoj traci Uredi.

3.9. Ugrađene funkcije VBA jezika

3.9.1. Što su ugrađene funkcije

U Programski jezik VBA nudi nekoliko desetakaugrađene funkcije. Dostupni su u bilo kojem VBA programu, bez obzira u kojem okruženju softverski proizvod nalazimo se - Excel, Word, Access ili npr. AutoCAD. Koriste se vrlo aktivno, au mnogim situacijama bez njih se ne može. Profesionalni programeri koriste ih potpuno automatski, i obični korisniciŽelio bih vam savjetovati da provedete nekoliko sati upoznavajući ih, jer bez poznavanja ovih funkcija nećete moći učinkovito raditi u VBA. Dodatni argument u prilog njihovom proučavanju je to što se gotovo identičan skup funkcija nalazi u uobičajenom Visual Basic i VBScript, a mnoge od ovih funkcija s istim nazivima i sintaksom nalaze se u drugim programskim jezicima - C++, Delphi, Java, JavaScript itd.

U U VBA pomoći, ugrađene funkcije grupirane su po slovu (Sl. 3.2).

Mnogi sudionici tečajeva postavili su pitanje: postoji li pomoć za ove funkcije na ruskom? Nažalost, nisam uspio pronaći takve podatke, pa ću pokušati dati kratku referencu u ovoj knjizi. Zatim ćemo govoriti o većini aktivno korištenih funkcija jezika VBA (matematičke funkcije, poput kosinusa ili tangensa, koje se gotovo uopće ne koriste u praktičnom radu, a nećemo razmatrati financijske funkcije). Kako bismo uštedjeli prostor, nećemo dati punu sintaksu funkcija: najvažnije 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 jednostavno prema nazivu funkcije, možete koristiti predmetni indeks na kraju knjige.

Riža. 3.2. Ugrađene funkcije Pomoć

3.9.2. Funkcije pretvorbe i provjere tipa podataka

U VBA programima vrlo je uobičajeno pretvarati vrijednosti iz jedne vrste podataka u drugu. Dat ću ti nekoliko tipične situacije kada morate učiniti ovo:

pretvaranje iz string vrijednosti u numeričku vrijednost prilikom primanja vrijednosti od korisnika preko InputBox() ;

Pretvaranje vrijednosti datuma/vremena u vrijednost niza kada trebamo dosljedno prikazati datum ili vrijeme bez obzira na regionalne postavke na korisničkim računalima;

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

Najčešće se za pretvaranje tipova podataka koriste funkcije čiji se naziv sastoji od prefiksa “C” (od riječi Convert) i naziva tipa podataka. Popis ovih funkcija je sljedeći: 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 tom će slučaju ova funkcija vratiti "Integer" .

Osim toga, postoji nekoliko drugih funkcija korisnih za konverziju.

Str() - omogućuje pretvaranje numeričke vrijednosti u niz. Radi gotovo isto što i CStr(), ali umeće razmak prije pozitivnih brojeva.

Val() - "izvlači" samo numeričku vrijednost iz mješavine brojeva i slova. U tom slučaju funkcija čita podatke slijeva nadesno i zaustavlja se na prvoj nenumeričkoj vrijednosti (jedina dopuštena nenumerička vrijednost je točka, koja će odvojiti cijeli broj od razlomka). Vrlo je zgodno kada zapisujemo mjerne jedinice ili valutu isprepletene numeričkim podacima.

IsNumeric() i IsDate() - provjerite dosljednost vrijednosti kako ne bi došlo do pogrešaka tijekom pretvorbe. Da biste provjerili usklađenost s posebnim vrijednostima, možete koristiti funkcije IsArray(), IsEmpty(),

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

Točno ili netočno ovisno o rezultatima provjere vrijednosti koja im je proslijeđena.

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

3.9.3. String funkcije

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

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

Dim n, nCharCode kao cijeli broj n = 1

nCharCode = Asc("A") Do While 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 prema njegovom numeričkom kodu. Osim što se koristi zajedno s funkcijom Asc() (pogledajte prethodni primjer), bez nje ne možete u još jednoj situaciji: kada trebate ispisati servisni znak. Na primjer, trebamo upisati vrijednost "Gazprom" (u navodnicima) u Wordu. Navodnik je servisni znak i pokušaj korištenja niza poput:

Selection.Text = ""Gazprom""

rezultirat će sintaktičkom pogreškom. I ovako će sve biti u redu:

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

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

InStr() i InStrRev() neke su od najpopularnijih funkcija. Omogućuje otkrivanje niza znakova u tijelu varijable niza i vraćanje njezinog položaja. Ako niz nije pronađen, vraća se 0. Funkcija InStr() pretražuje od početka niza, a InStrRev() pretražuje od kraja.

Lijevo(), Desno(), Srednje() - omogućuju vam da uzmete broj znakova koji navedete iz postojeće varijable niza s lijeve, desne ili srednje strane.

Len() - vraća broj znakova u nizu (duljina niza). Često se koristi s petljama, operacijama zamjene itd.

LCase() i UCase() - pretvaraju niz u mala i velika slova. Često se koristi za pripremu vrijednosti za usporedbu kada velika i mala slova nisu važna (prezimena, nazivi tvrtki, gradova itd.).

LSet() i RSet() - ispunjavaju jednu varijablu simbolima druge bez promjene njezine duljine (lijevo i desno, redom). Dodatni znakovi su odrezani, a razmaci su zamijenjeni znakovima koji nedostaju.

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

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

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

Gotovo sav programski kod VBA modula sadržan je u procedurama dva tipa: Sub (potprogrami) i Function (funkcije). Glavni zadatak funkcijske procedure je izračunati neku vrijednost i vratiti je na točku u kojoj je pozvana funkcijska procedura.

Sintaksa procedure funkcije:

Funkcija Ime_funkcije(argumenti As) As

Naziv_funkcije = Povratna_vrijednost

Završna funkcija

Funkcijski postupci mogu se koristiti u raznim izrazima.

Primjer 1

Na primjer, najjednostavnija procedura-funkcija Funkcija:

Funkcija F1(x kao valuta) kao valuta

Funkcija F1(x) može se koristiti u daljnjim proračunima (kod modula). Procedura tipa Function može se izvršiti samo pozivom iz druge procedure. Da bi to učinili, pozivajuća procedura mora dodijeliti ime ovog F1(x) nekoj varijabli.

Primjer 2

Na primjer, funkcija F1(x) može se koristiti u proceduri MySub() imenovanjem varijable "y" F1(x).

Dim y As Single 'Deklaracija varijable y

y = F1 (9) ‘Odredite F1 (x) za vrijednost x=9

Debug.Print y 'Ispis vrijednosti u prozoru Immediate

Funkcija F1 (x kao jedan) Kao jedan

F1 = x^10 ‘Povratna vrijednost x na potenciju 10

Ovdje funkcija F1(x)=$x^(10)$ za vrijednost $ x=9$ vraća vrijednost $3,486785E+09$ pozivnoj proceduri MySub(). Ako povratna vrijednost funkcije ili varijabla koja se koristi u VBA proceduri nema deklariranu vrstu podataka, zadana vrsta podataka bit će Variant.

VBA koristi i funkcionalne postupke i ugrađene funkcije.

Ugrađene funkcije sastoje se od dva dijela: imena (identifikatora) ​​i argumenata. Ugrađene funkcije su gotove VBA formule koje izvode određene radnje na izrazima i vraćaju neku vrijednost na mjestu njihova poziva.

Funkcije vraćaju vrijednost rezultata umjesto svog naziva, koji se koristi u daljnjim izračunima. Tipično, funkcije zahtijevaju argumente koji se pišu u zagradama odvojene zarezima. Ali neke funkcije ne zahtijevaju argumente. Na primjer, funkcija Now(), koja ne zahtijeva argumente, vraća trenutni sistemski datum i vrijeme. Funkcije se mogu koristiti za stvaranje novih izraza ili funkcija.

Kako umetnuti funkciju u tekst programa? Da biste koristili funkciju u izrazima, morate unijeti njezin naziv u VBA izjavu. Da biste pozvali ugrađenu funkciju koja ne zahtijeva argumente, samo unesite njezin naziv (na primjer, Sada) u programski kod modula:

Pod moj datum()

Dim TD 'Deklarirajte TD varijablu

TD = Sada 'Odredite trenutni sistemski datum i vrijeme

Debug.Print TD ‘Ispis vrijednosti u prozoru Immediate

Da biste pozvali funkciju koja zahtijeva unos jednog ili više argumenata, morate unijeti njezin naziv s desne strane operatora dodjele s parametrima (vrijednostima argumenata) u zagradama. Na primjer, za pozivanje ugrađene Function Log (N) s jednom varijablom N u proceduri tipa Sub, varijabli Log_N dodjeljuje se naziv funkcije Log (50) s vrijednošću argumenta 50.

Subprirodni logaritam()

Dim LogN 'Deklarirajte varijablu LogN

Debug.Print LogN 'Ispis vrijednosti u prozoru Immediate

Napomena 1

Ovdje ugrađena funkcija Log(N) za vrijednost argumenta od 50 vraća vrijednost 3,91202300542815 u trenutku pozivanja Log(50) procedure pozivanja "Sub Natural_logaritam()". Funkcija se može pozvati ili korištenjem zasebne VBA izjave ili postavljanjem njenog naziva s popisom vrijednosti argumenata (parametara) u formuli ili izrazu u VBA programu. VBA koristi gniježđenje funkcija za skraćivanje zapisa dopuštajući da jedan poziv funkcije bude specificiran kao argument drugoj funkciji. U ovom slučaju, povratna vrijednost prve funkcije koristi se kao argument za sljedeću funkciju.

VBA ima velik skup ugrađenih funkcija i rutina koje olakšavaju programiranje, a koje se mogu podijeliti u sljedeće kategorije:

  • matematički;
  • funkcije provjere tipa;
  • funkcije obrade nizova;
  • funkcija oblikovanja;
  • funkcije pretvorbe formata;
  • funkcije datuma i vremena.

Matematičke funkcije

Matematičke funkcije uključuju:

  • Abs (x) - modul argumenta $x$;
  • Cos(x) - kosinus argumenta $x$;
  • Exp(x) - podizanje baze prirodnog logaritma na potenciju $x$;
  • Log(x) - prirodni logaritam argumenta $x$;
  • Rnd - slučajni broj iz intervala;
  • Sin(x) - sinus argumenta $x$;
  • Sqr(x) - kvadratni korijen od $x$;
  • Atn(x) - arktangens od $x$;
  • Tan(x) – tangens od $x$;
  • Sgn(x) – znak od $x$.

Fix(x) i Int(x) obje funkcije odbacuju razlomački dio broja i vraćaju cjelobrojnu vrijednost. Razlika između ovih funkcija je u negativnim vrijednostima argumenata. Int(x) vraća najbliži negativni cijeli broj manji ili jednak x, a Fix(x) vraća najbliži negativni cijeli broj veći ili jednak x.

Funkcije provjere tipa

Evo funkcija koje određuju koja je vrsta varijable:

  • IsArray(x) – funkcija provjerava je li varijabla niz;
  • IsDate(x) određuje je li varijabla datum;
  • IsError(x) utvrđuje je li varijabla šifra pogreške;
  • IsNull(x) određuje je li varijabla prazna vrijednost;
  • IsNumeric(x) određuje je li varijabla numerička vrijednost;
  • IsObject(x) određuje je li varijabla objekt.

Funkcija formata

Funkcija oblikovanja vraća vrijednost Variant (String) koja sadrži izraz oblikovan prema sintaksi funkcije:

Format(Izraz[,Format [,Prvi dan u tjednu[,Prvi tjedan u godini]]]),gdje je:

  • Izraz – obavezni argument (bilo koji valjani izraz – kombinacija ključnih riječi, operatora, varijabli i konstanti, čiji je rezultat niz, broj ili objekt);
  • Format je izborni parametar (bilo koji valjani imenovani ili korisnički definirani izraz formata).

Ako se nazivu funkcije doda znak $, tada funkcija vraća vrijednost tipa String., tada funkcija vraća vrijednost tipa String.

Kada kreirate vlastiti format broja, možete koristiti sljedeće znakove:

  • 0 – rezervira poziciju digitalnog bita. Prikazuje znamenku ili nulu. Ako broj koji se formatira ima bilo koju znamenku na tom mjestu znamenke gdje postoji 0 u nizu formata, funkcija prikazuje tu znamenku; ako ne, tada se na tom mjestu prikazuje nula;
  • "#" - djelovanje ovog simbola je slično djelovanju 0 s jedinom razlikom što se ne prikazuju beznačajne nule;
  • . – rezervira mjesto decimalnog razdjelnika, određuje koliko znamenki mora biti prikazano lijevo i desno od decimalne točke;
  • % - rezervira postotni prikaz broja;
  • . – odvaja stotine od tisuća.

Funkcije pretvorbe formata

To uključuje:

  • Val(string) – vraća brojeve sadržane u nizu kao numeričku vrijednost odgovarajućeg tipa.
  • Str(broj) – vraća vrijednost varijante (niz) koja je stringovni prikaz broja.

Uz funkcije Val i Str, postoji niz funkcija za pretvorbu vrsta izraza.

Funkcije obrade nizova

Među mnogim funkcijama su sljedeće:

  • Chr(code) – pretvara ASCII kod u niz. Na primjer, Chr(10) izvodi novi red, Chr(13) izvodi povratak na prvi red;
  • Mid(string, pos[,length]) – vraća podniz niza koji sadrži navedeni broj znakova, gdje je String izraz niza iz kojeg je izdvojen podniz;
  • Pos – pozicija znaka u nizu od kojeg počinje željeni podniz;
  • Dužina – broj vraćenih znakova podniza;
  • Len(string) – vraća broj znakova u nizu.

Funkcije vremena i datuma

Vrati vrijednost Variant koja sadrži sistemski datum, trenutno vrijeme itd. Na primjer, funkcija Datum vraća vrijednost koja sadrži sistemski datum.

Visual Basic aritmetički izrazi.

Teorijski dio

Izrazi i funkcije

LABORATORIJSKI RAD br.4. Rad s aritmetikom

Pitanja za kontrolu

1. Koje vam komponente omogućuju stvaranje statičnih slika u aplikaciji?

2. Kako postaviti sliku na obrazac? Koje metode postoje za tu svrhu i koja je njihova razlika?

3. Koje slikovne formate može komponenta Slika povezati s aplikacijom?

4. Koje je svojstvo objekta Image odgovorno za skaliranje? Za preglednost slike?

Cilj rada:upoznati aritmetičke izraze i matematičke funkcije jezika Visual Basic; naučiti razvijati aplikacije koristeći izraze i matematičke funkcije

Izrazi se koriste za izvođenje operacija nad podacima. Ovisno o podacima i operacijama koje se koriste, izrazi se dijele na aritmetički, logički i simbolički

Aritmetički izrazi je niz brojeva, konstanti, varijabli, funkcija koje su povezane predznacima aritmetičkih operacija. Poseban slučaj izraza jednostavno je konstanta, varijabla ili poziv funkcije.

Aritmetičke operacije jezika Visual Basic prikazane su u tablici 4.1.

Tablica 4.1 – Aritmetičke operacije jezika Visual Basic

Prioritet izvoditi operacije (silaznim redoslijedom): stepenovanje, množenje i dijeljenje, cjelobrojno dijeljenje, ostatak, zbrajanje i oduzimanje. Izračuni se izvode s lijeva na desno. Zagrade mijenjaju prioritet.

Primjeri:

14 /5*2 = 5,6 – operacije istog prioriteta će se izvršavati slijeva na desno

14\5*2 = 1 – množenje ima veći prioritet i prilikom cjelobrojnog dijeljenja odbacuje se razlomački dio

27^1/3 = 9 – potenciranje ima najveći prioritet

27^(1/3) = 3 – zagrade mijenjaju redoslijed operacija

Visual Basic ima širok raspon ugrađeni (standard) funkcije koje olakšavaju pisanje programa. Postoje matematičke funkcije, funkcije za obradu nizova, funkcije za rad s datumima i vremenima te financijske.

Matematičke funkcije:

Abs(x) – izračunava modul argumenta



Atn (x) – izračunava arktangens broja x

Sin (x) – izračunava sinus od x

Cos (x) – izračunava kosinus broja x

Tan (x) – izračunava tangens broja x

Exp(x) – izračunava e^x

Log(x) – izračunava prirodni logaritam

Sqr(x) – izračunava kvadratni korijen

Rnd() – vraća nasumični broj u rasponu od 0 do 1

Int (x) – izračunava najveći cijeli broj koji ne prelazi x

Fix (x) – izračunava zaokruženi broj (odbacuje razlomački dio argumenta)

CInt(x) – vraća argument zaokružen na najbliži cijeli broj prema matematičkim pravilima zaokruživanja

Sgn (x) – vraća predznak broja

X^(1/n) – izdvaja n-ti korijen od X

Hex (x) – pretvara decimalni broj u heksadecimalni

Oct(x) – pretvara decimalni broj u oktalni

Primjeri zaokruživanja brojeva:

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

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

Vrijednosti argumenata u trigonometrijskim funkcijama dane su u radijanima!

Za pretvaranje argumenta iz stupnjeva u radijane upotrijebite formulu:

Argument (u radijanima) = argument (u stupnjevima)*PI / 180

PI broj se može odrediti formulom:

PI = Atn(1)*4

Za potpune informacije o ugrađenim funkcijama i kako ih koristiti, pogledajte Visual Basic sustav pomoći.

Tablica 6.1. Ugrađene matematičke funkcije
Funkcija Opis
Trbušnjaci Apsolutna vrijednost
Atn Arktangens
Cos Kosinus broja
Exp Vraća broj e (2,718282) podignut na potenciju argumenta funkcije.
Popraviti Odbacuje razlomački dio broja i vraća cijeli broj. Kao rezultat toga, za pozitivne brojeve rezultat je broj manji od ulaza (Fix(2.5) će vratiti 2), za negativne brojeve - veći broj (Fix(-2.5) će vratiti -2)
Int Odbacuje razlomački dio broja i vraća cijeli broj. Za pozitivne, rezultat je broj manji od unesenog (Int(2.5) će vratiti 2), za negativne, isti broj je manji (Int(-2.5) će vratiti -3).
Dnevnik Povratak prirodni logaritam brojevima
Rnd Vraća nasumični broj tipa Single, a taj je broj između 0 i 1. Za pokretanje generatora nasumičnog broja upotrijebite direktivu Randomize - mora se pozvati prije poziva Rnd.
Sgn Funkcija je dizajnirana za određivanje predznaka broja. Ako je broj pozitivan, vraća 1. Za nulu, funkcija će vratiti 0, za negativan broj -1.
Grijeh Sinus
Sqr Korijen
Tan Tangens

Pogledajmo primjer. Dodajmo gumb dokumentu Microsoft Worda, nazovimo ga cmd_Calc, označimo ga kao Izračuni i dodajmo sljedeći kod (Ispis 6.1), koji ilustrira rad funkcija o kojima se govori.

Dim dblNumber As Double "Varijabla koja se koristi u izračunima Dim varResult "Varijabla tipa Variant dblNumber = Val(InputBox("Unesite broj")) "Izračunajte apsolutnu vrijednost unesenog broja "Prvo dodijelite rezultat varijabli varResult "Dalje , prikazati potpisani rezultat u prozoru s porukom , koristit ćemo znak "+" za "ulančavanje nizova, u drugim slučajevima "pozivat ćemo funkcije izravno "u MsgBox"e "Imajte na umu da pretvaramo "numeričke vrijednosti u nizove pomoću funkcije Str varResult = Abs(dblNumber) MsgBox ( "Apsolutna vrijednost " + _ Str(dblNumber) + " jednako " + Str(varResult)) "Arktangens MsgBox ("Arktangent " + _ Str(dblNumber) + " jednako " + _ Str(Atn(dblNumber))) "Kosinus MsgBox ("Kosinus " + _ Str(dblBroj) + " jednako " + _ Str(Cos(dblBroj))) "e na potenciju unesenog broja MsgBox ("Broj e na potenciju " + _ Str(dblNumber) + " jednako " + _ Str(Exp(dblNumber))) "Fix funkcija MsgBox ("Rezultat Fix funkcije za " + _ Str(dblNumber) + " jednako " + _ Str(Fix(dblNumber))) "Int funkcija MsgBox ("Rezultat funkcije Int za " + _ Str(dblNumber) + " jednak je " + _ Str(Int(dblNumber))) "Prirodni logaritam MsgBox ("Prirodni logaritam " + _ Str(dblNumber) + " jednako " + _ Str(Log(dblNumber)) ) "Uzmimo nekoliko nasumičnih brojeva "prvi broj je od 0 do 1 "drugi je od 0 do 10. "Treći je od 25 do 100 "Četvrti je cijeli broj od 0 do 34 Randomize MsgBox ("Grupa slučajnih brojeva: " + _ Str( Rnd()) + ", " + _ Str(Rnd() * 10) + ", " + _ Str(Rnd() * 75 + 25) + ", " + _ Str(Int(Rnd() * 34) )) "Funkcija Sgn MsgBox ("Rezultat Sgn za " + _ Str(dblNumber) + " jednako " + _ Str(Sgn(dblNumber))) "Sine MsgBox ("Sine " + _ Str(dblNumber) + " jednako " + _ Str(Sin(dblNumber))) "Kvadratni korijen MsgBox ("Kvadratni korijen " + _ Str( dblNumber) + " jednako " + _ Str(Sqr(dblNumber))) "Tangent MsgBox (" Tangent " + _ Str( dblNumber) + " jednako " + _ Str(Tan(dblNumber))) Listing 6.1. Pritisnite rukovatelj događajima za gumb cmd_Calc

Obratite pozornost na algoritam za dobivanje slučajnog broja unutar određenog raspona pomoću funkcije Rnd. Recimo da trebamo dobiti nasumični broj od 15 do 40. Uzmimo, prvo, broj od 0 do 40. Očito, za ovo nam je potreban poziv poput ovog: Rnd()*40.

Da biste "podigli" razinu najmanjeg slučajnog broja koji izraz vraća na 15, učinite sljedeće.

Prvo, izračunajmo razliku između 40 i 15 - dobivamo 25. Dakle, da biste dobili slučajni broj od 0 do 25, možete koristiti poziv Rnd()*25.

Drugo, dodajte 15 dobivenom nasumičnim brojem. Sada izraz za dobivanje slučajnog broja od 15 do 40 izgleda ovako: Rnd()*25+15.

Provjerimo točnost ove izjave. Funkcija Rnd poznato je da vraća nasumične brojeve između 0 i 1. Ako funkcija vrati 0, rezultat izračuna izraza bit će jednak 15 (0*25+15) . Ako funkcija vrati 1, rezultat će biti 40 (25*1+15) . Srednje vrijednosti Rnd dat će željene slučajne brojeve između 15 i 40.

Rukovatelj klikom gumba cmd_Len (Listing 6.2) sadržavat će rješenje za sljedeći problem: obavijestiti korisnika o duljini unesenog teksta. Očito, za rješavanje ovog problema potrebna nam je funkcija Len.

"Varijabla za pohranjivanje ulaznog niza Dim str_InpStr As String "Varijabla za pohranjivanje pronađene duljine niza Dim lng_StrLen As Long str_InpStr = InputBox("Unesite niz") "Izračunajte duljinu niza lng_StrLen = Len(str_InpStr) MsgBox ( "Dužina unesenog niza: _" + _ str_InpStr + "_ jednako " + Str(lng_StrLen) + _ " znakova") Listing 6.2. Primjer Len funkcije

Na sl. 6.2. možete vidjeti rezultat izračuna duljine niza.


Riža. 6.2.

Sada se pozabavimo pretvorbom znakova - funkcijama LCase i UCase (Listing 6. 3.).

"Varijabla za pohranjivanje ulaznog stringa Dim str_InpStr As String "Varijabla za pohranjivanje modificiranog stringa Dim str_NewStr As String str_InpStr = InputBox("Unesite tekst") "Str_NewStr će sadržavati uneseni string "u kojem su sva velika slova zamijenjena malim str_NewStr = LCase(str_InpStr) MsgBox ("Promijenjen niz: " + str_NewStr) "Sada će u str_NewStr biti isti niz "u kojem su sva slova postala velika str_NewStr = UCase(str_InpStr) MsgBox ("Promijenjen niz: " + str_NewStr) Listing 6.3. Primjer korištenja funkcija LCase i UCase

Sljedeća na redu je izrezivanje znakova - funkcije Mid, LTrim, Rtrim, Left, Right (Listing 6.4).Među tim funkcijama najmoćnija je Mid - pomoću nje možete raditi puno stvari sa stringovima.

"Varijabla za pohranjivanje ulaznog niza Dim str_InpStr As String "Varijabla za pohranjivanje izrezanih znakova Dim str_NewStr As String "Postavimo niz s kojim će biti prikladno raditi str_InpStr = "Zdravo, Alexander " "Funkcije za uklanjanje razmaka "Prilikom izlaza retka , stavite ga prije njegovog početka "i završetka simbolom "_" kako bi se bolje vidjela prisutnost ili odsutnost razmaka MsgBox ("Radimo sa sljedećim redom: " + _ "_" + str_InpStr + "_" ) "LTrim - dodijelite rezultate rada varijabli i prikaz informacija u MsgBox str_NewStr = LTrim(str_InpStr) MsgBox ("Rezultat LTrim: " + _ "_" + str_NewStr + "_") "RTrim MsgBox ("Rezultat" od RTrim: " + _ "_" + RTrim(str_InpStr) + " _") "Trim MsgBox ("Rezultat Trim: " + _ "_" + Trim(str_InpStr) + "_") "Lijevo - rez 12 " znakova iz niza str_InpStr tako što ćete prvo očistiti "od vodećih razmaka str_NewStr = Left(LTrim (str_InpStr), 12) MsgBox ("Prvih 12 znakova lijevo: " + _ str_NewStr) "Desno - slično Izrežite 9 znakova desno str_NewStr = Right(RTrim(str_InpStr), 9) MsgBox ("Prvih 9 znakova s ​​desne strane: " + _ str_NewStr ) "Funkcija Sredina - za početak ćemo ispisati po jedan znak "s druge i petnaeste pozicije retka " preliminarno očišćen od dodatnih razmaka "na početku i na kraju str_NewStr = Mid(Trim(str_InpStr), 2, 1) MsgBox ("Drugi znak unesenog stringa : " + _ str_NewStr) str_NewStr = Mid(Trim(str_InpStr), 15, 1) MsgBox ("Petnaesti znak unesenog niza: " + _ str_NewStr) "Izbacit ćemo 5 znakova, počevši od 15. znaka str_NewStr = Mid(Trim(str_InpStr), 15, 5) MsgBox ("Pet znakova retka od 15. pozicije: " + _ str_NewStr) Listing 6.4. Primjer korištenja funkcija za rezanje znakova

Sada pogledajmo primjere kako funkcije funkcioniraju

Gotovo sav programski kod VBA modula sadržan je u procedurama dva tipa: Sub (potprogrami) i Function (funkcije). Glavni zadatak funkcijske procedure je izračunati neku vrijednost i vratiti je na točku u kojoj je pozvana funkcijska procedura.

Sintaksa procedure funkcije:

Funkcija Ime_funkcije(argumenti As) As

Naziv_funkcije = Povratna_vrijednost

Završna funkcija

Funkcijski postupci mogu se koristiti u raznim izrazima.

Primjer 1

Na primjer, najjednostavnija procedura-funkcija Funkcija:

Funkcija F1(x kao valuta) kao valuta

Funkcija F1(x) može se koristiti u daljnjim proračunima (kod modula). Procedura tipa Function može se izvršiti samo pozivom iz druge procedure. Da bi to učinili, pozivajuća procedura mora dodijeliti ime ovog F1(x) nekoj varijabli.

Primjer 2

Na primjer, funkcija F1(x) može se koristiti u proceduri MySub() imenovanjem varijable "y" F1(x).

Dim y As Single 'Deklaracija varijable y

y = F1 (9) ‘Odredite F1 (x) za vrijednost x=9

Debug.Print y 'Ispis vrijednosti u prozoru Immediate

Funkcija F1 (x kao jedan) Kao jedan

F1 = x^10 ‘Povratna vrijednost x na potenciju 10

Ovdje funkcija F1(x)=$x^(10)$ za vrijednost $ x=9$ vraća vrijednost $3,486785E+09$ pozivnoj proceduri MySub(). Ako povratna vrijednost funkcije ili varijabla koja se koristi u VBA proceduri nema deklariranu vrstu podataka, zadana vrsta podataka bit će Variant.

VBA koristi i funkcionalne postupke i ugrađene funkcije.

Ugrađene funkcije sastoje se od dva dijela: imena (identifikatora) ​​i argumenata. Ugrađene funkcije su gotove VBA formule koje izvode određene radnje na izrazima i vraćaju neku vrijednost na mjestu njihova poziva.

Funkcije vraćaju vrijednost rezultata umjesto svog naziva, koji se koristi u daljnjim izračunima. Tipično, funkcije zahtijevaju argumente koji se pišu u zagradama odvojene zarezima. Ali neke funkcije ne zahtijevaju argumente. Na primjer, funkcija Now(), koja ne zahtijeva argumente, vraća trenutni sistemski datum i vrijeme. Funkcije se mogu koristiti za stvaranje novih izraza ili funkcija.

Kako umetnuti funkciju u tekst programa? Da biste koristili funkciju u izrazima, morate unijeti njezin naziv u VBA izjavu. Da biste pozvali ugrađenu funkciju koja ne zahtijeva argumente, samo unesite njezin naziv (na primjer, Sada) u programski kod modula:

Pod moj datum()

Dim TD 'Deklarirajte TD varijablu

TD = Sada 'Odredite trenutni sistemski datum i vrijeme

Debug.Print TD ‘Ispis vrijednosti u prozoru Immediate

Da biste pozvali funkciju koja zahtijeva unos jednog ili više argumenata, morate unijeti njezin naziv s desne strane operatora dodjele s parametrima (vrijednostima argumenata) u zagradama. Na primjer, za pozivanje ugrađene Function Log (N) s jednom varijablom N u proceduri tipa Sub, varijabli Log_N dodjeljuje se naziv funkcije Log (50) s vrijednošću argumenta 50.

Subprirodni logaritam()

Dim LogN 'Deklarirajte varijablu LogN

Debug.Print LogN 'Ispis vrijednosti u prozoru Immediate

Napomena 1

Ovdje ugrađena funkcija Log(N) za vrijednost argumenta od 50 vraća vrijednost 3,91202300542815 u trenutku pozivanja Log(50) procedure pozivanja "Sub Natural_logaritam()". Funkcija se može pozvati ili korištenjem zasebne VBA izjave ili postavljanjem njenog naziva s popisom vrijednosti argumenata (parametara) u formuli ili izrazu u VBA programu. VBA koristi gniježđenje funkcija za skraćivanje zapisa dopuštajući da jedan poziv funkcije bude specificiran kao argument drugoj funkciji. U ovom slučaju, povratna vrijednost prve funkcije koristi se kao argument za sljedeću funkciju.

VBA ima velik skup ugrađenih funkcija i rutina koje olakšavaju programiranje, a koje se mogu podijeliti u sljedeće kategorije:

  • matematički;
  • funkcije provjere tipa;
  • funkcije obrade nizova;
  • funkcija oblikovanja;
  • funkcije pretvorbe formata;
  • funkcije datuma i vremena.

Matematičke funkcije

Matematičke funkcije uključuju:

  • Abs (x) - modul argumenta $x$;
  • Cos(x) - kosinus argumenta $x$;
  • Exp(x) - podizanje baze prirodnog logaritma na potenciju $x$;
  • Log(x) - prirodni logaritam argumenta $x$;
  • Rnd - slučajni broj iz intervala;
  • Sin(x) - sinus argumenta $x$;
  • Sqr(x) - kvadratni korijen od $x$;
  • Atn(x) - arktangens od $x$;
  • Tan(x) – tangens od $x$;
  • Sgn(x) – znak od $x$.

Fix(x) i Int(x) obje funkcije odbacuju razlomački dio broja i vraćaju cjelobrojnu vrijednost. Razlika između ovih funkcija je u negativnim vrijednostima argumenata. Int(x) vraća najbliži negativni cijeli broj manji ili jednak x, a Fix(x) vraća najbliži negativni cijeli broj veći ili jednak x.

Funkcije provjere tipa

Evo funkcija koje određuju koja je vrsta varijable:

  • IsArray(x) – funkcija provjerava je li varijabla niz;
  • IsDate(x) određuje je li varijabla datum;
  • IsError(x) utvrđuje je li varijabla šifra pogreške;
  • IsNull(x) određuje je li varijabla prazna vrijednost;
  • IsNumeric(x) određuje je li varijabla numerička vrijednost;
  • IsObject(x) određuje je li varijabla objekt.

Funkcija formata

Funkcija oblikovanja vraća vrijednost Variant (String) koja sadrži izraz oblikovan prema sintaksi funkcije:

Format(Izraz[,Format [,Prvi dan u tjednu[,Prvi tjedan u godini]]]),gdje je:

  • Izraz – obavezni argument (bilo koji valjani izraz – kombinacija ključnih riječi, operatora, varijabli i konstanti, čiji je rezultat niz, broj ili objekt);
  • Format je izborni parametar (bilo koji valjani imenovani ili korisnički definirani izraz formata).

Ako se nazivu funkcije doda znak $, tada funkcija vraća vrijednost tipa String., tada funkcija vraća vrijednost tipa String.

Kada kreirate vlastiti format broja, možete koristiti sljedeće znakove:

  • 0 – rezervira poziciju digitalnog bita. Prikazuje znamenku ili nulu. Ako broj koji se formatira ima bilo koju znamenku na tom mjestu znamenke gdje postoji 0 u nizu formata, funkcija prikazuje tu znamenku; ako ne, tada se na tom mjestu prikazuje nula;
  • "#" - djelovanje ovog simbola je slično djelovanju 0 s jedinom razlikom što se ne prikazuju beznačajne nule;
  • . – rezervira mjesto decimalnog razdjelnika, određuje koliko znamenki mora biti prikazano lijevo i desno od decimalne točke;
  • % - rezervira postotni prikaz broja;
  • . – odvaja stotine od tisuća.

Funkcije pretvorbe formata

To uključuje:

  • Val(string) – vraća brojeve sadržane u nizu kao numeričku vrijednost odgovarajućeg tipa.
  • Str(broj) – vraća vrijednost varijante (niz) koja je stringovni prikaz broja.

Uz funkcije Val i Str, postoji niz funkcija za pretvorbu vrsta izraza.

Funkcije obrade nizova

Među mnogim funkcijama su sljedeće:

  • Chr(code) – pretvara ASCII kod u niz. Na primjer, Chr(10) izvodi novi red, Chr(13) izvodi povratak na prvi red;
  • Mid(string, pos[,length]) – vraća podniz niza koji sadrži navedeni broj znakova, gdje je String izraz niza iz kojeg je izdvojen podniz;
  • Pos – pozicija znaka u nizu od kojeg počinje željeni podniz;
  • Dužina – broj vraćenih znakova podniza;
  • Len(string) – vraća broj znakova u nizu.

Funkcije vremena i datuma

Vrati vrijednost Variant koja sadrži sistemski datum, trenutno vrijeme itd. Na primjer, funkcija Datum vraća vrijednost koja sadrži sistemski datum.