Devolver celda vacía de fórmula en Excel

219

Necesito devolver una celda vacía de una fórmula de Excel, pero parece que Excel trata una cadena vacía o una referencia a una celda vacía de manera diferente a una celda vacía verdadera. Así que esencialmente necesito algo como

=IF(some_condition,EMPTY(),some_value)

Traté de hacer cosas como

=IF(some_condition,"",some_value)

y

=IF(some_condition,,some_value)

y suponiendo que B1 es una celda vacía

=IF(some_condition,B1,some_value)

pero ninguno de estos parece ser verdaderas celdas vacías, supongo porque son el resultado de una fórmula. ¿Hay alguna forma de llenar una celda si y solo si se cumple alguna condición y de lo contrario mantener la celda realmente vacía?

EDITAR: según lo recomendado, traté de devolver NA (), pero para mis propósitos esto tampoco funcionó. ¿Hay alguna manera de hacer esto con VB?

EDITAR: Estoy creando una hoja de trabajo que extrae datos de otras hojas de trabajo que está formateada para las demandas muy específicas de una aplicación que importa los datos a una base de datos. No tengo acceso para cambiar la implementación de esta aplicación, y falla si el valor es "" en lugar de estar realmente vacío.

Bryan Ward
fuente
8
¿Puedes explicar por qué la celda necesita estar en blanco? Dependiendo de lo que le quede "en blanco", puede haber una solución alternativa.
JT Grimes
3
La celda contiene la fórmula, ¿no? ¿Cómo puede estar vacío o en blanco entonces?
Sinan Ünür el
8
Tengo un problema similar, estoy dibujando un gráfico y no quiero mostrar el valor 0 para los elementos en blanco en el gráfico. Si los registros son celdas vacías, los omite del gráfico, pero cualquiera de los métodos enumerados en las "Respuestas" a continuación da como resultado que se muestren 0 en el gráfico. :(
Cobusve
55
Para evitar que se muestren ceros en los gráficos, use la función NA () en lugar de la cadena vacía / cero. Esto pondrá # N / A en la celda, lo cual es ignorado por la rutina gráfica.
Rob
55
La sugerencia de Rob de usar # N / A tiene un resultado diferente al de una celda vacía. # N / A dará como resultado la rutina de gráficos interpolando sobre la celda, mientras que una celda verdaderamente vacía se tratará como un espacio en la línea. Si desea un GAP en la línea en lugar de INTERPOLACIÓN a través del espacio, necesita que la celda esté VACÍA y no # N / A según la pregunta. Hay soluciones a continuación que abordan esto según lo solicitado.
Mr Purple

Respuestas:

50

Vas a tener que usar VBA , entonces. Recorrerá las celdas de su rango, probará la condición y eliminará el contenido si coincide.

Algo como:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next
JT Grimes
fuente
66
Añadiría a esto: si siempre tiene un rango particular de celdas para el que desea borrar las celdas en blanco, podría darle un nombre a ese rango, luego modificar la fórmula de Boofus cambiando SomeRange a Range ("MyRange"). Para establecer un nombre para sus celdas, seleccione las celdas, haga clic en Definir nombre en la pestaña Fórmulas de la cinta e ingrese "MyRange" en el campo Nombre. (Y, por supuesto, puedes reemplazar MyRange con lo que quieras)
devuxer
31
Es intenso que no exista una constante nula en Excel.
ted.strauss
55
Si coloca la macro en la función worksheet_calculate (), automáticamente vaciará las celdas. Para detalles específicos, puede ver mi respuesta a continuación.
Mr Purple
3
@ ted.strauss hayVbNullString
brettdj
55
@brettdj Eso es VBA, no Excel. Hemos presionado largo y duro para algún tipo de función como NULL () o BLANK (), en vano.
Jon Peltier
75

Excel no tiene ninguna forma de hacer esto.

El resultado de una fórmula en una celda en Excel debe ser un número, texto, lógico (booleano) o error. No hay un tipo de valor de celda de fórmula "vacío" o "en blanco".

Una práctica que he visto seguir es usar NA () e ISNA (), pero eso puede o no resolver realmente su problema ya que existe una gran diferencia en la forma en que NA () es tratado por otras funciones (SUM (NA ( )) es # N / A mientras SUM (A1) es 0 si A1 está vacío).

Joe Erickson
fuente
19
El método NA () funciona al 100% para los gráficos que están configurados para mostrar celdas vacías como huecos, esto probablemente no funcionará para su caso en el que está exportando a una aplicación que necesita que la celda esté en blanco ya que contiene una fórmula ...
Cobusve
44
No hay una solucion perfecta. NA () es una buena opción. Otra es la cadena vacía de (dependiendo) '' o ""
Jason
Esto funciona con el propósito de devolver dinámicamente las celdas vacías en los datos que se van a trazar, para que pueda usar efectivamente la opción de ignorar las celdas vacías como espacios en los gráficos. En mi caso, estaba tratando de trazar 12 valores para representar una progresión mensual, pero solo hasta el mes anterior, con una fórmula como esta: = SI (MES (HOY ())> C2; $ C $ 11 + C7; NA ( ))
EKI
Esto funcionó para mí. Tengo un gráfico con datos que agrego todos los días: un gráfico de quemado para scrum y quería ver que la línea solo se extendiera hasta el día actual. Esto me ayudó a hacer eso, usando NA () en una declaración IF. ¡Gracias!
theJerm
12
NA () no dará como resultado una brecha. Todo el mundo se equivoca. Excel no trazará un marcador si el valor es NA () o # N / A, pero dibujará una línea interpolada entre valores adyacentes que no sean # N / A.
Jon Peltier
38

Sí, es posible.

Es posible tener una fórmula aniquiladora que evalúe en blanco verdadero si se cumple la condición. Pasa la prueba de ISBLANKfórmula.

enter image description here

Todo lo que necesita es configurar un rango con nombre, por ejemplo GetTrueBlank, y podrá usar el siguiente patrón como en su pregunta:

=IF(A1 = "Hello world", GetTrueBlank, A1)

Paso 1. Pon este código en el Módulo de VBA.

Function Delete_UDF(rng)
    ThisWorkbook.Application.Volatile
    rng.Value = ""
End Function

Paso 2. En Sheet1en A1célula añadir nombrado gama GetTrueBlankcon la siguiente fórmula:

=EVALUATE("Delete_UDF("&CELL("address",Sheet1!A1)&")")

enter image description here

Eso es. No hay más pasos. Solo usa la fórmula auto aniquiladora. Poner en celda, digamos B2, la siguiente fórmula:

=IF(A2=0,GetTrueBlank,A2)

La fórmula anterior B2se evaluará en trueblank, si escribe 0 A2.

Puede descargar un archivo de demostración aquí .

En el ejemplo anterior, la evaluación de la fórmula en trueblank da como resultado una celda vacía. Comprobando el resultado conISBLANK resultados de la fórmula positivamente en VERDADERO. Esta es la fórmula de hara-kiri. La fórmula desaparece de la celda cuando se cumple la condición. Se alcanza el objetivo, aunque probablemente desee que la fórmula no desaparezca.

Puede modificar la fórmula para devolver el resultado en la celda adyacente, de modo que la fórmula no se mate sola. Vea cómo obtener el resultado UDF en la celda adyacente .

He encontrado los ejemplos de cómo obtener un verdadero espacio en blanco como resultado de la fórmula revelado por The FrankensTeam aquí: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another- célula

Przemyslaw Remin
fuente
55
Esta es una dulce solución, aunque es una locura que no haya forma de hacerlo sin vaciar físicamente la celda. La única desventaja aquí sería que tendría que recordar volver a arrastrar la fórmula hacia abajo al volver a calcular, aunque supongo que podría establecer un evento de libro de trabajo para hacer eso.
Some_Guy
Antes de intentar utilizar la dulce solución, tenga en cuenta que puede ser contraproducente .
GSerg
@GSerg ¿Estás diciendo que puedes hacer un bucle con VBA que irá infinitamente y de esta manera el programa se bloqueará? VBA podría ser una navaja en las manos del mono. Y hay un rumor de que un león también disparó. Eso debería asustar más :-)
Przemyslaw Remin
@PrzemyslawRemin No, estoy diciendo que pueden suceder varias cosas al azar, incluido el bloqueo de Excel .
GSerg
20

Tal vez esto sea trampa, ¡pero funciona!

También necesitaba una tabla que sea la fuente de un gráfico, y no quería que ninguna celda en blanco o cero produjera un punto en el gráfico. Es cierto que debe establecer la propiedad del gráfico, seleccionar datos, celdas ocultas y vacías para "mostrar celdas vacías como espacios" (haga clic en el botón de opción). Ese es el primer paso.

Luego, en las celdas que pueden terminar con un resultado que no desea trazar, coloque la fórmula en una instrucción IF con NA()resultados como=IF($A8>TODAY(),NA(), *formula to be plotted*)

Esto proporciona el gráfico requerido sin puntos cuando se produce un valor de celda no válido. Por supuesto, esto deja todas las celdas con ese valor no válido para leer #N/A, y eso es desordenado.

Para limpiar esto, seleccione la celda que puede contener el valor no válido, luego seleccione el formato condicional - nueva regla. Seleccione "formatear solo las celdas que contienen" y, en la descripción de la regla, seleccione "errores" en el cuadro desplegable. Luego, en formato, seleccione fuente - color - blanco (o el color de fondo que sea). Haga clic en los diversos botones para salir y debería ver que las celdas con datos no válidos se ven en blanco (en realidad contienen, #N/Apero el texto blanco sobre un fondo blanco se ve en blanco). Luego, el gráfico vinculado tampoco muestra los puntos de valor no válidos.

Caballero gentil
fuente
66
¡¡¡NO!!! "mostrar celdas vacías como espacios" Requiere que las celdas estén VACÍAS. Si contienen # N / A en lugar de NADA, la rutina gráfica se interpolará sobre las celdas # N / A en lugar de dejarlas como espacios en la línea. Si desea que las celdas # N / A se interpolen, está bien, pero en ese caso "mostrar celdas vacías como espacios" NO SE APLICA
Mr Purple
44
@GreenAsJade Esta no es la respuesta real porque no se ajusta a las necesidades del OP. Realmente debería haber una pregunta separada para el tema de los gráficos.
ZX9
10

Así es como lo hice para el conjunto de datos que estaba usando. Parece complicado y estúpido, pero fue la única alternativa para aprender a usar la solución VB mencionada anteriormente.

  1. Hice una "copia" de todos los datos y pegué los datos como "valores".
  2. Luego destaqué los datos pegados e hice un "reemplazo" ( Ctrl- H) de las celdas vacías con alguna letra, elegí qya que no estaba en ninguna parte de mi hoja de datos.
  3. Finalmente, hice otro "reemplazo" y lo reemplacé qpor nada.

Este proceso de tres pasos convirtió todas las celdas "vacías" en celdas "en blanco". Intenté fusionar los pasos 2 y 3 simplemente reemplazando la celda en blanco por una celda en blanco, pero eso no funcionó, tuve que reemplazar el celda en blanco con algún tipo de texto real, luego reemplace ese texto con una celda en blanco.

jeramy
fuente
Si bien esto puede haber funcionado en su caso, necesitaba una solución que pudiera aplicarse automáticamente. En última instancia, creo que usé una macro VB para borrar cosas que se determinó que estaban vacías. Esta macro se ejecutó justo antes de guardar el archivo.
Bryan Ward el
44
Esto fue lo mejor para mí porque no necesito que sea automático, pero sí que sea rápido. Esencialmente, significa que Excel respeta un valor agregado en blanco a través de Buscar y reemplazar, ¡lo cual es lo suficientemente bueno para mí!
rickcnagy
10

Si el objetivo es poder mostrar una celda como vacía cuando de hecho tiene el valor cero, en lugar de usar una fórmula que dé como resultado una celda en blanco o vacía (ya que no hay empty()función),

  • donde desea una celda en blanco, devuelva un en 0lugar de ""y ENTONCES

  • establezca el formato de número para las celdas de esta manera, donde tendrá que encontrar lo que desea para los números positivos y negativos (los dos primeros elementos separados por punto y coma). En mi caso, los números que tenía eran 0, 1, 2 ... y quería que el 0 apareciera vacío. (Nunca descubrí para qué se usaba el parámetro de texto, pero parecía ser necesario).

    0;0;"";"text"@
    
ET-X
fuente
44
Si bien esto no hace que la celda esté vacía (no hay forma de que una fórmula dé como resultado una celda vacía), hace que parezca vacía si el número es cero. Sin embargo, es incorrecto. Debe ser 0; -0; "" (observe el signo menos) o incluso 0; -0; sin ninguna cita en absoluto. El tercer punto y coma y la parte "texto" @ no son necesarios. El significado de los campos delimitados por punto y coma es: cómo mostrar números positivos, números negativos, cero y texto (el último formato debe contener una @). office.microsoft.com/en-gb/excel-help/...
cvoinescu
Eres un dios señor. Me salvaste de Visual Basic. Usted gobierna
CommaToast
7

Intenta evaluar la celda usando LEN. Si contiene una fórmula LENvolverá 0. Si contiene texto, devolverá mayor que 0.

Alex
fuente
Aunque esto no ayuda al autor de la pregunta original, en realidad no es una mala respuesta en muchos casos. Funciona bien para casos en los que se ha visto obligado a regresar "".
Technium
Gran respuesta pero un poco confuso. La celda que quiero probar devuelve un número ""o está vacía. LEN(cell)>0devuelve verdadero si hay un número (incluido cero e incluso si el número se calcula mediante una fórmula), y falso si la cadena está vacía o vacía.
Chris
7

Wow, una increíble cantidad de personas leyó mal la pregunta. Es fácil hacer que una celda se vea vacía. El problema es que si necesita que la celda esté vacía, las fórmulas de Excel no pueden devolver "ningún valor" pero solo pueden devolver un valor. Devolver un cero, un espacio o incluso "" es un valor.

Por lo tanto, debe devolver un "valor mágico" y luego reemplazarlo sin ningún valor usando buscar y reemplazar, o usando un script VBA. Si bien podría usar un espacio o "", mi consejo sería usar un valor obvio, como "NODATE" o "NONUMBER" o "XXXXX" para que pueda ver fácilmente dónde ocurre; es bastante difícil de encontrar "" en una hoja de cálculo

Laird Popkin
fuente
1
Sí, eso es lo que hice. Utilicé una función para generar "#EMPTY" y luego introduje un código en la subrutina de eventos "cálculo de hoja de cálculo". Comprueba mi respuesta para la solución completa.
Mr Purple
7

Utilizar COUNTBLANK(B1)>0 lugar de ISBLANK(B1)dentro de su IFdeclaración.

A diferencia ISBLANK(), COUNTBLANK()considera ""como vacío y devuelve 1.

Kevin Vuilleumier
fuente
Desafortunadamente, parece que Excel rechaza = COUNTBLANK (IFNA (VLOOKUP (...), "")) como no válido (!)
NetMage
6

Tantas respuestas que devuelven un valor que PARECE vacío pero que en realidad no está vacío como la celda solicitada ...

Según lo solicitado, si realmente desea una fórmula que devuelva una celda vacía. ES posible a través de VBA. Entonces, aquí está el código para hacer exactamente eso. Comience escribiendo una fórmula para devolver el error # N / A donde quiera que las celdas estén vacías. Entonces mi solución borra automáticamente todas las celdas que contienen ese error # N / A. Por supuesto, puede modificar el código para eliminar automáticamente el contenido de las celdas en función de lo que desee.

Abra el "visor básico visual" (Alt + F11) Encuentre el libro de trabajo de interés en el explorador de proyectos y haga doble clic en él (o haga clic con el botón derecho y seleccione ver código). Esto abrirá la ventana "ver código". Seleccione "Libro de trabajo" en el menú desplegable (General) y "SheetCalculate" en el menú desplegable (Declaraciones).

Pegue el siguiente código (basado en la respuesta de JT Grimes) dentro de la función Workbook_SheetCalculate

    For Each cell In Sh.UsedRange.Cells
        If IsError(cell.Value) Then
            If (cell.Value = CVErr(xlErrNA)) Then cell.ClearContents
        End If
    Next

Guarde su archivo como un libro de trabajo habilitado para macros

NB: Este proceso es como un bisturí. Eliminará todo el contenido de cualquier celda que evalúe el error # N / A, así que tenga en cuenta. Se irán y no podrá recuperarlos sin volver a ingresar la fórmula que solían contener.

NB2: Obviamente, debe habilitar las macros cuando abra el archivo; de lo contrario, no funcionará y los errores # N / A permanecerán sin recuperar.

Señor púrpura
fuente
2
Si necesita que sea completamente automático / manos libres / dinámico y no desea volver a ingresar la fórmula para generar el error #NA, puede volver a escribir el código de macro para duplicar la hoja en cuestión dejando celdas vacías en lugar de #NA y luego generar gráficos de la hoja duplicada (Agregaré el código si este comentario es votado).
Mr Purple
4

Esta respuesta no trata completamente con el OP, pero ha habido varias veces que tuve un problema similar y busqué la respuesta.

Si puede recrear la fórmula o los datos si es necesario (y de su descripción parece que puede), entonces cuando esté listo para ejecutar la parte que requiere que las celdas en blanco estén realmente vacías , puede seleccionar la región y ejecute la siguiente macro vba.

Sub clearBlanks()
    Dim r As Range
    For Each r In Selection.Cells
        If Len(r.Text) = 0 Then
            r.Clear
        End If
    Next r
End Sub

esto eliminará el contenido de cualquier celda que se muestre actualmente ""o que solo tenga una fórmula

AncianoAyuda
fuente
4

Lo que usé fue un pequeño truco. Usé T (1), que devolvió una celda vacía. T es una función en Excel que devuelve su argumento si es una cadena y una celda vacía de lo contrario. Entonces, lo que puedes hacer es:

=IF(condition,T(1),value)
Ahmed Shahid
fuente
Crea una cadena de longitud cero (ISBLANK (CELL) = FALSE).
Vinh
Esto funciona y debería ser la respuesta aceptada. Muchas gracias, Ahmed. Mi caso de uso es un poco diferente. Quiero dejar celdas vacías para que las funciones agregadas como AVERAGE (), MIN (), MAX (), STDEV (), COUNT () y MEDIAN () ignoren los valores.
Charlie Reitzel
2

Utilicé el siguiente trabajo para hacer que mi Excel se vea más limpio:

Cuando realice cualquier cálculo, el "" le dará un error, por lo que desea tratarlo como un número, por lo que utilicé una instrucción anidada if para devolver 0 en lugar de "", y luego, si el resultado es 0, esta ecuación devolverá ""

=IF((IF(A5="",0,A5)+IF(B5="",0,B5)) = 0, "",(IF(A5="",0,A5)+IF(B5="",0,B5)))

De esta manera, la hoja de Excel se verá limpia ...

Z grande
fuente
1
Esta no es una solución al problema. La hoja se ve limpia, pero el valor "" no está "vacío" en lo que respecta a los gráficos.
GreenAsJade
1

Si está utilizando funciones de búsqueda como BUSCARH y BUSCARV para incorporar los datos a su hoja de trabajo, coloque la función entre paréntesis y la función devolverá una celda vacía en lugar de un {0}. Por ejemplo,

Esto devolverá un valor cero si la celda de búsqueda está vacía:

    =HLOOKUP("Lookup Value",Array,ROW,FALSE)

Esto devolverá una celda vacía si la celda de búsqueda está vacía:

    =(HLOOKUP("Lookup Value",Array,ROW,FALSE))

No sé si esto funciona con otras funciones ... No lo he intentado. Estoy usando Excel 2007 para lograr esto.

Editar

Para que un IF (A1 = "",,) vuelva a ser verdadero, debe haber dos búsquedas en la misma celda separadas por un &. La forma fácil de evitar esto es hacer que la segunda búsqueda sea una celda que se encuentra al final de la fila y siempre estará vacía.

Matthew Dolman
fuente
1

Bueno, hasta ahora es lo mejor que se me ocurrió.

Utiliza la ISBLANKfunción para verificar si la celda está realmente vacía dentro de una IFdeclaración. Si hay algo en la celda, A1en este ejemplo, incluso un carácter ESPACIO, entonces la celda no esEMPTY y el cálculo resultará. Esto evitará que se muestren los errores de cálculo hasta que tenga números con los que trabajar.

Si la celda es EMPTYentonces, la celda de cálculo no mostrará los errores del cálculo. Si la celda es NOT EMPTYasí, se mostrarán los resultados del cálculo. Esto arrojará un error si sus datos son malos, #DIV/0¡ temidos !

=IF(ISBLANK(A1)," ",STDEV(B5:B14))

Cambie las referencias de celda y la fórmula según lo necesite.

Stevis Geekus
fuente
1
El problema con esto es que luego debe propagar esta verificación a todas las demás celdas utilizando este resultado.
guthrie
0

La respuesta es positiva: no puede usar la función = IF () y dejar la celda vacía. "Parece vacío" no es lo mismo que vacío. Es una pena que dos comillas consecutivas no produzcan una celda vacía sin borrar la fórmula.

Conocido
fuente
Si está preparado para usar VBA, puede hacerlo. Según algunas otras respuestas.
Mr Purple
-1

Google me trajo aquí con un problema muy similar, finalmente descubrí una solución que se adapta a mis necesidades, podría ayudar a alguien más también ...

Usé esta fórmula:

=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")
hamish
fuente