Professional Documents
Culture Documents
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.
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
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.
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.
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