A la programació VBA, una funció retorna un valor. Podeu executar procediments de funció i cridar la funció a Excel 2016. Les funcions, a diferència dels procediments sub, només es poden executar de dues maneres:
Proveu aquesta funció senzilla. Introduïu-lo en un mòdul VBA:
Funció CubeRoot (número)
CubeRoot = nombre ^ (1/3)
Funció final
Aquesta funció és bastant debilitada; només calcula l'arrel cúbica del nombre que se li passa com a argument. Tanmateix, proporciona un punt de partida per entendre les funcions. També il·lustra un concepte important sobre les funcions: com retornar el valor. (Recordeu que una funció retorna un valor, oi?)
Observeu que l'única línia de codi que forma aquest procediment de funció realitza un càlcul. El resultat de les matemàtiques (nombre a la potència d'1/3) s'assigna a la variable CubeRoot. No per casualitat, CubeRoot també és el nom de la funció. Per dir-li a la funció quin valor ha de tornar, assigneu aquest valor al nom de la funció.
Crida a la funció des d'un procediment Sub
Com que no podeu executar una funció directament, heu de cridar-la des d'un altre procediment. Introduïu el següent procediment senzill al mateix mòdul VBA que conté la funció CubeRoot:
Sub CallerSub()
Res = CubeRoot (125)
MsgBox Ans
End Sub
Quan executeu el procediment CallerSub, Excel mostra un quadre de missatge que conté el valor de la variable Ans, que és 5.
Això és el que està passant: s'executa la funció CubeRoot i rep un argument de 125. El càlcul es realitza mitjançant el codi de la funció (utilitzant el valor passat com a argument) i el valor retornat de la funció s'assigna a la variable Ans. A continuació, la funció MsgBox mostra el valor de la variable Ans.
Proveu de canviar l'argument que s'ha passat a la funció CubeRoot i torneu a executar la macro CallerSub. Funciona tal com hauria de ser, suposant que doneu a la funció un argument vàlid (un nombre positiu).
Per cert, el procediment CallerSub es podria simplificar una mica. La variable Ans no és realment necessària tret que el codi la faci servir més endavant. Podeu utilitzar aquesta declaració única per obtenir el mateix resultat:
MsgBox CubeRoot (125)
Crida a una funció des d'una fórmula de full de treball
Ara és el moment d'anomenar aquest procediment de funció VBA des d'una fórmula de full de treball. Activeu un full de treball al mateix llibre de treball que conté la definició de la funció CubeRoot. A continuació, introduïu la fórmula següent a qualsevol cel·la:
=Arrel cúbica (1728)
La cel·la mostra 12, que és de fet l'arrel cúbica de 1.728.
Com és d'esperar, podeu utilitzar una referència de cel·la com a argument per a la funció CubeRoot. Per exemple, si la cel·la A1 conté un valor, podeu introduir =CubeRoot(A1) . En aquest cas, la funció retorna el nombre obtingut calculant l'arrel cúbica del valor en A1.
Podeu utilitzar aquesta funció qualsevol nombre de vegades al full de treball. Igual que les funcions integrades d'Excel, les vostres funcions personalitzades apareixen al quadre de diàleg Insereix una funció. Feu clic al botó Insereix funció de la barra d'eines i trieu la categoria Definida per l'usuari. El quadre de diàleg Insereix una funció enumera la vostra pròpia funció.
La funció CubeRoot apareix a la categoria Definida per l'usuari del quadre de diàleg Insereix funció.
Si voleu que el quadre de diàleg Insereix una funció mostri una descripció de la funció, seguiu aquests passos:
Trieu Desenvolupador → Codi → Macros.
L'Excel mostra el quadre de diàleg Macro, però CubeRoot no apareix a la llista. (CubeRoot és un procediment de funció, i aquesta llista només mostra procediments secundaris.) No us preocupeu.
Escriviu la paraula CubeRoot al quadre Nom de la macro.
Feu clic al botó Opcions.
Introduïu una descripció de la funció al quadre Descripció.
Feu clic a D'acord per tancar el quadre de diàleg Opcions de macro.
Tanqueu el quadre de diàleg Macro fent clic al botó Cancel·la.
Aquest text descriptiu apareix ara al quadre de diàleg Insereix funció.
Consulteu la funció CubeRoot que s'utilitza a les fórmules del full de treball.
Ús de la funció CubeRoot en fórmules.