Como reformular a fórmula do Excel com muitos níveis de aninhamento

0

Eu preciso usar a seguinte fórmula no Excel para escolher uma fórmula usada em uma planilha diferente com base nos valores dos menus suspensos nas células D2 e D3 . O único problema é que a fórmula contém mais de 7 instruções IF aninhadas, o que o Excel me diz que é inválido.

The specified formula cannot be entered because it uses more levels of nesting than are allowed in the current file format.

Como posso quebrar essa fórmula para conseguir o mesmo resultado?

=IF(D2=1,Dropdowns!C8,IF(AND(D2=2,D3="I"),Dropdowns!C9,IF(AND(D2=2,D3="II"),Dropdowns!C10,IF(AND(D2=2,D3="IIIa,b"),Dropdowns!C11,IF(AND(D2=3,D3="I"),Dropdowns!C12, IF(AND(D2=3,D3="II"),Dropdowns!C13, if(and(D2=3,D3="IIIa"),Dropdowns!C14, if(and(D2=3,D3="IIIb"),Dropdowns!C15, if(and(D2=4,D3="I"),Dropdowns!C16, if(and(D2=4,D3="II"),Dropdowns!C17, if(and(D2=4,D3="IIIa,b"),Dropdowns!C18, "error")))))))

    
por Matt Jenkins 01.10.2014 / 20:53

1 resposta

1

Alternativa para muitos IFs aninhados

Quando você precisa de uma longa série de IFs aninhados, há outra abordagem que não o restringe ao limite IF aninhado. Ele usa uma abordagem de "seleção", que também pode ser mais fácil de criar porque é visualmente mais direta.

IFs aninhados avaliam as condições consecutivamente até encontrar uma que seja verdadeira. A lógica e os valores de saída são uma série intermisturada. A abordagem alternativa avalia todas as condições em uma etapa e usa o resultado para selecionar o valor correto em uma lista.

Ele combina duas técnicas, a função CHOOSE e uma expressão booleana. No Excel 2003, você poderia escolher entre até 29 valores. O Excel 2007 e versões posteriores permitem até 254 seleções, sem usar nenhuma instrução IF.

A função ESCOLHER

Você tem uma fórmula longa para não reproduzir a coisa toda, mas aqui está a abordagem (o "índice" de espaço reservado é explicado na próxima parte):

=CHOOSE(<index>,"Error",Dropdowns!C8,Dropdowns!C9,Dropdowns!C10, ...)

Toda a sua lista de valores do resultado da instrução IF é incluída. A maneira como isso funciona é o "índice" é calculado a partir de todas as condições que fazem parte da sua cadeia IF aninhada. O resultado será o número de sequência do valor na lista CHOOSE.

O índice

O índice usa aritmética booleana (cálculos baseados em valores 0/1 de condições True / False). Você constrói o índice como uma expressão como esta:

1 + condition1 * 1 + condition2 * 2 + condition3 * 3 + ...

O primeiro 1 será explicado em um minuto. O resto é todas as suas condições de teste IF na ordem associada para corresponder à lista de resultados. Cada teste é avaliado como 1 ou 0, que é multiplicado pelo número de índice associado (1, 2, 3, ... seguindo cada condição). Como apenas um desses testes será verdadeiro, isso determina o valor do índice (uma soma de zeros para todas as condições falsas mais um valor de índice para o True).

Substituir as condições de teste do seu exemplo IF aninhado ficaria assim:

1 + (D2=1)*1 + AND(D2=2,D3="I")*2 + AND(D2=2,D3="II")*3 + ...

A expressão inteira substitui o espaço reservado <index> na fórmula mostrada no cabeçalho CHOOSE Function. A função Escolher, em seguida, seleciona o valor de destino da lista com base no índice.

Sua condição de erro é se nenhum dos testes for verdadeiro, o que resultaria em uma soma de zero. O índice é o número da posição do valor na lista, que começa com 1. Adicionando 1 ao cálculo do índice (mostrado como o primeiro termo), faz com que a condição de erro seja avaliada como 1 e aumente todos os outros resultados em 1. Assim, o primeiro resultado na lista é sua mensagem de erro.

    
por 01.10.2014 / 22:46