See õpetus õpetab teid looma ja kasutama funktsioone parameetritega ja ilma VBA -s
VBA sisaldab suurel hulgal sisseehitatud funktsioone, mida saate kasutada, kuid saate ka ise kirjutada. Kui kirjutate koodi VBA -sse, saate selle kirjutada alam- või funktsiooniprotseduurina. Funktsiooniprotseduur suudab teie koodile väärtuse tagastada. See on äärmiselt kasulik, kui soovite, et VBA täidaks tulemuse tagastamiseks ülesande. VBA funktsioone saab helistada ka Exceli seest, nagu Exceli sisseehitatud Exceli funktsioonid.
Funktsiooni loomine ilma argumentideta
Funktsiooni loomiseks peate funktsiooni määratlema, andes sellele nime. Funktsiooni saab seejärel määratleda andmetüübina, mis näitab, millist tüüpi andmeid soovite funktsiooni tagastada.
Võib -olla soovite luua funktsiooni, mis tagastab iga kord selle kutsumisel staatilise väärtuse - natuke nagu konstant.
123 | Funktsioon GetValue () täisarvunaGetValue = 50Lõppfunktsioon |
Kui peaksite funktsiooni käivitama, tagastab funktsioon alati väärtuse 50.
Saate luua ka funktsioone, mis viitavad objektidele VBA -s, kuid funktsiooni väärtuse tagastamiseks peate kasutama märksõna.
123 | Funktsioon GetRange () vahemikunaMäära GetRange = Vahemik ("A1: G4")Lõppfunktsioon |
Kui kasutate oma VBA -koodis ülaltoodud funktsiooni, tagastab funktsioon alati lahtrite vahemiku A1 kuni G4 olenevalt sellest, millisel lehel te töötate.
Funktsiooni kutsumine alamprotseduurilt
Kui olete funktsiooni loonud, saate sellele helistada mujalt oma koodist, kasutades funktsiooni kutsumiseks alamprotseduuri.
Väärtus 50 tagastatakse alati.
Funktsiooni GetRange saate helistada ka alamprotseduurist.
Ülaltoodud näites kutsutakse alamprotseduur GetFange funktsiooni vahemikuobjekti lahtrite paksuks muutmiseks.
Funktsioonide loomine
Üksik argument
Samuti saate oma funktsioonile määrata parameetri või parameetrid. Neid parameetreid võib nimetada argumentideks.
123 | Funktsioon ConvertKilosToPounds (dblKilo kui Double) kui DoubleConvertKiloToPounds = dblKilo*2.2Lõppfunktsioon |
Seejärel saame ülaltoodud funktsiooni helistada alamprotseduurilt, et välja selgitada, mitu kilo konkreetne kilo on.
Vajadusel saab funktsiooni kutsuda mitmest VBA -koodi protseduurist. See on väga kasulik, kuna takistab teil korduvalt sama koodi kirjutamast. Samuti võimaldab see jagada pikad protseduurid väikesteks hallatavateks funktsioonideks.
Ülaltoodud näites on meil kaks protseduuri - igaüks neist kasutab funktsiooni, et arvutada neile edastatud kilode naela väärtus dblKilo Funktsiooni argument.
Mitu argumenti
Saate luua funktsiooni mitme argumendiga ja edastada väärtused funktsioonile alamprotseduuri abil.
123 | Funktsioon CalculateDayDiff (kuupäev1 kui kuupäev, kuupäev2 kui kuupäev) kui topeltCalculateDayDiff = Kuupäev2-Kuupäev1Lõppfunktsioon |
Seejärel saame funktsiooni kutsuda, et arvutada päevade arv kahe kuupäeva vahel.
Valikulised argumendid
Funktsioonile saate edastada ka valikulisi argumente. Teisisõnu, mõnikord võib teil seda argumenti vaja minna ja mõnikord mitte - sõltuvalt sellest, millise koodiga funktsiooni kasutate.
123456 | Funktsioon CalculateDayDiff (kuupäev1 kui kuupäev, valikuline kuupäev2 kui kuupäev) kui topelt'kontrollige teist kuupäeva ja kui seda pole, muutke kuupäev2 tänase kuupäevaga võrdseks.Kui Kuupäev2 = 0, siis Kuupäev2 = Kuupäev'arvuta vaheCalculateDayDiff = Kuupäev2-Kuupäev1Lõppfunktsioon |
Argumendi vaikeväärtus
Funktsiooni loomisel saate määrata ka valikuliste argumentide vaikeväärtuse, nii et kui kasutaja selle argumendi välja jätab, kasutatakse selle asemel vaikeväärtust.
1234 | Funktsioon CalculateDayDiff (kuupäev1 kui kuupäev, valikuline kuupäev2 kui kuupäev = "06.02.2020") kahekordsena'arvuta vaheCalculateDayDiff = Kuupäev2-Kuupäev1Lõppfunktsioon |
ByVal ja ByRef
Väärtuste edastamisel funktsioonile saate kasutada ByVal või ByRef märksõnad. Kui jätate mõne neist välja, siis ByRef kasutatakse vaikimisi.
ByVal tähendab, et edastate muutuja koopia funktsioonile, samas kui ByRef tähendab, et viitate muutuja algsele väärtusele. Kui edastate muutuja koopia (ByVal), on muutuja algväärtus MITTE muutunud, kuid muutujale viitamisel muudab funktsioon muutuja algväärtust.
1234 | Funktsioon GetValue (ByRef intA As Integer) täisarvunaintA = intA * 4GetValue = intALõppfunktsioon |
Ülaltoodud funktsioonis võib ByRef välja jätta ja funktsioon töötaks samamoodi.
1234 | Funktsioon GetValue (intA As Integer) täisarvunaintA = intA * 4GetValue = intALõppfunktsioon |
Selle funktsiooni kutsumiseks saame käivitada alamprotseduuri.
123456789 | Alamkatseväärtused ()Dim intVal täisarvuna'täitke muutuja väärtusega 10intVal = 10'käivitage funktsioon GetValue ja näidake väärtus kohe aknasSilumine. Print GetValue (intVal)'näitab vahetu akna muutuja intVal väärtustSilumine. Prindi intValEnd Sub |
Pange tähele, et silumisaknad näitavad mõlemal korral väärtust 40. Kui edastate funktsioonile muutuja IntVal - väärtus 10 edastatakse funktsioonile ja korrutatakse 4. Kui kasutate märksõna ByRef (või jätate selle üldse vahele), MUUTAB muutuja IntVal väärtust. See kuvatakse siis, kui kuvate esmalt funktsiooni tulemuse vahetu aknas (40) ja seejärel silumisaknas muutuja IntVal väärtuse (ka 40).
Kui me ei soovi algse muutuja väärtust muuta, peame funktsioonis kasutama ByVal.
1234 | Funktsioon GetValue (ByVal intA As Integer) täisarvunaintA = intA * 4GetValue = intALõppfunktsioon |
Nüüd, kui kutsume funktsiooni alamprotseduurist, jääb muutuja IntVal väärtus 10.
Välju funktsioon
Kui loote funktsiooni, mis testib teatud tingimust ja kui tingimus osutub tõeseks, soovite funktsiooni väärtuse tagastada, peate võib -olla lisama funktsiooni väljundi, et funktsioonist väljuda olete selle funktsiooni kogu koodi läbinud.
12345678910111213 | Funktsioon FindNumber (strSearch As String) täisarvunaDim i As täisarv'silmus läbi stringi iga täheI = 1 kuni Len (strSearch)'kui täht on numbriline, tagastage väärtus funktsioonileKui IsNumeric (Mid (strSearch, i, 1)) SiisFindNumber = Keskmine (strSearch, i, 1)'siis väljuge funktsioonistVälju funktsioonLõpp KuiEdasiLeidaNumber = 0Lõppfunktsioon |
Ülaltoodud funktsioon liigub läbi pakutud stringi, kuni leiab numbri, ja tagastab seejärel selle numbri stringist. See leiab stringi ainult esimese numbri nagu siis Välju funktsiooni.
Ülaltoodud funktsiooni saab kutsuda alamrutiini abil, näiteks allpool.
1234567 | AlamkontrollForNumber ()Dim NumIs täisarvuna'edastage tekstistring numbri leidmise funktsioonileNumIs = FindNumber ("Upper Floor, 8 Oak Lane, Texas")'näita tulemust kohe aknasSilumine. Prindi numbridEnd Sub |
Funktsiooni kasutamine Exceli lehelt
Lisaks funktsiooni kutsumisele VBA -koodist alamprotseduuri abil saate funktsiooni kutsuda ka oma Exceli lehelt. Teie loodud funktsioonid peaksid vaikimisi ilmuma teie funktsioonide loendis funktsioonide loendi jaotises Kasutaja määratud.
Klõpsake fx dialoogiboksi Funktsiooni lisamine kuvamiseks.
Valige Kasutaja määratud kategooriate loendist
Valige soovitud funktsioon olemasolevate hulgast Kasutaja määratud funktsioonid (UDF -id).
Teise võimalusena, kui hakkate oma funktsiooni Excelisse kirjutama, peaks funktsioon ilmuma funktsioonide ripploendisse.
Kui te ei soovi, et funktsioon oleks Exceli lehel saadaval, peate funktsiooni VBA -koodi loomisel panema privaatse sõna sõna Function ette.
123 | Privaatfunktsioon CalculateDayDiff (kuupäev1 kui kuupäev, kuupäev2 kui kuupäev) kahekordsenaCalculateDayDiff = Kuupäev2-Kuupäev1Lõppfunktsioon |
Nüüd ei kuvata seda ripploendis, mis näitab saadaolevaid Exceli funktsioone.
Huvitav on aga see, et saate seda funktsiooni siiski kasutada - seda otsides lihtsalt ei kuvata loendis!
Kui olete teise argumendi deklareerinud kui Valikuline, saate selle Exceli lehel ja VBA -koodis välja jätta.
Samuti saate Exceli lehel ilma argumentideta loodud funktsiooni kasutada.