Curso Excel VBA y Macros – Cap. 43 – Usar Fórmulas y funciones de Excel desde macros

 <<CURSO COMPLETO EN YOUTUBE>>

En este video tutorial veremos la manera en la que podemos usar las funciones de hoja de cálculo que usamos en celdas, desde VBA. Las funciones de Excel se vuelven muy útiles cuando deseamos simular cálculos en celdas, pero usando macros. Por ejemplo, podemos usar la función BUSCARV para buscar un valor de un TextBox dentro de un rango de celdas y devolver la coincidencia.

Veremos 3 maneras en las que podemos trabajar con fórmulas y funciones desde VBA:

  • Usando Application.WorksheetFunction podemos usar las funciones de Excel desde macros y recuperar el resultado en celdas, formularios o para usar en otros cálculos.
  • Usando Range.FormulaLocal insertamos fórmulas en Excel en el idioma instalado en la computadora.
  • Usando Range.Formula insertamos fórmulas en celdas independientemente del idioma de la PC. Podemos distribuir archivos entre computadoras con diferentes idiomas.

Ver video Capítulo 43 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Application.WorksheetFunction

Con esta propiedad podremos usar las funciones de hoja de cálculo directamente en nuestras macros y obtener resultados que podemos volcar en celdas, controles de formulario o usarlos para otros cálculos. Las funciones de Excel ya son lo suficientemente poderosas como para perdernos toda su potencias en nuestros desarrollos.

En el siguiente código VBA usando la función SUM o SUMA para realizar una suma de un rango, y el resultado lo enviaremos a la celda C1.

Range("C1").Value = Application.WorksheetFunction.Sum(Range("B8:B22"))

Range.FormulaLocal

Con esta propiedad podremos insertar fórmulas directamente en celdas escribiendo dichas fórmulas en nuestro idioma local. Usamos la propiedad FormulaLocal y entre comillas solo ingresamos la fórmula tal cual la ingresaríamos en una celda.

Range("C2").FormulaLocal = "=BUSCARV(A8,Hoja2!$A$1:$B$16,2,0)"

Range.Formula

La ventaja de usar la propiedad Formula es que podremos pasar nuestros archivos con macros a cualquier PC sin importar el idioma que tengan instalado. Una desventaja podría ser que tenemos que escribir el nombre de la función en su equivalente en Inglés, pero por el beneficio que obtenemos, vale la pena.

Range("C3").Formula = "=VLOOKUP(A8,Hoja2!$A$1:$B$16,2,0)"

Código VBA de las macros

Esta macro usa la propiedad WorksheetFunction y la función Suma, además de insertar una fórmula en una celda.

Sub Prueba()

Range("C1").Value = Application.WorksheetFunction.Sum(Range("B8:B22"))
Range("C2").FormulaLocal = "=SUMA(B8:B22)"

End Sub

Esta macro inserta el resultado de las funciones SUMA, PROMEDIO y MAX en 3 celdas.

Sub FuncionesWSF()

Dim Rango As Range
Dim UltimaFila As Integer

Set Rango = Sheets("Hoja1").Range("A7").CurrentRegion
UltimaFila = Rango.Rows.Count + 6

With Sheets("Hoja1")

    .Range("B5").Value = WorksheetFunction.Sum(Range("B8", Cells(UltimaFila, 2)))
    .Range("C5").Value = WorksheetFunction.Average(Range("C8", Cells(UltimaFila, 3)))
    .Range("D5").Value = WorksheetFunction.Max(Range("D8", Cells(UltimaFila, 4)))
    
End With

End Sub

Esta última macro insertar dos fórmulas con la función BUSCARV. Usando tanto FormulaLocal como Formula.

Sub FormulasDesdeVBA()

Dim Rango As Range
Dim UltimaFila As Integer

Set Rango = Sheets("Hoja1").Range("A7").CurrentRegion
UltimaFila = Rango.Rows.Count + 6

With Sheets("Hoja1")

    .Range("E8", Cells(UltimaFila, 5)).FormulaLocal = "=BUSCARV(A8,Hoja2!$A$1:$B$16,2,0)"
    .Range("F8", Cells(UltimaFila, 6)).Formula = "=VLOOKUP(A8,Hoja2!$A$1:$B$16,2,0)"

End With

End Sub

Descarga el archivo de ejemplo

043 – Usar Formulas y funciones desde macros.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *