Para tener siempre a mano: una simple tabla con las funciones de Excel escritas en castellano y, para mejor, con su respectiva traducción en inglés.
Son 338 funciones, ordenadas de forma ascendente. No poseen a que grupo (logicas, matematicas, texto, etc) corresponde cada una, ya que les dejo esta info con la única intención de que la guarden por si el día de mañana deben lidiar con alguna versión de Excel en inglés.
Una utilidad mas importante aún que la anterior es, desde mi punto de vista, la posibilidad de utilizarlas en las WorksheetFunction de VBA.
podrán descargar el archivo al final del post
[+/-] Ver el resto / Ocultar
Las famosas WoksheetFunctions (las que he utilizado en varias entradas y de las cuales soy cada vez mas fanático) son las mismas funciones que ingresamos en una celda (por ej: SI(), BuscarV(), etc, etc) pero para ser utilizadas desde el editor de Visual Basic.
Un ejemplo muy simple:
deseamos contar la cantidad de elementos de un rango:
en E1 ingresé la función CONTAR()
Ahora bien--- ¿como hacemos lo mismo desde VBA, con una Macro?
¿Cual sería el código necesario para que nuestra macro nos devuelva el mismo valor que la función CONTAR? En realidad, y como siempre sucede en el ámbito de la programación, existen infinidad de formas de resolver este problema, como por ej. colocar un bucle e ir contado cada elemento del rango. Pero una muy sencilla y mucho mas rápida es haciendo uso de las WorksheetFunctions: invocar a CONTAR() desde VBA.
Código:
Sub MyFunctions()
Dim Resultado
'WorksheetFunction es un método que se desprende directamente
'del objeto Application
'Almaceno el resultado en la variable llamada, de forma muy
'original, Resultado.
'la funcion CONTAR() (count, en ingles) requiere un argumento:
'el rango. y se lo paso:
Resultado = Application.WorksheetFunction.Count(Range("D1:D5"))
'muestro en un MsgBox
MsgBox Resultado
End Sub
nuestra macro en acción.
Y así de sencillo, nomás. Evité el uso de bucles u otras estructuras que demorarían el proceso. Aquí el ejemplo solo abarca 5 filas... pero imaginen contar con un bucle un rango de cuarenta o sesenta mil celdas. Obviamente que con las WorksheetFunctions esta tarea solo se reduce a milisegundos, en contraste a la demora que equivaldría la utilización de un For... Next o un Do.
Otro ejemplo muy sencillo: hallar el máximo valor de un rango. También aquí la solución mas lógica sería:
1) armar una estructura de bucle
2) recorrer el rango, celda x celda
3) ir comparando (con If...) y almacenar el valor mas alto hallado
Pero todo lo anterior también lo reducimos a casi nada de código con una WorksheetFunction:
Sub MyFunctions2()
Dim Resultado
'WorksheetFunction es un método que se desprende directamente
'del objeto Application
'Almaceno el resultado en la variable llamada, de forma muy
'original, Resultado.
Resultado = Application.WorksheetFunction.Max(Range("D1:D5"))
'muestro en un MsgBox
MsgBox Resultado
End Sub
Recuerden: una WorksheetFunction lleva exactamente la misma cantidad de argumentos que ingresamos en su equivalente en Excel, en el mismo orden. Aquí expuse las mas sencillas, pero las que presentan cierta complejidad poseen la misma lógica.
JERMMY
ResponderEliminarhoja JERMMY. tu comentario no salió publicado.
ResponderEliminarhola
ResponderEliminarcomo ubico esta formula en ingles
=CAR(ALEATORIO.ENTRE(65;90))
Hola. Aletatorio.Entre() sería RANDBETWEEN
ResponderEliminarPero no conozco la función CAR() ¿cuál es?
Quedo al aguardo de tus noticias.