Hola a todos:
Recientemente he recibido la siguiente consulta:
«Buenos días, Le escribo por si pudiese ayúdame con lo siguiente. Tengo la siguiente macro, que lo que hace es una fórmula que hace (una UDF) ………
…………. ¿Es posible hacer con vba otra macro que lo que haga es dejar exclusivamente las celdas que tengan esta fórmula como valores?
Mil gracias,»
Es decir, el lector tiene una UDF o función definida por él mismo y desea una macro que sea capaz de identificar esta función y pasar su resultado a valores. Obviamente debería ser capaz de pasar a valores cualquier tipo de fórmula que le indiquemos, dado que una UDF no deja de ser una fórmula más. Los puntos suspensivos los he puesto yo para no reproducir todo el correo.
Para ilustrar este ejemplo voy a usar una hoja Excel con varias fórmulas, todas ellas son fórmulas de Excel, ninguna es una UDF, pero el resultado es el mismo:
Como podéis ver, en rojo está el nombre de las funciones empleadas pero en Inglés. Esto será necesario para la macro. Os dejo de todas formas las funciones empleadas en cada ejemplo.
Pues bien, vamos a pasar a valores las siguientes funciones:
"IFERROR(IF(MATCH"
o lo que es lo mismo =SI.ERROR(SI(COINCIDIR"IF(SUMPRODUCT"
o lo que es lo mismo =SI(SUMAPRODUCTO
Y este es el código que vamos a utilizar:
Option Explicit
Sub PASAR_VALOR()
'Declaramos variables
Dim MiRango As Object, celda As Variant, D As Long
ActiveSheet.Select
'Si no hay fórmulas en la hoja, controlamos el error
'y mostramos mensaje en etiqueta
On Error GoTo etiqueta
Set MiRango = ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
'Si existe fórmula pasamos al procedimiento
D = 1
For Each celda In MiRango
If InStr(celda.Formula, "IFERROR(IF(MATCH") Or _
InStr(celda.Formula, "IF(SUMPRODUCT") Then
celda.Formula = celda.Value
D = D + 1
End If
Next
'Si las funciones elegidas están la página, mostramos mensaje
If D > 1 Then MsgBox ("LAS FORMULAS HAN SIDO CAMBIADAS A VALORES"), vbInformation
Set MiRango = Nothing: Close
Exit Sub
etiqueta: MsgBox ("NO EXISTEN FÓRMULAS EN LA HOJA ACTIVA"), vbExclamation
End Sub
Como podéis observar, cuando la fórmula es nativa de Excel, debemos indicarla en inglés, si se trata de una UDF que hemos creado nosotros, debemos indicarla con el nombre con la que la hemos creado.
Una vez ejecutado el código, las celdas con esas funciones solo contendrán el valor.
Descarga el archivo de ejemplo pulsando en: MACRO PARA PASAR A VALORES UNA FÓRMULA ESPECÍFICA
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies