Macro para mostrar mensaje personalizado en fórmulas con error usando SI.ERROR
Muchas de nuestras fórmulas pueden generar mensajes de error, ya sea por una división entre 0, un valor no encontrado, una referencia a una celda que ya no es válida.
Los mensajes de error que puede generar Excel son.
-
#VALOR!
-
#DIV/0!
-
#¿NOMBRE?
-
#N/A
-
#¡REF!
-
#¡NUM!
-
#¡NULO!
Si vemos una hoja de cálculo con estos errores, a mi ver no es muy “estético” y muchos usuarios pueden pensar que la fórmula está mal escrita, cuando seguramente el error es por el cálculo que haceo o el valor que no encuentra.
La siguiente macro hace uso de la función SI.ERROR para mostrar un mensaje personalizado en lugar de mostrar un error de Excel.
Ejemplo
Tenemos una fórmula que hace un BUSCARV sobre una tabla de nombres y nos devuelve los valores de edad y ventas.
La fórmula utilizada se muestra a continuación.
=BUSCARV(G5,$A$2:$D$22,2,0)
Si el valor buscado sí devuelve un resultado, se mostrará así.
En cambio si el valor buscado no se encuentra en nuestra tabla, se mostrará el error #N/A (valor no encontrado).
Solución
Para mostrar un mensaje personalizado podremos utilizar la función SI.ERROR para indicar que si el resultado de la fórmula devuelve un error nos muestre un texto personalizado por nosotros y así ser tener más control sobre nuestra hoja de cálculo. La formula quedaría así.
=SI.ERROR(BUSCARV(G5,$A$2:$D$22,2,0),”Revise fórmula”)
El texto mostrado sería Revise fórmula.
Macro
El código que muestro a continuación nos ahorrará el trabajo de formar nuestra fórmula previniendo un error y aplicando un mensaje personalizado.
Código
Sub MensajeFormulaError() 'Se declaran las variables Dim Longitud As Integer Dim Fx As String Dim Celdas As Range Set Celda = ActiveCell 'La variable Longitud almacenará el largo de la fórmula Longitud = Len(Celda.FormulaLocal) 'La variable Celda almacenará la fórmula quitanto el signo = Fx = Right(Celda.FormulaLocal, Longitud - 1) 'Asigna a la celda activa la función SI.ERROR junto la fórmula que tenía Celda.Formula = "=IFERROR(" & Fx & ",""Revise fórmula"")" End Sub
Animación de la macro en ejecución