Buscando una fórmula "isFormula" para las hojas de cálculo de Google

13

¿Hay una función que indique si una celda específica tiene un valor simple (ingresado manualmente) o tiene una fórmula?

epeleg
fuente

Respuestas:

5

Con este pequeño fragmento puedes hacer eso.

Código

function isFormula(startcol, startrow) {
  // prepare string
  var str = String.fromCharCode(64 + startcol) + startrow;

  // retrieve formula
  var fCell = SpreadsheetApp.getActiveSpreadsheet()
    .getRange(str).getFormula();

  // return false if empty else true 
  return fCell ? true : false;
}

Uso

ingrese la descripción de la imagen aquí

En esta respuesta , Tom Horwood encontró una manera de eludir el uso de citas.

Ejemplo

Agregue la secuencia de comandos en Herramientas> Editor de secuencias de comandos y presione el botón de error para activar la autenticación.

He creado un archivo de ejemplo para usted: Verifique la fórmula

Jacob Jan Tuinstra
fuente
Estaba vagando ... Su función es en realidad obtener una cadena que es la dirección de una celda isFormula2("A1"). así que traté de crear una nueva versión de esta manera: function isFormula2(cell) { return (cell.getFormula())!=""; } y esperaba que se pueda llamar usando isFormula2(A1)pero esto no parece funcionar y cuando trato de depurar se muestra cellcomo indefinido ... alguna idea de por qué es esto y si las cosas podrían ser cambiado para que funcione en f(A1)lugar de f("A1")?
Epeleg
@epeleg Vea mi respuesta revisada.
Jacob Jan Tuinstra
:) así que lo cambiaste para que en lugar de obtener la dirección ahora obtenga una columna y una fila. ¿No hay una sintaxis tal que la llamada simplemente sea isFormula(a1)? (en MS Excel sería una función que obtiene un parámetro de rango)
epeleg
@epeleg Lo más cercano es isFormula_1 ("A2: A2") , mira mi archivo de ejemplo. Las funciones personalizadas funcionan de esa manera. Sin las comillas, obtendrá el valor. Con comillas, la cadena se puede usar como tal, pero no se puede copiar / pegar. La solución COLUMNA y FILA es solo una solución (inevitablemente).
Jacob Jan Tuinstra
¿Cuál sería el valor que obtendría una función personalizada si la llama con isFormula (a1: a1)? ¿Y qué hay de isFormula (a1: b2)?
Epeleg
9

Respuesta corta

Utilice la función integrada ISFORMULA () .

Antecedentes y explicación

Creo que acabo de descubrir una fórmula no documentada en las nuevas Hojas de cálculo de Google. @Pnuts decía que la CELLfórmula no funcionaba (en parte porque solo está disponible en las nuevas Hojas de cálculo de Google), así que copié el código en una nueva Hoja de Google. Se generó un error, diciéndome que mi fórmula (personalizada) acepta solo un argumento y no dos:
ingrese la descripción de la imagen aquí

Cambiar el nombre de isFormulaa otra cosa, resultó en una función personalizada que funciona. Después de que este fuera el caso, creé otra hoja de Google y usé la isFormulafórmula. La fórmula no aparece en el autocompletado, pero está funcionando:
ingrese la descripción de la imagen aquí

Entonces, si la fórmula está disponible en las nuevas Hojas de cálculo de Google, entonces esta sería la mejor respuesta:

Fórmula

=isFormula(A1)

Nota

Solo disponible en las nuevas Hojas de cálculo de Google. Le he pedido a algunas otras personas que confirmen la nueva fórmula y está confirmada. Como no está documentado, su implementación es insegura y puede desaparecer. El ARRAYFORMULAno funciona cuando se usa con esta nueva fórmula.

Ejemplo

He creado un archivo de ejemplo para usted: isFormula

Jacob Jan Tuinstra
fuente
bonito. parece que Google está adoptando mi recomendación :) ¿Pero cómo cambio a las "Nuevas Hojas de cálculo de Google"?
epeleg
interesante. funciona para mi cuenta de Gmail pero no para mi cuenta de Google Apps ...
epeleg
2
ISFORMULA () ahora está documentado. Consulte support.google.com/docs/answer/6270316?hl=es
Rubén el
2

Parece que hay una función incorporada oculta ISFORMULA()de Google. Me di cuenta cuando borré mi propia función y todavía estaba trabajando. Lo probé en una nueva hoja de cálculo y aún funciona. No hay problema de caché.

Juan Pérez
fuente