Reescrevendo uma fórmula de vários IFs aninhados que é muito profunda

17

Eu escrevi uma fórmula simples para verificar o valor de uma célula. Infelizmente, a fórmula é muito longa para minha versão do Excel 2007. O erro é:

Alemão: Die angegebene Formel kann nicht eingegeben werden, sie mehr als 64 Verschachtelungsebenen verwendet.

Inglês: a fórmula especificada não pode ser inserida porque usa mais níveis de aninhamento do que o permitido no formato de arquivo atual

Alguma idéia de como diminuir a fórmula?

"WENN" significa "SE" em alemão.

   =WENN(N7>=100000000;0;
    WENN(N7>=99000000;1;
    WENN(N7>=98000000;2;
    WENN(N7>=97000000;3;
    WENN(N7>=96000000;4;
    WENN(N7>=95000000;5;
    WENN(N7>=94000000;6;
    WENN(N7>=93000000;7;
    WENN(N7>=92000000;8;
    WENN(N7>=91000000;9;
    WENN(N7>=90000000;10;
    WENN(N7>=89000000;11;
    WENN(N7>=88000000;12;
    WENN(N7>=87000000;13;
    WENN(N7>=86000000;14;
    WENN(N7>=85000000;15;
    WENN(N7>=84000000;16;
    WENN(N7>=83000000;17;
    WENN(N7>=82000000;18;
    WENN(N7>=81000000;19;
    WENN(N7>=80000000;20;
    WENN(N7>=79000000;21;
    WENN(N7>=78000000;22;
    WENN(N7>=77000000;23;
    WENN(N7>=76000000;24;
    WENN(N7>=75000000;25;
    WENN(N7>=74000000;26;
    WENN(N7>=73000000;27;
    WENN(N7>=72000000;28;
    WENN(N7>=71000000;29;
    WENN(N7>=70000000;30;
    WENN(N7>=69000000;31;
    WENN(N7>=68000000;32;
    WENN(N7>=67000000;33;
    WENN(N7>=66000000;34;
    WENN(N7>=65000000;35;
    WENN(N7>=64000000;36;
    WENN(N7>=63000000;37;
    WENN(N7>=62000000;38;
    WENN(N7>=61000000;39;
    WENN(N7>=60000000;40;
    WENN(N7>=59000000;41;
    WENN(N7>=58000000;42;
    WENN(N7>=57000000;43;
    WENN(N7>=56000000;44;
    WENN(N7>=55000000;45;
    WENN(N7>=54000000;46;
    WENN(N7>=53000000;47;
    WENN(N7>=52000000;48;
    WENN(N7>=51000000;49;
    WENN(N7>=50000000;50;
    WENN(N7>=49000000;51;
    WENN(N7>=48000000;52;
    WENN(N7>=47000000;53;
    WENN(N7>=46000000;54;
    WENN(N7>=45000000;55;
    WENN(N7>=44000000;56;
    WENN(N7>=43000000;57;
    WENN(N7>=42000000;58;
    WENN(N7>=41000000;59;
    WENN(N7>=40000000;60;
    WENN(N7>=39000000;61;
    WENN(N7>=38000000;62;
    WENN(N7>=37000000;63;
    WENN(N7>=36000000;64;
    WENN(N7>=35000000;65;
    WENN(N7>=34000000;66;
    WENN(N7>=33000000;67;
    WENN(N7>=32000000;68;
    WENN(N7>=31000000;69;
    WENN(N7>=30000000;70;
    WENN(N7>=29000000;71;
    WENN(N7>=28000000;72;
    WENN(N7>=27000000;73;
    WENN(N7>=26000000;74;
    WENN(N7>=25000000;75;
    WENN(N7>=24000000;76;
    WENN(N7>=23000000;77;
    WENN(N7>=22000000;78;
    WENN(N7>=21000000;79;
    WENN(N7>=20000000;80;
    WENN(N7>=19000000;81;
    WENN(N7>=18000000;82;
    WENN(N7>=17000000;83;
    WENN(N7>=16000000;84;
    WENN(N7>=15000000;85;
    WENN(N7>=14000000;86;
    WENN(N7>=13000000;87;
    WENN(N7>=12000000;88;
    WENN(N7>=11000000;89;
    WENN(N7>=10000000;90;
    WENN(N7>=9000000;91;
    WENN(N7>=8000000;92;
    WENN(N7>=7000000;93;
    WENN(N7>=6000000;94;
    WENN(N7>=5000000;95;
    WENN(N7>=4000000;96;
    WENN(N7>=3000000;97;
    WENN(N7>=2000000;98;
    WENN(N7>=1000000;99;
    WENN(N7>=500000;100;0)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
evavienna
fonte
13
Sua pergunta seria muito mais legível se você tivesse estruturado a fórmula (há uma edição pendente em relação a isso) - e, IMHO mais importante, se você descrever com palavras o que deseja realizar. Talvez tenhamos um problema xy aqui.
mpy
1
última linha me faz lembrar de uma piada
kmdreko

Respostas:

65

Eu acho que a fórmula é equivalente a:

=IF(OR(N7>=100000000,N7<500000),0,100-INT(N7/1000000))

Agora que Kevin reformatou a fórmula, posso ver claramente que a fórmula está correta em todos os casos.

Graças ao comentário do questionador, posso afirmar que a fórmula alemã equivalente é:

=WENN(ODER(N7>=100000000;N7<500000);0;100-GANZZAHL(N7/1000000))
AFH
fonte
Works awesome !!! thx - usei de.excel-translator.de/translator para traduzir a fórmula. Em alemão, parece=WENN(ODER(N7>=100000000;N7<500000);0;100-GANZZAHL(N7/1000000))
evavienna
Use o VBA e crie uma função definida pelo usuário.
precisa saber é o seguinte
Um pouco triste que isso pule a questão geral e só resolva esse exemplo em particular.
pipe
A fórmula parece correta, mas a resposta real é que isso deve ser feito em uma tabela de pesquisa, como diz tevlyn. Tentar fazer isso com uma instrução If é uma prática ruim.
WhatEvil
5
@pipe, @WhatEvil - O interlocutor queria reduzir o tamanho de sua IFdeclaração e, devido à estrutura de seus dados, dei a (óbvia a um matemático) uma resposta óbvia e discordo completamente de que, de alguma forma, é uma prática incorreta ou ruim . Obviamente, uma tabela de consulta seria necessária para uma função menos linear, mas é um exagero para esses dados e dificilmente pode ser considerada ótima: um cálculo direto é sempre melhor do que uma consulta quando a última pode ser evitada.
AFH
21

Coloque todos os seus valores limite em um intervalo em uma planilha e use uma fórmula de pesquisa com uma correspondência aproximada.

Classifique seus dados crescente por valor da coluna de pesquisa. A coluna de pesquisa deve ser a primeira coluna da tabela de pesquisa se você deseja usar o VLookup. Se você estiver satisfeito em usar um combo Índice / Correspondência, a coluna de pesquisa pode estar em qualquer lugar da tabela.

A captura de tela abaixo tem uma tabela de pesquisa de exemplo nas células A1 a B6. A tabela é classificada em ordem crescente pelos valores na coluna A. Isso é importante . Se a tabela não for classificada em ordem crescente, a fórmula a seguir não funcionará.

O valor na célula E2 não é uma correspondência exata para nenhum dos valores da coluna A. A fórmula Vlookup encontrará o próximo menor valor (ou seja, 50) e retornará o resultado da coluna 2 da tabela de pesquisa para essa correspondência aproximada. Observe que, para uma correspondência aproximada, o quarto parâmetro do VLookup deve ser "TRUE" ou 1.

Aqui está a fórmula:

=VLOOKUP(E2,$A$1:$B$6,2,TRUE)

E a captura de tela:

insira a descrição da imagem aqui

O nome alemão para Vlookup é SVerweis (acho), e você precisa substituir vírgulas por ponto e vírgula no alemão Excel. Não sei o que é "VERDADEIRO" no Excel alemão, mas você pode usar 1 para VERDADEIRO e 0 para FALSO.

=SVerweis(E2;$A$1:$B$6;2;1)

Hoffentlich klappt's !!

teylyn
fonte
Ich hoffe auch! Deixe-me ler isso - parece muito trabalho para mim. thx - i que você saiba se im capaz de fazê-lo funcionar :)
evavienna
Preencher tabela de números não é muito trabalhoso se os números estiverem espaçados uniformemente. Digite os dois primeiros números, selecione-os e arraste a alça de preenchimento.
Teylyn # 1/18
TRUEé WAHRe FALSEé FALSCH.
IQV
E por que um voto negativo?
precisa saber é o seguinte