Dúvidas sobre cálculos, funções simples e aninhadas, fórmulas matriciais, etc.
Por Leonardo1234 14 Set 2020 às 12:49
Membro Novato
Mensagens: 90
Reputação: 2
#58808
Olá Pessoal,

Eu tenho uma planilha onde eu inseri regras com formulas matriciais dentro de uma validação de dados. Meu problema é que, não sei por qual motivo, as regras param de funcionar. Eu já reparei que quando isso acontece, e eu entro de novo na caixa de validação de dados e simplesmente dou um ok, sem nem mexer na formula, a validação volta a funcionar, porém por algum motivo depois de testadas algumas vezes, as regras passam a não funcionar novamente. Na coluna U, eu destaquei em amarelo, duas células que possuem as mesmas regras, na primeira ela está funcionando, e na segunda não. Lembrando que na primeira só está funcionando momentaneamente, o mesmo problema também acontece com ela. Agradeço se alguém conseguir me ajudar. Obrigado.
Apenas usuários registrados podem ver ou baixar anexos.
Por babdallas 14 Set 2020 às 13:44
Excel Expert
Mensagens: 3184
Reputação: 1379
#58811
A sua validação não está correta, pois você usou uma comparação matricial dentro da função E.
Outra coisa, use os objetos Tabela para deixar os intervalor dinâmicos. Eu fiz isso e exclui todas formatações desnecessárias e validações de dados até a última linha da planilha.
Criei um nome chamado Validarkm com a seguinte fórmula:

Código: Selecionar todos=(SOMARPRODUTO((Base!U2<>Tabela1[Km na Origem])*(Base!U2<>Tabela1[[Km no Destino ]]))=0)*(Base!U2>=MÍNIMOA(SE(Tabela1[Placa]=Base!S2;SE(Tabela1[Km na Origem]=Base!V2;SE(Tabela1[[Km no Destino ]]=Base!W2;Tabela1[Km na Origem])))))*(Base!U2<=MÁXIMOA(SE(Tabela1[Placa]=Base!S2;SE(Tabela1[Km na Origem]=Base!V2;SE(Tabela1[[Km no Destino ]]=Base!W2;Tabela1[[Km no Destino ]])))))


Veja se atende. Se não for o correto, posso tentar alterar baseado nas regras que você passar.
Apenas usuários registrados podem ver ou baixar anexos.
Por Leonardo1234 14 Set 2020 às 15:03
Membro Novato
Mensagens: 90
Reputação: 2
#58814
OLá Babdallas, agradeço a ajuda, mas aparentemente, agora está funcionando no modo antigo. Eu notei que havia um erro na formula e agora está corrigido. Ela está funcionando mesmo sendo matricial e usando o E, ficou assim: E(U2<>$F$2:$F$100000;U2<>$I$2:$I$100000;U2>=MÍNIMOA(SE($C$2:$C$100000=S2;$F$2:$F$100000));U2<=MÁXIMOA(SE($C$2:$C$100000=S2;$I$2:$I$100000))). Mesmo assim agradeço a ajuda. Obrigado.
Apenas usuários registrados podem ver ou baixar anexos.
Por babdallas 14 Set 2020 às 15:14
Excel Expert
Mensagens: 3184
Reputação: 1379
#58815
Veja esta comparação:

Código: Selecionar todosU2<>$F$2:$F$100000


Nesta você está comparando a célula U2 com a coluna F, da linha 2 até a 100.000. Para a performance da sua planilha, não é recomendável você comparar uma célula com muitas outras que estarão vazias. Para isos serve o objeto Tabela, para que somente tenha o limite onde possui dados. Outra forma seria montar intervalos dinâmicos no Gerenciador de Nomes para lidar com isso.
Segundo ponto é que esta comparação está gerando um monte de VERDADEIRO e FALSO. Porém, você precisa somar os verdadeiros e falsos para verificar se todos são diferentes da coluna F. A função E não faz isso para você. Neste caso você pode usar a SOMARPRODUTO ou CONT.SE para agregar este valor, verificando se todas as células da coluna F são diferentes de U2. Do jeito que está, a função E vai apenas usar a primeira comparação de U2 com F2.
O mesmo ocorre na comparação
Código: Selecionar todosU2<>$I$2:$I$100000
Por Leonardo1234 14 Set 2020 às 16:13
Membro Novato
Mensagens: 90
Reputação: 2
#58820
Sim, de fato não está funcionando para a coluna toda. Eu testei aqui sua planilha, porém deve ter algum erro na formula, que ela não está funcionando. Eu preciso que o KM seja diferente de qualquer valor das colunas E e I, e eu preciso que ele seja maior do que o menor valor da coluna E correspondente a placa da coluna S comparada com as placas do intervalo da coluna C e mesma coisa com a coluna I, porém no caso tem que ser menor do que o maior valor da coluna. Eu testei essa formula aqui, porém ela também não esta dando certo. SOMARPRODUTO((Base!U2<>Tabela1[Km na Origem])*(Base!U2<>Tabela1[[Km no Destino ]])*(Base!U2>=MÍNIMOA(SE(Tabela1[Placa]=Base!S2;Tabela1[Km na Origem])))*(Base!U2<=MÁXIMOA(SE(Tabela1[Placa]=Base!S2;Tabela1[[Km no Destino ]])))). Consegue ajudar?
Por babdallas 14 Set 2020 às 16:44
Excel Expert
Mensagens: 3184
Reputação: 1379
#58825
Código: Selecionar todos(CONT.SE(Tabela1[Km na Origem];"="&Base!U2)=0)*(CONT.SE(Tabela1[Km no Destino];"="&Base!U2)=0)*(Base!U2>=SEERRO(AGREGAR(15;6;Tabela1[Km na Origem]/((Tabela1[Placa]=Base!S2));1);0))*(Base!U2<=SEERRO(AGREGAR(14;6;Tabela1[Km na Origem]/((Tabela1[Placa]=Base!S2));1);0))
Apenas usuários registrados podem ver ou baixar anexos.
Por Leonardo1234 14 Set 2020 às 17:13
Membro Novato
Mensagens: 90
Reputação: 2
#58826
Está funcionando, porém quando altera a placa na tabela de base, ele não ta funcionando. Estou tentando colocar o valor 280 nesse novo cenário e não esta indo.
Apenas usuários registrados podem ver ou baixar anexos.
Por babdallas 16 Set 2020 às 11:45
Excel Expert
Mensagens: 3184
Reputação: 1379
#58909
Se um tópico está criado, você não deve criar outro só para apressar a sua resposta. Por favor, leia as regras do fórum.

Quanto ao seu problema, veja se esta correção resolve:

Código: Selecionar todos=(CONT.SE(Tabela1[Km na Origem];"="&Base!Y10)=0)*(CONT.SE(Tabela1[Km no Destino];"="&Base!Y10)=0)*(Base!Y10>=SEERRO(AGREGAR(15;6;Tabela1[Km na Origem]/((Tabela1[Placa]=Base!W10));1);0))*(Base!Y10<=SEERRO(AGREGAR(14;6;Tabela1[Km no Destino]/((Tabela1[Placa]=Base!W10));1);0))


Caso não seja, explique um pouco melhor cada condição que deve ser atendida. Quais colunas devem ser usadas em cada condição.
Apenas usuários registrados podem ver ou baixar anexos.
Por Leonardo1234 16 Set 2020 às 12:35
Membro Novato
Mensagens: 90
Reputação: 2
#58914
Olá BabDallas, desculpe ter criado outro tópico, pois eu percebi que nós acabamos focando nas correções das fórmulas e que de fato estavam equivocadas, como o exemplo da aplicação de uma regra matricial na fórmula E, porém mesmo com as fórmulas corrigidas, meu problema original que é a validação funcionar em um primeiro momento e depois parar de funcionar quando a planilha é fechada e aberta novamente, persiste e na verdade, era isso exatamente que eu queria entender o porquê está acontecendo. Eu vou te encaminhar uma nova planilha, pois eu criei uma nova fórmula, inclusive mais simples que as anteriores, mas que possui regras mais completas. Vou explicar as regras dessa nova fórmula para ficar mais fácil de entender. O que eu preciso é que o número da linha da coluna F, onde é encontrado o maior dos valores que estão abaixo que o valor de referência da célula da coluna U seja igual ao número da linha onde é encontrado o menor dos valores que estão acima do mesmo valor de referência da célula da coluna U e as duas regras só valem onde as placas da coluna C forem iguais a placa da coluna T testada. Se essa condição for verdadeira, ou seja, o número das linhas for igual, o valor pode ser inserido, se não, ele é bloqueado. Eu testei a validação com essa formula de duas formas, uma criando um nome de referência com a fórmula como você mostrou e o aplicando na validação e nesse caso, não funcionou de nenhuma forma tendo um resultado no qual qualquer valor pode ser inserido, como se a validação não estivesse presente e na segunda forma, eu inseri a formula de forma direta na validação, com intervalos até a célula 1000, e nesse caso, a validação funciona, porém após a planilha ser aberta e fechada ela não funciona mais. Enfim, é isso, vou apagar o outro tópico e agradeço se você conseguir me ajudar nessa questão e entender quais são as falhas que estou cometendo nessas duas formas de aplicação da fórmula na validação. Enfim, agradeço a ajuda e novamente desculpe pela abertura do outro tópico, vou apagá-lo.
Apenas usuários registrados podem ver ou baixar anexos.
Por babdallas 16 Set 2020 às 13:10
Excel Expert
Mensagens: 3184
Reputação: 1379
#58916
Veja isso

Código: Selecionar todosAGREGAR(15;6;LIN($I$2:$I$100008)/(($I$2:$I$100008>$V2)*($C$2:$C$100008=$T2));1)=AGREGAR(14;6;LIN($F$2:$F$100008)/(($F$2:$F$100008<$V2)*($C$2:$C$100008=$T2));1)
Apenas usuários registrados podem ver ou baixar anexos.
Por Leonardo1234 16 Set 2020 às 14:26
Membro Novato
Mensagens: 90
Reputação: 2
#58919
Não está funcionando, vou te mandar a planilha com alguns valores que ele não deveria permitir e está permitindo.
Apenas usuários registrados podem ver ou baixar anexos.
Por babdallas 16 Set 2020 às 14:48
Excel Expert
Mensagens: 3184
Reputação: 1379
#58921
Espero que agora esteja correto.
Apenas usuários registrados podem ver ou baixar anexos.
Por Leonardo1234 16 Set 2020 às 15:06
Membro Novato
Mensagens: 90
Reputação: 2
#58923
Cara, muito obrigado, agora está funcionando perfeitamente. Só me tira uma duvida, na formula anterior que eu estava utilizando, a ela também funcionava, porém ela parava de funcionar quando eu fechava e abria a planilha novamente. Você saberia dizer se é por que é uma formula matricial que isso estava acontecendo ou tem outro motivo? E se não for pedir muito, você consegue explicar a lógica que você usou nessa nova fórmula? Novamente muito obrigado e desculpa qualquer coisa.
Por babdallas 16 Set 2020 às 16:31
Excel Expert
Mensagens: 3184
Reputação: 1379
#58926
As funções AGREGAR estão pegando a menor (parâmetro15 na função AGREGAR) e a maior (parâmetro 14 na função AGREGAR) linha que atendem aquelas condições que você passou. Caso os limites não atendam, retornam erro. No caso de erro, usei a função SEERRO para retornar valor zero.

Quanto à fórmula que você tinha feito, funcionava às vezes e depois que fechava e abria e não funcionava mais, não sei dizer. Precisaria avaliar com calma a fórmula e avaliar se houve alguma mudança após abrir o arquivo.