Retornar célula vazia da fórmula no Excel

218

Preciso retornar uma célula vazia de uma fórmula do Excel, mas parece que o Excel trata uma seqüência de caracteres vazia ou uma referência a uma célula vazia de maneira diferente de uma célula vazia verdadeira. Então, basicamente, eu preciso de algo como

=IF(some_condition,EMPTY(),some_value)

Eu tentei fazer coisas como

=IF(some_condition,"",some_value)

e

=IF(some_condition,,some_value)

e assumindo que B1 é uma célula vazia

=IF(some_condition,B1,some_value)

mas nenhuma dessas parece ser verdadeira célula vazia, suponho, porque é o resultado de uma fórmula. Existe alguma maneira de preencher uma célula se, e somente se, alguma condição for atendida e manter a célula realmente vazia?

EDIT: como recomendado, tentei retornar NA (), mas para meus propósitos isso também não funcionou. Existe uma maneira de fazer isso com o VB?

Edição: Estou criando uma planilha que extrai dados de outras planilhas formatadas para as demandas muito específicas de um aplicativo que importa os dados para um banco de dados. Eu não tenho acesso para alterar a implementação deste aplicativo e ele falhará se o valor for "" em vez de realmente vazio.

Bryan Ward
fonte
8
Você pode explicar por que a célula precisa ficar em branco? Dependendo do "espaço em branco" que você recebe, pode haver uma solução alternativa.
JT Grimes
3
A célula contém a fórmula, não é? Como pode estar vazio ou em branco então?
Sinan
8
Estou com um problema semelhante, estou desenhando um gráfico e não quero mostrar o valor 0 para itens em branco no gráfico. Se os registros estiverem com células vazias, ele será omitido no gráfico, mas qualquer um dos métodos listados nas "Respostas" abaixo resultará em 0s sendo mostrados no gráfico. :(
Cobusve
5
Para evitar que zeros sejam mostrados nos gráficos, use a função NA () em vez da string vazia / zero. Isso colocará # N / A na célula, que é ignorada pela rotina de gráficos.
Rob
5
A sugestão de Rob de usar # N / A tem um resultado diferente para uma célula vazia. # N / A resultará na rotina de gráficos interpolando sobre a célula, enquanto uma célula verdadeiramente vazia será tratada como uma lacuna na linha. Se você deseja que um GAP na linha, em vez de INTERPOLATION, preencha a lacuna, é necessário que a célula esteja VAZIA e não # N / A conforme a pergunta. Existem soluções abaixo que abordam isso conforme solicitado.
Sr. Roxo

Respostas:

50

Você terá que usar VBA, então. Você iterará nas células do seu intervalo, testará a condição e excluirá o conteúdo, se elas corresponderem.

Algo como:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next
JT Grimes
fonte
6
Eu acrescentaria a isso: se você sempre tiver um intervalo específico de células para o qual deseja limpar as células em branco, poderá dar um nome a esse intervalo e modificar a fórmula do Boofus alterando SomeRange para Range ("MyRange"). Para definir um nome para suas células, selecione as células, clique em Definir nome na guia Fórmulas da faixa de opções e digite "MyRange" no campo Nome. (E, claro, você poderia substituir MyRange com qualquer coisa que você quiser.)
devuxer
31
É intenso que não há constante nula no Excel.
Ted.strauss
5
Se você colocar a macro na função worksheet_calculate (), ela esvaziará automaticamente as células. Para detalhes específicos, você pode ver minha resposta abaixo.
Mr Purple
3
@ ted.strauss existeVbNullString
brettdj
5
@brettdj Isso é VBA, não Excel. Fazemos lobby por muito tempo para algum tipo de função como NULL () ou BLANK (), sem sucesso.
Jon Peltier
74

O Excel não tem nenhuma maneira de fazer isso.

O resultado de uma fórmula em uma célula no Excel deve ser um número, texto, lógico (booleano) ou erro. Não existe um tipo de valor de célula de fórmula "vazio" ou "em branco".

Uma prática que vi seguida é usar NA () e ISNA (), mas isso pode ou não resolver seu problema, pois há uma grande diferença na maneira como NA () é tratado por outras funções (SUM (NA ( )) é # N / A enquanto SUM (A1) é 0 se A1 estiver vazio).

Joe Erickson
fonte
19
O método NA () funciona 100% para gráficos configurados para mostrar células vazias como lacunas. Isso provavelmente não funcionará no seu caso em que você está exportando para um aplicativo que precisa da célula em branco, pois contém uma fórmula ...
Cobusve
4
Não há solução perfeita. NA () é uma boa opção. Outra é a string vazia de (dependendo) '' ou ""
Jason
Isso funciona com o objetivo de retornar células vazias dinamicamente em dados que serão plotados, para que você possa efetivamente usar a opção de ignorar células vazias como lacunas nos gráficos. No meu caso, eu estava tentando plotar 12 valores para representar uma progressão mensal, mas apenas até o mês anterior, com uma fórmula como esta: = IF (MÊS (HOJE ())> C2; $ C $ 11 + C7; NA ( ))
EKI
Isso funcionou para mim. Eu tenho um gráfico com os dados que adiciono todos os dias - um gráfico de burndown para scrum e eu queria ver a linha estender apenas para o dia atual. Isso me ajudou a fazer isso - usando NA () em uma declaração IF. Obrigado!
theJerm 03/02
12
NA () não resultará em uma lacuna. Todo mundo entende isso errado. O Excel não plotará um marcador se o valor for NA () ou # N / A, mas desenhará uma linha interpolada entre valores adjacentes que não # # N / A.
Jon Peltier
38

Sim, é possível.

É possível ter uma fórmula aniquiladora avaliando o trueblank se a condição for atendida. Passa no teste de ISBLANKfórmula.

insira a descrição da imagem aqui

Tudo o que você precisa é configurar um intervalo nomeado, por exemplo GetTrueBlank, e você poderá usar o seguinte padrão, como na sua pergunta:

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

Etapa 1. Coloque este código no módulo do VBA.

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

Passo 2. No Sheet1no A1celular adicionar intervalo nomeado GetTrueBlankcom a seguinte fórmula:

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

insira a descrição da imagem aqui

É isso aí. Não há mais etapas. Basta usar a fórmula auto-aniquiladora. Coloque na célula, digamos B2, a seguinte fórmula:

=IF(A2=0,GetTrueBlank,A2)

A fórmula acima em B2será avaliada como trueblank, se você digitar 0 A2.

Você pode baixar um arquivo de demonstração aqui .

No exemplo acima, a avaliação da fórmula para o trueblank resulta em uma célula vazia. Verificando resultado com ISBLANKresultados de fórmula positivamente em TRUE. Esta é a fórmula do hara-kiri. A fórmula desaparece da célula quando a condição é atendida. A meta é alcançada, embora você provavelmente deseje que a fórmula não desapareça.

Você pode modificar a fórmula para retornar o resultado na célula adjacente, para que a fórmula não se mate. Veja como obter resultado UDF na célula adjacente .

Encontrei exemplos de como obter um trueblank como resultado da fórmula revelado pelo The FrankensTeam aqui: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another- célula

Przemyslaw Remin
fonte
5
Essa é uma ótima solução alternativa, embora seja muito louco que não haja maneira de fazer isso sem esvaziar fisicamente a célula. A única desvantagem aqui seria que você teria que lembrar de arrastar a fórmula para baixo ao recalcular, embora eu ache que você possa definir um evento da pasta de trabalho para fazer isso.
precisa saber é o seguinte
Antes de tentar usar a solução alternativa doce, observe que ela pode sair pela culatra .
GSerg 26/10/19
@GSerg Você está apenas dizendo que pode fazer um loop com o VBA que será infinito e, dessa forma, o programa travará? O VBA pode ser uma navalha nas mãos de um macaco. E há um rumor de que um leão também rebateu Isso deve assustar mais :-)
Przemyslaw Remin
@PrzemyslawRemin Não, estou dizendo que várias coisas aleatórias podem acontecer, incluindo a falha do Excel .
GSerg 26/10/19
20

Talvez isso seja trapaça, mas funciona!

Eu também precisava de uma tabela que é a fonte de um gráfico e não queria que nenhuma célula em branco ou zero produzisse um ponto no gráfico. É verdade que você precisa definir a propriedade do gráfico, selecionar dados, células ocultas e vazias para "mostrar células vazias como lacunas" (clique no botão de opção). Esse é o primeiro passo.

Em seguida, nas células que podem resultar em um resultado que você não deseja plotar, coloque a fórmula em uma instrução SE com NA()resultados como=IF($A8>TODAY(),NA(), *formula to be plotted*)

Isso fornece o gráfico necessário sem pontos quando ocorre um valor de célula inválido. É claro que isso deixa todas as células com esse valor inválido para ler #N/A, e isso é confuso.

Para limpar isso, selecione a célula que pode conter o valor inválido e selecione formatação condicional - nova regra. Selecione 'formatar apenas células que contêm' e, na descrição da regra, selecione 'erros' na caixa suspensa. Em formato, selecione fonte - cor - branco (ou qualquer que seja a cor de fundo). Clique nos vários botões para sair e você verá que as células com dados inválidos ficam em branco (na verdade, elas contêm #N/Atexto branco sobre fundo branco, em branco). Em seguida, o gráfico vinculado também não exibe os pontos de valor inválidos.

Cavaleiro Gentil
fonte
6
NÃO!!! "mostrar células vazias como lacunas" Requer que as células estejam VAZIAS. Se eles contiverem # N / A em vez de NADA, a rotina de gráficos interpolará sobre as células # N / A em vez de deixá-las como lacunas na linha. Se quiser que o # células N / A para ser interpolada que é bom, mas, nesse caso, "mostrar células vazias como as lacunas" NÃO SE APLICA
Sr. Roxo
4
@GreenAsJade Esta não é a resposta real, pois não se encaixa nas necessidades do OP. Realmente deve haver uma pergunta separada para a questão dos gráficos.
ZX9 01/07/2015
10

Foi assim que fiz no conjunto de dados que estava usando. Parece complicado e estúpido, mas foi a única alternativa para aprender a usar a solução VB mencionada acima.

  1. Fiz uma "cópia" de todos os dados e colei os dados como "valores".
  2. Em seguida, destaquei os dados colados e fiz uma "substituição" ( Ctrl- H) das células vazias por alguma letra, escolhi, qpois não estava em nenhum lugar da minha planilha de dados.
  3. Finalmente, fiz outro "substituir" e substituí qpor nada.

Esse processo de três etapas transformou todas as células "vazias" em células "em branco". Tentei mesclar as etapas 2 e 3 simplesmente substituindo a célula em branco por uma célula em branco, mas isso não funcionou - tive que substituir o célula em branco por algum tipo de texto real e substitua esse texto por uma célula em branco.

jeramy
fonte
Embora isso possa ter funcionado no seu caso, eu precisava de uma solução que pudesse ser aplicada automaticamente. Por fim, acho que usei uma macro VB para apagar coisas que estavam determinadas como vazias. Essa macro foi executada antes de salvar o arquivo.
Bryan Ward
4
isso foi melhor para mim porque não preciso que seja automático, mas preciso que seja rápido. Essencialmente, isso significa que o Excel respeita um valor em branco adicionado via Localizar e substituir, o que é bom o suficiente para mim!
Rickcnagy
10

Se o objetivo é exibir uma célula como vazia quando na verdade tem o valor zero, em vez de usar uma fórmula que resulta em uma célula em branco ou vazia (como não há empty()função),

  • onde você deseja uma célula em branco, retorne um em 0vez de ""e THEN

  • defina o formato numérico para as células, assim, onde você terá que criar o que deseja para números positivos e negativos (os dois primeiros itens separados por ponto e vírgula). No meu caso, os números que eu tinha eram 0, 1, 2 ... e eu queria que 0 aparecesse vazio. (Eu nunca descobri para que o parâmetro de texto era usado, mas parecia necessário).

    0;0;"";"text"@
    
ET-X
fonte
4
Embora isso não torne a célula vazia (não há como uma fórmula resultar em uma célula vazia), ela parecerá vazia se o número for zero. No entanto, está incorreto. Deve ser 0; -0; "" (observe o sinal de menos) ou até 0; -0; sem aspas. O terceiro ponto e vírgula e a parte "text" @ não são necessários. O significado dos campos delimitados por ponto e vírgula é: como exibir números positivos, números negativos, zero e texto (o último formato deve conter um @). office.microsoft.com/en-gb/excel-help/...
cvoinescu
Você é um deus, senhor. Você me salvou do visual basic. Você governa
CommaToast
7

Tente avaliar a célula usando LEN. Se ele contiver uma fórmula LENretornará 0. Se ele contiver texto, ele retornará maior que 0.

Alex
fonte
Embora isso não ajude o solicitante original, isso não é realmente uma resposta ruim em muitos casos. Funciona bem nos casos em que você foi forçado a retornar "".
Technium
Ótima resposta, mas um pouco confusa. A célula que eu quero testar retorna um número ""ou está vazio. LEN(cell)>0retorna true se houver um número (incluindo zero e incluindo se o número é calculado por uma fórmula) e false se string vazia ou vazia.
Chris
7

Uau, um número incrível de pessoas interpretou mal a pergunta. É fácil fazer uma célula parecer vazia. O problema é que, se você precisar que a célula esteja vazia, as fórmulas do Excel não poderão retornar "nenhum valor", mas poderão retornar apenas um valor. Retornar um zero, um espaço ou até "" é um valor.

Portanto, você deve retornar um "valor mágico" e substituí-lo por nenhum valor usando pesquisar e substituir ou usando um script VBA. Embora você possa usar um espaço ou "", meu conselho seria usar um valor óbvio, como "NODATE" ou "NUMUMBER" ou "XXXXX", para que você possa ver facilmente onde isso ocorre - é muito difícil encontrar "" em uma planilha.

Laird Popkin
fonte
1
Sim, foi o que eu fiz. Eu usei uma função para gerar "#EMPTY" e depois inseri algum código na sub-rotina de eventos "Calcular planilha". Verifique minha resposta para a solução completa.
Sr. Roxo
7

Use em COUNTBLANK(B1)>0vez de ISBLANK(B1)dentro de sua IFdeclaração.

Ao contrário ISBLANK(), COUNTBLANK()considera ""como vazio e retorna 1.

Kevin Vuilleumier
fonte
Infelizmente, parece que o Excel rejeita = COUNTBLANK (IFNA (VLOOKUP (...), "")) como inválido (!)
NetMage 12/17/17
6

Tantas respostas que retornam um valor que PARECE vazio, mas na verdade não está vazio como célula, conforme solicitado ...

Conforme solicitado, se você realmente deseja uma fórmula que retorne uma célula vazia. É possível através do VBA. Então, aqui está o código para fazer exatamente isso. Comece escrevendo uma fórmula para retornar o erro # N / A onde quiser que as células estejam vazias. Em seguida, minha solução limpa automaticamente todas as células que contêm esse erro # N / D. Obviamente, você pode modificar o código para excluir automaticamente o conteúdo das células com base no que quiser.

Abra o "visualizador visual básico" (Alt + F11) Encontre a pasta de trabalho de interesse no explorador de projetos e clique duas vezes nela (ou clique com o botão direito do mouse e selecione o código de exibição). Isso abrirá a janela "ver código". Selecione "Pasta de trabalho" no menu suspenso (Geral) e "SheetCalculate" no menu suspenso (Declarações).

Cole o seguinte código (com base na resposta de JT Grimes) dentro da função 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

Salve seu arquivo como uma pasta de trabalho habilitada para macro

NB: Este processo é como um bisturi. Ele removerá todo o conteúdo de todas as células avaliadas para o erro # N / A, portanto, esteja ciente. Eles irão e você não poderá recuperá-los sem reinserir a fórmula que costumavam conter.

NB2: Obviamente, você precisa habilitar as macros quando abrir o arquivo, caso contrário ele não funcionará e os erros # N / D permanecerão sem exclusão.

Mr Purple
fonte
2
Se você precisar que seja totalmente automático / viva-voz / dinâmico e não deseje inserir novamente a fórmula para gerar o erro #NA, poderá reescrever o código da macro para duplicar a planilha em questão, deixando as células vazias no lugar de #NA e gerar gráficos da folha duplicada. (Adicionarei o código se este comentário for votado).
Mr Purple
4

Essa resposta não lida totalmente com o OP, mas houve várias vezes que tive um problema semelhante e procurei a resposta.

Se você pode recriar a fórmula ou os dados, se necessário (e, a partir de sua descrição, parece que pode), quando estiver pronto para executar a parte que requer que as células em branco estejam realmente vazias , poderá selecionar a região e execute a seguinte 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

isso eliminará o conteúdo de qualquer célula que esteja sendo exibida no momento ""ou tenha apenas uma fórmula

ElderDelp
fonte
4

O que eu usei foi um pequeno truque. Eu usei T (1), que retornou uma célula vazia. T é uma função no excel que retorna seu argumento, se for uma string e uma célula vazia. Então, o que você pode fazer é:

=IF(condition,T(1),value)
Ahmed Shahid
fonte
Cria uma cadeia de comprimento zero (ISBLANK (CELL) = FALSE).
Vinh #
Isso funciona e deve ser a resposta aceita. Muito obrigado, Ahmed. Meu caso de uso é um pouco diferente. Quero deixar as células vazias para que funções agregadas como AVERAGE (), MIN (), MAX (), DESVPAD (), COUNT () e MEDIAN () ignorem os valores.
Charlie Reitzel
2

Usei o seguinte trabalho para tornar meu excel mais limpo:

Quando você faz os cálculos, o erro "" fornecerá um erro, portanto você deseja tratá-lo como um número, então usei uma instrução if aninhada para retornar 0 em vez de "" e, se o resultado for 0, esta equação retornará ""

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

Dessa forma, a planilha do Excel ficará limpa ...

Big Z
fonte
1
Esta não é uma solução para o problema. A planilha parece limpa, mas o valor "" não está "vazio" no que diz respeito aos gráficos.
GreenAsJade
1

Se você estiver usando funções de pesquisa como HLOOKUP e VLOOKUP para trazer os dados para sua planilha, coloque a função entre colchetes e a função retornará uma célula vazia em vez de um {0}. Por exemplo,

Isso retornará um valor zero se a célula de pesquisa estiver vazia:

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

Isso retornará uma célula vazia se a célula de pesquisa estiver vazia:

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

Não sei se isso funciona com outras funções ... ainda não tentei. Estou usando o Excel 2007 para conseguir isso.

Editar

Para realmente obter um IF (A1 = "",,) para retornar como verdadeiro, é preciso haver duas pesquisas na mesma célula separadas por um &. A maneira mais fácil de contornar isso é fazer a segunda pesquisa em uma célula que esteja no final da linha e sempre estará vazia.

Matthew Dolman
fonte
1

Bem, até agora, este é o melhor que eu poderia inventar.

Ele usa a ISBLANKfunção para verificar se a célula está realmente vazia em uma IFinstrução. Se houver algo na célula, A1neste exemplo, mesmo um caractere ESPAÇO, a célula não existe EMPTYe o cálculo resultará. Isso impedirá que os erros de cálculo sejam exibidos até que você tenha números para trabalhar.

Se a célula estiver EMPTY, a célula de cálculo não exibirá os erros do cálculo. Se a célula estiver NOT EMPTY, os resultados do cálculo serão exibidos. Isso gerará um erro se seus dados forem ruins, os temidos #DIV/0!

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

Altere as referências e a fórmula da célula conforme necessário.

Stevis Geekus
fonte
1
O problema é que você precisa propagar essa verificação para todas as outras células usando esse resultado.
Guthrie
0

A resposta é positiva - você não pode usar a função = IF () e deixar a célula vazia. "Parece vazio" não é o mesmo que vazio. É uma pena que duas aspas consecutivas não produzam uma célula vazia sem apagar a fórmula.

Ken
fonte
Se você estiver preparado para usar o VBA, você pode. Conforme algumas outras respostas.
Mr Purple
-1

O Google me trouxe aqui com um problema muito semelhante, finalmente descobri uma solução que se adapta às minhas necessidades, isso pode ajudar outra pessoa também ...

Eu usei esta fórmula:

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