You are on page 1of 4

7/8/2015

EXCELFORO:EJERCICIOS,EJEMPLOS,SOLUCIONES,DUDAS:VBA:FuncionesdelahojadeclculoenVBA.

VBA:FuncionesdelahojadeclculoenVBA.
Dedicar hoy unas lneas para aclarar algo ms el uso de funciones en nuestras macros. Es sabido por todos nosotros
que podemos generar nuestras propias funciones mediante los procedimientos Function, y que estas UDF (funciones
personalizadas)puedenemplearsetantoenlahojadeclculocomoenotrosprocedimientos.Podemosverunejemplode
UDFenver.
Esteaspecto,porlogeneralsueleestarbastanteclaro.
Sobre lo que voy a hablar en esta entrada es del uso de las funciones estndar de la hoja de clculo en nuestros
procedimientos...hablodelasfuncioneshabitualescomoCOINCIDIR,BUSCAR,PAGO,ocualquierotradelistadodemsde
350funcionesexistentesenExcel.EigualmentediferenciarlasdelasfuncionesespecficasdeVBA.
Comenzaremosdetallandocmollamaralasfuncionesdelahojadeclculoylaventajadeusardichasfunciones.EnVisual
BasiclasfuncionesdehojadecalculodeExcelpuedenejecutarsemedianteelobjetoWorksheetFunction.
Porejemplo,paraobtenerelvalormximodeunrangodeceldas,declararamosunavariable'rng'comounobjetoRange
y,acontinuacin,loestableceramoscomoelrangoA1:B13delahoja'Hoja1'.Asignamosunasegundavariable,'resp',se
asignaalresultadodeaplicarlafuncinMaxa'rng'.
Porltimo,elvalorderespuestasemuestraenuncuadrodemensaje.
viewplain

01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.

print

SubfuncionHojaCalculo()
DimrngAsRange
'definimoslavariablerngcomoelrangoA1:B13
Setrng=Worksheets("Hoja1").Range("A1:B13")
'asociamosunasegundavariable'resp'
'comoelvalormximodelrangoanterior
'empleandolafuncindehojadeclculoMAX
resp=Application.WorksheetFunction.Max(rng)
'mostramoselresultadoenunMsgBox
MsgBoxresp
EndSub

Es fcil identificar qu funciones de hoja de clculo podemos emplear, ya que al escribir el objeto WorksheetFunction.
aparecerunaetiquetaconundesplegabledetodaslasfunciones...
OjoporquecomosiempreennuestroeditordeVB,elnombredelasfuncionesaparecernensuversineningls!!!.

Una ventaja de emplear estas funciones es que son fciles de implementar en nuestros procedimientos, y con ellas
evitamos ciertos desarrollos personalizados que sobrecargaran nuestras macros. En general, siempre que sea posible, es
msptimoemplearestasfuncionesqueescribiralgncdigoquerealicelamismaaccin.
Otra manera de trabajar con nuestras funciones de Hoja de clculo en nuestros procedimientos, es la deInsertar una
funcindehojadeclculoenunacelda.
Para insertar una funcin de hoja de clculo en una celda, especificaremos la funcin como el valor de la propiedad
FormuladelobjetoRangecorrespondiente.
Podemosverunejemploenlasiguienteentrada.
Oelsiguienteejemplo,enelquelafuncinALEATORIO(quegeneraunnmeroaleatorioRANDeningls)seasignaala
propiedadFormuladelrangoB1:D5delaHoja1dellibroactivo.
viewplain

print

data:text/htmlcharset=utf8,%3Ch3%20class%3D%22posttitle%20entrytitle%22%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%2

1/4

7/8/2015

01.
02.
03.
04.
05.

EXCELFORO:EJERCICIOS,EJEMPLOS,SOLUCIONES,DUDAS:VBA:FuncionesdelahojadeclculoenVBA.

SubInsertarFormula()
'insertamosenunrangodelahojadeclculo
'lafuncinALEATORIORANDeningls
Worksheets("Hoja1").Range("B1:D5").Formula="=RAND()"
EndSub

OjoporquecomosiempreennuestroeditordeVB,elnombredelasfuncionesaparecernensuversineningls!!!.
Si queremos emplear la notacion en el lenguaje de nuestro sistema, emplearemos la propiedad .formulalocal en vez de
.formula:
viewplain

01.
02.
03.
04.
05.

print

SubInsertarFormula()
'insertamosenunrangodelahojadeclculo
'lafuncinALEATORIO
Worksheets("Hoja2").Range("B1:D5").FormulaLocal="=ALEATORIO()"
EndSub

Nos queda por hablar de las funciones de VBA. Las funciones de Visual Basic no usan el calificadorWorksheetFunction.
Una peculiaridad de las funciones de VB es que puede tener el mismo nombre que una funcin de hoja de clculo y, sin
embargo,podrandarotrosresultados...
Veamosunejemplosencillo,dondehemosempleadoalgunasfuncionesdeVBA(Rnd,Int,AbsoSgn):
viewplain

01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.

print

SubFuncionVBA()
DimaleatorioAsLong
'definimoslosvaloresdelintervalo
sup=Application.Max(Range("A1:A10"))
inf=Application.Min(Range("A1:A10"))
'producimosunenteroaleatorioenelintervalodado
aleatorio=Int((supinf+1)*Rnd+inf)
'mostramoselaleatorioenunMsgBox
MsgBox"1:="&aleatorio

valor=Application.Average(sup,inf)
'conSgndeterminosignodelamedia
'yluegomultiplicoporlaparteenteradelvalorabsolutodichamedia
aleatorio2=Sgn(valor)*Int(Abs(valor))
MsgBox"2:="&aleatorio2
EndSub

En general, en este ltimo uso, habr que tener especial cuidado en diferenciar propiedades de algn objeto, como por
ejemplo, Max, Min o Average, de lo que son estrictamente hablando Funciones de VBA ya que las primeras requieren la
definicindelobjeto(normalmenteApplication),frentealasfuncionesquepuedenserusadasdirectamente.
Unlistado(nocompleto)delasfuncionesdeVisualBasicmsempleadassera:
FUNCINDESCRIPCIN
AbsDevuelveelvalorabsolutodeunnmero
AscObtieneelvalorASCIIdelprimercaracterdeunacadenadetexto
CBoolConvierteunaexpresinasuvalorbooleano
CByteConvierteunaexpresinaltipodedatoByte
CCurConvierteunaexpresinaltipodedatomoneda(Currency)
CDateConvierteunaexpresinaltipodedatofecha(Date)
CDblConvierteunaexpresinaltipodedatodoble(Double)
CDecConvierteunaexpresinaltipodedatodecimal(Decimal)
ChooseSeleccionaunvalordeunalistadeargumentos
ChrConvierteunvalorANSIenvalordetipotexto
CIntConvierteunaexpresinenundatodetipoentero(Integer)
CLngConvierteunaexpresinenundatodetipolargo(Long)
data:text/htmlcharset=utf8,%3Ch3%20class%3D%22posttitle%20entrytitle%22%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%2

2/4

7/8/2015

EXCELFORO:EJERCICIOS,EJEMPLOS,SOLUCIONES,DUDAS:VBA:FuncionesdelahojadeclculoenVBA.

CreateObjectCreaunobjetodetipoOLE
CStrConvierteunaexpresinenundatodetipotexto(String)
CurDirDevuelvelarutaactual
CVarConvierteunaexpresinenundatodetipovariant(Variant)
DateDevuelvelafechaactualdelsistema
DateAddAgregaunintervalodetiempoaunafechaespecificada
DateDiffObtieneladiferenciaentreunafechayunintervalodetiempoespecificado
DatePartDevuelveunaparteespecficadeunafecha
DateSerialConvierteunafechaenunnmeroserial
DateValueConvierteunacadenadetextoenunafecha
DayDevuelveeldadelmesdeunafecha
DirDevuelveelnombredeunarchivoodirectorioqueconcuerdeconunpatrn
EOFDevuelveverdaderosisehallegadoalfinaldeunarchivo
FileDateTimeDevuelvelafechayhoradelaltimamodificacindeunarchivo
FileLenDevuelveelnmerodebytesenunarchivo
FormatCurrencyDevuelveunnmerocomountextoconformatodemoneda
FormatPercentDevuelveunnmerocomountextoconformatodeporcentaje
HourDevuelvelahoradeunvalordetiempo
IIfDevuelveundedospartes,dependiendodelaevaluacindeunaexpresin
InputBoxMuestrauncuadrodedilogoquesolicitalaentradadelusuario
InStrDevuelvelaposicindeunacadenadetextodentrodeotracadena
InStrRevDevuelvelaposicindeunacadenadetextodentrodeotracadenaperoempezandodesdeelfinal
IntDevuelvelaparteenteradeunnmero
IsDateDevuelveverdaderosilavariableesunafecha
IsEmptyDevuelveverdaderosilavariableestvaca
IsErrorDevuelveverdaderosilaexpresinesunvalordeerror
IsNullDevuelveverdaderosilaexpresinesunvalornulo
IsNumericDevuelveverdaderosilavariableesunvalornumrico
JoinDevuelveunacadenadetextocreadaalunirlascadenascontenidasenunarrreglo
LBoundDevuelveuntipoLongquecontieneelsubndicemspequeodisponibleparaladimensinindicadadeunamatriz.
LCaseDevuelveunacadenaconvertidaenminsculas
LeftDevuelveunnmeroespecficodecaracteresalaizquierdadeunacadena
LenDevuelvelalongituddeunacadena(encaracteres)
LTrimEliminalosespaciosalaizquierdadeunacadena
MidExtraeunnmeroespecficodecaracteresdeunacadenadetexto
MinuteDevuelveelminutodeunadatodetiempo
MonthDevuelveelmesdeunafecha
MsgBoxDespliegauncuadrodedialogoconunmensajeespecificado
NowDevuelvelafechayhoraactualdelsistema
ReplaceReemplazaunacadenadetextoconotra
SpaceDevuelveunacadenadetextoconelnmerodeespaciosespecidicados
SplitDevuelveunarregloformadoforcadenasdetextoqueformabanunasolacadena
StrDevuelvelarepresentacinentextodeunnmero
RightDevuelveunnmeroespecificadodecarecteresaladerechadeunacadenadetexto
RndDevuelveunnmeroaleatorioentre0y1
RoundRedondeaunnmeroaunacantidadespecficadedecimales
RTrimEliminalosespaciosenblancoaladerechadeunacadenadetexto
SecondDevuelvelossegundosdeundatodetiempo
StrCompComparadoscadenasdetexto
StrReverseInvierteelordendeloscaracteresdeunacadena
TimeDevuelveeltiempoactualdelsistema
TimerDevuelveelnmerodesegundosdesdelamedianoche
TimeValueConvierteunacadenadetextoaunnmerdeseriedetiempo
TrimEliminalosespaciosenblancoalinicioyfinaldeunacadenadetexto
TypeNameObtieneelnombredeltipodedatodeunavariable
UBoundDevuelveuntipoLongquecontieneelmayorsubndicedisponibleparaladimensinindicadadeunamatriz.
UCaseConvierteunacadenadetextoenmaysculas
ValDevuelveelnmerocontenidoenunacadenadetexto
WeekdayDevuelveunnmeroquerepresentaundadelasemana
WeekdayNameDevuelveelnombredeundadelasemana
data:text/htmlcharset=utf8,%3Ch3%20class%3D%22posttitle%20entrytitle%22%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%2

3/4

7/8/2015

EXCELFORO:EJERCICIOS,EJEMPLOS,SOLUCIONES,DUDAS:VBA:FuncionesdelahojadeclculoenVBA.

YearObtieneelaodeunafecha

data:text/htmlcharset=utf8,%3Ch3%20class%3D%22posttitle%20entrytitle%22%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%2

4/4

You might also like