¿Cómo saber si una celda de Excel tiene una fórmula o está codificada?

17

¿Alguien tiene una sugerencia especial (que no sea VBA) para decir sistemáticamente si una celda tiene un valor codificado o es una fórmula derivada?

Estoy tratando con algunos datos que tienen subtotales desordenados integrados y estoy tratando de ver si puedo separar las líneas sin procesar.

YGA
fuente
¿Ayuda el modo "Mostrar fórmulas" (Ctrl + `)?
sblair
Lo hace, pero no lo consideraría "sistemático": requiere que elimine a mano las líneas subtotales.
YGA

Respuestas:

8

Usar formato condicional. Elija la opción "Usar una fórmula para determinar qué celdas formatear" y escriba "= NO (Cellhasformula)". Esto formateará todo lo que esté codificado.

Stephen
fuente
8
Así que esta no fue la respuesta completa, pero en realidad es bastante elegante. La respuesta completa está en: j-walk.com/ss/excel/usertips/tip045.htm La clave es que primero debe crear un nombre (a través de Fórmulas -> Administrador de nombres) llamado "Cellhasformula" que "se refiere a" fórmula mística = GET.CELL (48, INDIRECTO ("rc", FALSO)). Como dice el enlace, la fórmula usa GET.CELL, que está en el lenguaje de macro XLM (predecesor de VBA) y no se puede usar directamente en una hoja de trabajo. El argumento "48" hace que GET.CELL devuelva 'True' si la celda tiene una fórmula. El INDIRECTO básicamente crea una referencia a cada celda en el rango seleccionado.
YGA
He editado la respuesta para incluir esos detalles. Gracias @YGA
Alain
15

Seleccione las celdas en cuestión, presione Ctrl+ Gy luego seleccione Specialpara obtener el siguiente cuadro de diálogo:

Ir al cuadro de diálogo especial

Luego especifique el tipo de celdas que desea y haga clic OKy solo esos tipos de celdas permanecerán seleccionados.

Mike Fitzpatrick
fuente
8

A partir de Excel 2013, puede hacer:

=ISFORMULA(reference)

Aquí la documentación completa

David K.
fuente
3
=iferror(Formulatext(cell),"Not Formula")

o para mostrar solo las fórmulas:

=iferror(Formulatext(cell),"")
Jack
fuente
Para cualquiera que use LibreOffice Calc en lugar de Excel, reemplace formulatext () con formula ().
Fixer1234
2

Otros dos métodos son

  1. ¡Usa una herramienta de mapeo como mi Mappit! complemento (que se puede ejecutar como un complemento de confianza)
  2. Puede usar la muy útil solución XLM / Range Names que ofrece una coloración en tiempo real de celdas codificadas, fórmulas, celdas vinculadas, etc. Esto no requiere ningún conocimiento de programación para implementar a diferencia de VBA
brettdj
fuente
1

Sé que dijiste que no se prefiere VBA, pero si no tienes otras soluciones, el objeto Range tiene una propiedad HasFormula.

Devuelve: Verdadero si todas las celdas en el rango contienen fórmulas; Falso si ninguna de las celdas del rango contiene una fórmula; nulo de lo contrario.

Fuente: http://msdn.microsoft.com/en-us/library/bb208626%28v=office.12%29.aspx

Patrick Seymour
fuente
1

Si desea almacenar el archivo Excel en un formato de libro libre de macros, debe evitar tanto VBA como macros (es decir, los enfoques XL4 / XLM sugeridos en otras respuestas). En esta respuesta, asumí un archivo Excel libre de macros.

Si usa MS-Excel 2013, puede usar:

=ISFORMULA(reference)

Si usa versiones anteriores de MS-Excel (por ejemplo, 2010, 2007), no existe una función verdadera para determinar si una celda contiene una fórmula. Sin embargo, puede aproximarlo usando:

=IF(OR(ISBLANK(reference);CELL("prefix";reference)<>"");FALSE;IF(CELL("type";reference)="l";TRUE;"MAYBE"))

La función anterior devuelve:

  • VERDADERO para las celdas que contienen una fórmula que da como resultado datos de cadena.
  • FALSO para celdas que contienen un literal de cadena o está en blanco.
  • "MAYBE" para celdas que contienen un booleano, un número o una fecha, sin importar si este valor es literal o el resultado de una fórmula.
Julien Kronegg
fuente
1

Mucho más allá de la fecha original, pero si es de utilidad para alguien, logré evitar esto seleccionando el rango de celdas, luego usando Reemplazar (Ctrl + H), configurándolo en 'Buscar en' "Fórmulas" y reemplazar un igual =con un apóstrofe igual'=

Esto llevó a cabo todas las fórmulas, pero, obviamente, sería también convertir las cosas como si $ C $ 1 contenía =if($A1=$B1,"Match","Different")a'=if($A1'=$B1,"Match","Different")

Observe que A1'=B1en el medio de la fórmula puede ser problemático, pero aún así significa que puede ver las fórmulas, aunque no de manera pragmática. Podría usar la función SUSTITUIR para volver a cambiarlo, por lo que $ D $ 1 contiene =SUBSTITUTE(C1,"'=","="), luego simplemente copie en el Bloc de notas y péguelo nuevamente en $ E $ 1

La otra forma sería 'mostrar fórmulas', pero eso mostraría fórmulas para cada celda, no solo un rango seleccionado.

Aubs
fuente
1
Function is_formula(c As Range) As Boolean
  is_formula = Left(c.Formula, 1) = "="
End Function
George Skelton
fuente
¿Puedes agregar una breve explicación para decirnos qué está pasando aquí? :)
bertieb
Simplemente péguelo en un módulo VBA, aunque me doy cuenta de que ahora el OP no quería VBA. Pero de todos modos, por eso lo uso.
George Skelton el
Eso no es realmente una explicación
bertieb