Procurando solução para encurtar uma fórmula IF


9

Eu tenho uma fórmula longa com a seguinte estrutura:

=IF(!X!<>0,!X!+A1,"")

onde ! X! é uma fórmula muito longa.

Existe alguma solução para evitar repetir o! X! duas vezes? Preciso disso por dois motivos:

  1. Para tornar a fórmula legível para o usuário da planilha
  2. Para reduzir o tempo do processo

Agradeço qualquer ajuda.

Obrigado, Dio


11
se você quiser To reduce the process time, obviamente, precisará armazenar o resultado em algum lugar; caso contrário, o Excel precisará recalcular o valor novamente quando a condição corresponder. Divisão também é uma operação muito custosa
phuclv

2
Apenas curioso também, você "jogou" a fórmula longa o máximo que puder? Para torná-lo mais curto, talvez adicione intervalos nomeados?
BruceWayne

Para tornar uma fórmula longa mais legível, separe os argumentos em diferentes linhas usando alt + return. Uma desvantagem é que, a menos que o usuário expanda a altura da barra de fórmulas, a fórmula parecer incompleta.
Brad Smith

Respostas:


12

Outra abordagem é usar inversão dupla :

=IFERROR(1/(1/really_long_formula)+A1,"")

Se a forma realmente_longa for avaliada como 0 , você obterá uma divisão por zero e a IFERROR()capturará!

Observe que a maneira usual (e melhor) de lidar com esse requisito é com uma célula auxiliar.


7
este pode sofrer de precisão perdidos devido a-ponto flutuante divisão
phuclv

3
@ LưuVĩnhPhúc Você está completamente correto! a abordagem AFH é a melhor abordagem!
Gary Student

Esse é um truque legal e sujo. Eu me absteria de usá-lo, mas, como último recurso, quem sabe?
André Chalella 25/11

3
NOTA: é verdade que pode haver alguma perda de precisão, mas isso raramente seria um problema relevante. Testei 1/1/xcom 100.000 números aleatórios várias vezes no Excel e apenas 1,4% das vezes houve um erro de arredondamento. O erro relativo máximo que eu já encontrei foi 1.6e-16, que é, efetivamente, zero. Além disso, curiosamente, os números inteiros nunca exibiram erros de arredondamento (testaram vários intervalos de 0 a 1e14). Portanto, essa resposta pode ser desaprovada do ponto de vista da pureza / limpeza, mas não do ponto de vista prático do cálculo.
André Chalella 25/11

11
Acho a solução de Gary como a melhor. Primeiro porque é limpo (como mencionado também por André) e legível por outros usuários. Segundo, porque satisfaz minha necessidade. Não tenho números inteiros complicados ou longos. Espero que os usuários, que escolherem essa abordagem, leiam os comentários a serem tomados em consideração sobre os prós e os contras desta solução.
Dio

23

A resposta óbvia é colocar a fórmula em uma célula de trabalho, longe da planilha principal. Por exemplo, se você usar H1, defina-o como:

=!X!

Sua fórmula se torna:

=IF(H1<>0,H1+A1,"")

Isso é típico do que alguém faria em qualquer outra linguagem de programação.


Não tenho possibilidade de adicionar uma coluna de ajuda. Obrigado mesmo assim.
Dio

2
@ Dio, se não deveria ser visto, simplesmente oculte a coluna. Você pode até mesmo o nome da coluna / intervalo para torná-lo mais fácil de ler
phuclv

4
@Dio - OK. Sua resposta aceita é bastante inteligente, mas lembre-se de que, devido ao arredondamento, você pode perder a precisão ( 1/(1/x)nem sempre é exatamente a mesma que x), especialmente se estiver lidando com dados inteiros. Também não é aplicável de maneira mais geral (por exemplo, verificação de menos de zero). (Comentário cruzado com @ LưuVĩnhPhúc está sob resposta aceita.)
AFH

Obrigado por seus conselhos e comentários. Deixarei a pergunta ainda em aberto para ver se ainda há novas sugestões.
Dio

2
Seria útil ver a fórmula longa. Além de uma célula de trabalho, é possível definir um nome em uma planilha que contém uma fórmula
datatoo

3

Você realmente precisa que o resultado esteja ""no caso falso? Se você só precisa do celular para olhar em branco (por exemplo, você não vai usar algo como =ISNUMBER()sobre isso mais tarde), você pode usar a formatação condicional para ocultar o conteúdo do falso caso.

O formato condicional que você aplicará à célula para que ela não exiba nada é o formato personalizado "", como este (está em português, mas você entendeu):

formato personalizado para células em branco

A fórmula na célula será, como esperado, simplesmente =!X!+A1.

A fórmula de formatação condicional poderia ser =!X!=0, mas isso forçaria o recálculo de !X!, o que você não deseja (seu "Ponto 2"). É melhor aproveitar a própria célula usando =B1=A1(supondo que nossa célula seja B1 ) - isso implicaria !X! = 0.

Mesmo que você precise que o conteúdo da célula seja realmente "", geralmente pequenas alterações podem ser feitas na planilha para que essa abordagem possa ser usada. Se for esse o caso, deixe um comentário descrevendo a situação.


1

Não tenho possibilidade de adicionar uma coluna de ajuda. Obrigado mesmo assim.

Se você não pode adicionar uma coluna auxiliar , por que não adicionar uma planilha inteira? Existem várias vantagens para isso:

  • Sua célula auxiliar não ocupa espaço que de outra forma poderia ser usado, porque está em uma planilha separada.
  • Você pode nomear a célula e tratá-la pelo nome, por exemplo,=IF(X<>0,X+A1,"")
  • Se você precisar fazer isso em mais de uma célula, poderá:
    1. Renomeie a planilha auxiliar "auxiliar"
    2. Coloque a equação auxiliar na mesma célula que a equação principal (vamos chamá-lo D5.
    3. Endereça a célula como helper!D5na planilha principal.
  • Você pode ocultar a folha auxiliar, se necessário.
  • É mais rápido do que avaliar duas vezes.
  • Não perde precisão.

As desvantagens que posso ver são:

  • Você precisa referenciar células não nomeadas na planilha principal como em sheetname!D5vez de apenas como D5.
  • Agora a fórmula está dividida em duas partes, em vez de uma.
  • Proliferação de planilha.

Pesando as vantagens e desvantagens, acho que, para muitos casos de uso, essa é uma boa solução. Existem situações em que não é ideal, embora eu não possa pensar em nenhuma no momento.


11
Ótima resposta. As desvantagens que vejo são: 1. Não ajuda muito em simplificar o cálculo para o usuário, pois agora a grande fórmula está oculta. 2. Muitas pastas de trabalho já estão cheias de folhas. Mesmo que você o oculte, talvez seja necessário passar por várias folhas ocultas para exibi-lo. Fora isso, é uma boa solução.
André Chalella 25/11

@ AndréNeves Obrigado por isso! Esse primeiro ocorreu-me, mas eu esqueci quando estava escrevendo a seção de desvantagens .
wizzwizz4

1

uma opção ainda não sugerida é criar uma função definida pelo usuário. Você precisaria ativar a guia Desenvolvedor na barra de menus (google it) e criar um módulo.

 public function udf_myCalc(ValueToAdd as double)
    dim myvar as double
    dim udf_myCalc as double
    myvar = .. put the logic of !X! in here

    if myvar<>0 then 
        udf_myCalc = myvar + ValueToAdd
    else
        udf_myCalc = ValueToAdd
    end if
 end function

Na barra de fórmulas, você faria

=udf_myCalc(A1)

NOTA: Agora, esse arquivo se torna um arquivo .xlsx (com macros) e pode precisar de permissões adicionais em uma rede corporativa, pois as macros podem ser usadas para fins maliciosos e alguns filtros de email os bloquearão. As funções não estão documentadas, portanto, você precisará fornecer notas sobre o que suas funções estão fazendo e acho útil chamar todas as minhas funções udf_xxxxx para que fique claro que ela não é uma função interna

Existem outros GOTCHAs com UDFs também. Consulte este link para obter algumas boas dicas http://www.decisionmodels.com/calcsecretsj.htm

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.