Logo Hardware.com.br
Sr. Fórum
Sr. Fórum Zumbi Registrado
1.7K Mensagens 696 Curtidas

[Resolvido] Função "SES", a ordem das variáveis importa?

#1 Por Sr. Fórum 03/09/2022 - 16:03
Olá, pessoal.
Montei uma fórmula SES onde duas regras se sobrepõe. Uma das regras diz que o valor considerado deve ser abaixo de 10 e a outra fala que se o valor for 0, preenche outra condição. Na verdade, o 0 preenche as duas condições, mas percebi que se colocar a regra do "zero" antes da "menor que 10", a regra funciona da forma correta. Coincidência ou o Excel prioriza o que vem antes na fórmula 'SES'?

=SES(G2=0;0;G2<10;(D2-0,005);G2>10;(D2+0,005);1020;D2)
EdsonBR
EdsonBR Veterano Registrado
273 Mensagens 280 Curtidas
#2 Por EdsonBR
03/09/2022 - 22:05
Sr. Fórum disse:
...Coincidência ou o Excel prioriza o que vem antes na fórmula 'SES'?


Sim, o Excel prioriza o que vem antes.
Como os testes lógicos têm a mesma ordem de precedência dentro dessa função, o Excel avaliará a fórmula da esquerda para a direita e a primeira condição que for satisfeita será usada e mesmo que outras possam resultar verdadeiras serão desprezadas.
Essa ordem de precedência vale para quaisquer expressões em fórmulas a menos que sejam alteradas pelo adequado posicionamento/aninhamento de parênteses.
https://support.microsoft.com/pt-br/office/a-ordem-em-que-o-excel-efetua-operações-em-fórmulas-28eaf0d7-7058-4eff-a8ea-0a835fafadb8#:~:text=Precedência%20do%20operador%20em%20fórmulas%20do%20Excel&text=Se%20uma%20fórmula%20contiver%20operadores,da%20esquerda%20para%20a%20direita.

Sr. Fórum disse:

=SES(...;1020;D2)


Não entendi o que essa condição quer dizer, @Sr. Fórum ?
Embora essa condição "funcione" (não retorna erro) ela sempre dará verdadeiro pois no Excel os booleanos sempre são maiores que os números, mas a expressão parece não fazer sentido.
Seria G2 estar entre 10 e 20? Se sim, vc poderia usar a função E nesse ponto: E(G2>10;G2<20)
Mesmo assim essa condição não chegaria a ser atendida pq a anterior, que está mais à esquerda (G2>10) teria precedência e seria usada.
EdsonBR
EdsonBR Veterano Registrado
273 Mensagens 280 Curtidas
#4 Por EdsonBR
05/09/2022 - 13:27
Sr. Fórum disse:
..., mas seria basicamente o seguinte:
abaixo de 100
acima de 200
entre 100 e 200


Nesse caso, vc poderia usar, por exemplo, algo como:
=SES(G2<100;"Menor que 100";
G2>200;"Maior que 200";
VERDADEIRO;"Entre 100 (inclusive) e 200 (inclusive)&quot


Ou usar a combinação com a função E() como dito anteriormente.

Sr. Fórum disse:
...Nos testes que fiz, com a fórmula 1020 funcionou.


Muito estranho isso... Não poderia. Reafirmo que esse teste condicional retornará sempre VERDADEIRO, independente do valor inserido em G2. Vc pode testar isso inserindo em uma célula qualquer a expressão:

=10<G2>20


Agora alterando G2 para qualquer número maior que 10, menor que 10, igual a 10, maior, menor ou igual a 20, números negativos, zero, célula vazia, sempre vai retornar VERDADEIRO.
EdsonBR
EdsonBR Veterano Registrado
273 Mensagens 280 Curtidas
#6 Por EdsonBR
13/09/2022 - 00:10
Ah @Sr. Fórum , agora ficou claro o motivo de sua expressão E$2D$2 aparentar estar "funcionando": é que é a última condição e como as duas anteriores falharam então é a única possível, ou seja, se o valor testado não é zero, não é menor que o primeiro e não é maior que o último, então só sobra esse último que casará sempre pois retorna VERDADEIRO sob qualquer hipótese.

Mas dá pra perceber o erro na estrutura: e se o valor fosse exatamente igual a E2 ou a D2? a condição não poderia atender pois não está contemplado o =, apenas o < e o > e mesmo assim está atendendo.

A fórmula com os ajustes que falei anteriormente poderia ser:
=SES(A2=0;0;    B2<D2;(A2-0,005);    B2>E2;(A2+0,005);    E(B2>D2;B2<E2);A2)


Veja entretanto que nessa fórmula não está especificado ainda o que acontece se o valor B2 for exatamente igual a D2 ou a E2 pois não está claro em qual categoria entra. Caso aconteça, retornará erro #N/D por enquanto.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal