DEJE QUE EXCEL HAGA EL TRABAJO SUCIO

Mostrar fórmula en una celda

La siguiente función definida por el usuario permitirá mostrar la fórmula de la celda que se le indique en diferentes formatos. A continuación, una pequeña descripción de su uso:

MostrarFormula(Formula,Tipo[Argumento opcional],Celda[Argumento opcional])

Formula es una referencia a la celda que contiene la fórmula que se desea mostrar.

Tipo[Argumento opcional]. Es el tipo de fórmula que se desea mostrar:

0 para mostrar la fórmula tal cual fue ingresada en la celda (es el valor por defecto).
1 para mostrar la fórmula en inglés.
2 para mostrarla en referencia tipo R1C1.

Celda[Argumento opcional], indica si se mostrará la dirección de la celda en la que se encuentra la fórmula que se desea mostrar. Falso (0) es el valor predeterminado, así que si se omite no mostrará la dirección de la celda. Verdadero (1) mostrará la dirección de la celda antecediendo a la fórmula.

Así, si en A11 se tiene la fórmula =SUMA(A1:A10), MostrarFormula dará los siguientes resultados:

MostrarFormula(Formula,[Tipo],[Celda])
FormulaResultado
=MostrarFormula(A11)=SUMA(A1:A10)
=MostrarFormula(A11,,1)A11: =SUMA(A1:A10)
=MostrarFormula(A11,2)=SUM(R[-10]C:R[-1]C)
=MostrarFormula(A11,1,VERDADERO)A11: =SUM(A1:A10)

Si la celda ingresada en MostrarFormula contiene un fórmula matricial, el resultado arrojado se mostrará entre { } indicando que es una fórmula matricial.

Si la celda ingresada en MostrarFormula no contiene una fórmula, la función arrojará error de #N/A.

Function MostrarFormula(ByVal Formula As Excel.Range, _
                        Optional ByVal Tipo As Byte = 0, _
                        Optional ByVal Celda As Boolean = False) As Variant
    
    Dim Ref As String
    
    If Formula.HasFormula Then
        
        If Celda = True Then Ref = Formula.Address(0, 0) & ": "
        
        Select Case Tipo
            Case 0
                If Formula.HasArray Then
                    MostrarFormula = Ref & "{" & Formula.FormulaLocal & "}"
                Else
                    MostrarFormula = Ref & Formula.FormulaLocal
                End If
            Case 1
                If Formula.HasArray Then
                    MostrarFormula = Ref & "{" & Formula.Formula & "}"
                Else
                    MostrarFormula = Ref & Formula.Formula
                End If
            Case 2
                If Formula.HasArray Then
                    MostrarFormula = Ref & "{" & Formula.FormulaR1C1 & "}"
                Else
                    MostrarFormula = Ref & Formula.FormulaR1C1
                End If
        End Select
    
    Else
        
        MostrarFormula = VBA.CVErr(xlErrNA)
    
    End If
    
End Function

En este otro tema encontrará una macro que permite crear una matriz con la dirección, el valor y la fórmula de uno o varios rangos seleccionados: Mostrar todas las fórmulas de uno o varios rangos.

7 comentarios:

  1. Estimado César, muchas gracias y me alegra mucho tu comentario. Como ves el blog está empezando y he estado un poco sólo... y siempre viene bien un poco de compañía, a ver si compartimos un café y algunas ideas sobre Excel, herramienta que sé que manejas muy bien :D.

    ResponderSuprimir
  2. Estas haciendo un buen trabajo, seria un honor compartir ideas sobre excel Mauricio. En el foro no se te puede enviar mensajes privados.
    Saludos,
    César

    ResponderSuprimir
  3. Buen día Mauricio;

    Y si la fórmula no la quieres en una celda, si no como un mensaje,,,, se podría utilizar este:

    Sub Formula_Mensaje()

    For Each Window In Windows

    For Each Worksheet In Window.SelectedSheets

    For Each cell In Application.Selection

    addr = Worksheet.Name & "!" & cell.Address

    temp = ""

    On Error Resume Next

    temp = Range(addr).Comment.Text

    If InStr(temp, "|") Then

    temp = Mid(temp, InStr(temp, "|") + 1)

    End If

    Range(addr).ClearComments

    If Range(addr).HasFormula = True Then

    Range(addr).AddComment (cell.Formula & "|" & temp)

    Else

    If temp <> "" Then Range(addr).AddComment temp

    End If

    Next cell

    Next Worksheet

    Next Window

    ResponderSuprimir
  4. Hola Carlos,

    Es una buena alternativa mostrar la fórmula de cada celda como un comentario en ella.

    Gracias :D.

    ResponderSuprimir
  5. Excelente, esto lo estaba buscando por todos lados. Pregunta... hay alguna forma de que me devuelva la formula pero sin el signo = Saludos

    ResponderSuprimir
  6. Hola Matias,

    quizás lo más práctico sea anidar la función para remover el signo "=" inicial. Si vas a usar la función en una hoja de cálculo, prueba con sustituir:

    =SUSTITUIR(mostrarformula(A1);"=";"";1)

    Ten en cuenta el separador de argumentos, estoy usando el punto y coma. Si tu separador de argumentos es la coma, pues cambia los punto y comas por comas.

    Si vas a usar la función desde VBA, podrías probar con vba.replace:

    vba.replace(mostrarformula(range("a1")),"=","",,1)

    Observa el 1 como argumento final tanto en sustituir como en replace, que indican que sólo se reemplace la primera ocurrencia del texto buscado.

    Claro, también se podría modificar el código, pero resulta muy fácil hacer lo que buscas anidando la función en otra función ya sea en la hoja de cálculo o en VBA, sin modificar la opción. Así puedes mostrar o no el igual inicual con el mismo código.

    ResponderSuprimir