Pergunta

Preciso retornar uma célula vazia de uma fórmula do Excel, mas parece que o Excel trata uma corda vazia ou uma referência a uma célula vazia de maneira diferente de uma célula vazia verdadeira. Então, essencialmente 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 nenhum deles parece ser verdadeira células vazias, acho que elas são 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 devolver Na (), mas, para meus propósitos, isso também não funcionou. Existe uma maneira de fazer isso com o VB?

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

Foi útil?

Solução

Você vai ter que usar VBA, então. Você itera sobre as células do seu alcance, testará a condição e excluirá o conteúdo se eles corresponderem.

Algo como:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next

Outras dicas

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 de "vazio" ou "em branco".

Uma prática que eu vi seguida é usar Na () e ISNA (), mas isso pode ou não resolver seu problema, pois há uma grande parte diferente na maneira como Na () é tratada por outras funções (soma (Na ( )) é #n/um tempo soma (a1) é 0 se A1 estiver vazio).

Sim, é possível.

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

enter image description here

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

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

Passo 1. Coloque este código no módulo de VBA.

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

Passo 2. Dentro Sheet1 dentro A1 intervalo de células adicionadas GetTrueBlank com a seguinte fórmula:

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

enter image description here

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

=IF(A2=0,GetTrueBlank,A2)

A fórmula acima em B2 vai avaliar o TrueBlank, se você digitar 0 em A2.

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

No exemplo acima, avaliando a fórmula em trueblank resulta em uma célula vazia. Verificação do resultado ISBLANK Resultados de fórmula positivamente no verdadeiro. Esta é a fórmula de Hara-kiri. A fórmula desaparece da célula quando a condição é atendida. O objetivo é alcançado, embora você provavelmente possa querer que a fórmula não desapareça.

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

Encontrei os exemplos de obter um trueblank como resultado de fórmula revelado pelo Frankensteam aqui:https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-celell

Talvez isso esteja trapaceando, mas funciona!

Eu também precisava de uma tabela que fosse 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 Graph, selecionar dados, células ocultas e vazias para "mostrar células vazias como lacunas" (clique no botão de rádio). Esse é o primeiro passo.

Então, nas células que podem acabar com o resultado de que você não deseja plotar, coloque a fórmula em uma declaração se com um NA() Resultados como =IF($A8>TODAY(),NA(), *formula to be plotted*)

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

Para limpar isso, selecione a célula que pode conter o valor inválido e selecione formatação condicional - nova regra. Selecione 'Formato apenas células que contêm' e, na descrição da regra, selecione 'Erros' na caixa suspensa. Em seguida, em Formato, selecione Fonte - Cor - Branco (ou qualquer que seja a cor de fundo). Clique nos vários botões para sair e você deve ver que as células com dados inválidas parecem em branco (eles realmente contêm #N/A Mas o texto branco em um fundo branco parece em branco.) Então o gráfico vinculado também não exibe os pontos de valor inválidos.

Foi assim que fiz isso pelo 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. Então eu destaquei os dados colados e fiz um "substituir" (Ctrl-H) As células vazias com alguma carta, eu escolhi q já que não estava em nenhum lugar na minha folha de dados.
  3. Finalmente, fiz outro "substituir" e substituí q com nada.

Esse processo de três etapas transformou todas as células "vazias" em células "em branco". Célula em branco com algum tipo de texto real e substitua esse texto por uma célula em branco.

Se o objetivo é poder exibir uma célula tão vazia quando ela tem o valor zero, então, em vez de usar uma fórmula que resulta em uma célula em branco ou vazia (já que não há não empty() função) em vez disso, em vez disso

  • onde você quer uma célula em branco, retorne um 0 ao invés de "" e depois

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

    0;0;"";"text"@
    

Tente avaliar a célula usando LEN. Se contém uma fórmula LEN retornará 0. Se contiver texto, retornará mais do que 0.

Uau, um número incrível de pessoas interpretam mal a pergunta. É fácil fazer uma célula olhar vazio. O problema é que, se você precisar que a célula esteja vazia, as fórmulas do Excel não podem retornar "nenhum valor", mas só poderá retornar 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 pesquisa e substituição ou usando um script VBA. Embora você possa usar um espaço ou "", meu conselho seria usar um valor óbvio, como "Node" ou "Nonumber" ou "XXXXX", para que você possa ver facilmente onde ocorre - é muito difícil encontrar "" em uma planilha.

Tantas respostas que retornam um valor que parece vazio, mas na verdade não é uma célula vazia 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/a. É claro que você pode modificar o código para excluir automaticamente o conteúdo das células com base em tudo o que quiser.

Abra o "Visual Basic Viewer" (ALT + F11) Encontre a pasta de trabalho de interesse no Project Explorer e clique duas vezes nele (ou clique com o botão direito do mouse e selecione Exibir código). Isso abrirá a janela "View Code". 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 manual de trabalho_SheetCalCulate Função

    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: Esse processo é como um bisturi. Ele removerá todo o conteúdo de qualquer células que avaliem o erro #n/a, então esteja ciente. Eles irão e você não pode recuperá -los sem entrar na fórmula que costumavam conter.

NB2: Obviamente, você precisa habilitar macros quando abrir o arquivo, ele não funcionará e os erros #n/a permanecerão não selecionados

Usar COUNTBLANK(B1)>0 ao invés de ISBLANK(B1) dentro do seu IF declaração.

Diferente ISBLANK(), COUNTBLANK() considera "" como vazio e retorna 1.

Essa resposta não lida completamente 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 da sua descrição, parece que você pode), então quando você estiver pronto para executar a parte que exige que as células em branco sejam realmente vazio, então você pode selecionar a região e executar 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 vai acabar com o conteúdo de qualquer célula que esteja aparecendo atualmente "" ou tem apenas uma fórmula

Eu usei o seguinte trabalho para fazer meu Excel parecer mais limpo:

Quando você fizer quaisquer cálculos, o "" dará um erro, então você deseja tratá -lo como um número, então eu usei uma declaração aninhada para retornar 0 istead de "", e então se o resultado for 0, essa 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 parecerá limpa ...

Se você estiver usando funções de pesquisa como Hlookup e Vlookup para trazer os dados para a sua planilha, coloque a função dentro dos 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 ... não tentei. Estou usando o Excel 2007 para conseguir isso.

Editar

Para realmente obter um if (a1 = "",,) voltar como verdadeiro, é preciso haver duas pesquisas na mesma célula separada por AN &. A maneira mais fácil de contornar isso é fazer a segunda pesquisa uma célula que está no final da linha e sempre estará vazia.

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

Ele usa o ISBLANK função para verificar se a célula está realmente vazia dentro de um IF declaração. Se houver alguma coisa na célula, A1 Neste exemplo, mesmo um personagem espacial, Então a célula não é EMPTY e 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 for EMPTY então a célula de cálculo não exibirá os erros do cálculo. Se a célula estiver NOT EMPTY Em seguida, os resultados do cálculo serão exibidos. Isso causará um erro se seus dados forem ruins, o temido #DIV/0!

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

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

A resposta é positivamente - 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 de volta para trás não produzam uma célula vazia sem acabar com a fórmula.

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

=IF(condition,T(1),value)

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

Eu usei esta fórmula:

=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top