Notifications
Clear all

Formula dinâmica com INDIRETO e Lin() em Formatação Condicio

7 Posts
3 Usuários
0 Reactions
1,488 Visualizações
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

ola

inicialmente fiz essa formula:

=E(Z$7="s"&$U$22;Z19=MENOR(SE(E(ÉNÚM(Z$8);Z19<>"");INDIRETO(ÍNDICE($A$14:$K$14;1;CORRESP(Z$7;$A$11:$K$11;0))&LIN()&":"&ÍNDICE($A$15:$K$15;1;CORRESP(Z$7;$A$11:$K$11;0))&LIN());af);1))

Ela funciona Ok,
Mas como não é nada pequena, juntar mais regras e repetir a formula variando alguns paramentos ia ser complicado.

então coloquei 1 linha auxiliar e fiz essa:

=Z19=MENOR(INDIRETO(INDIRETO(Z$10&14)&LIN()&":"&INDIRETO(Z$10&15)&LIN());1)

do jeito que está funciona.
Mas se adicionar apenas um "E(Z$7="s"&$U$19;" igual tem na outra já para de funcionar na formatação condicional.
"direto na planilha funciona OK"

=E(Z$7="s"&$U$19;Z19=MENOR(INDIRETO(INDIRETO(Z$10&14)&LIN()&":"&INDIRETO(Z$10&15)&LIN());1))

não sei onde estou errando

tbm tentei fazer uma função, mas com uma range de 6000 linhas X 120 colunas a planilha ficou meio pesada.

Se alguém tiver uma ideia de como deixar a formula simples e acompanhar as variações da planilha

Att.
tentei deixar o mais simples

 
Postado : 27/06/2014 4:50 am
(@lfoliveira)
Posts: 0
New Member
 

Bom dia ...

Já tentou colocar a fórmula dentro da programação da Macro e depois copiar e colar (ainda na programação) no intervalo desejado ?

Comigo resolveu a questão de velocidade.

Já usou também a fórmula abaixo:

Coloque no início da programação:

With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With

IMPORTANTE: Não deve esquecer de voltar para True na 2a e 3a linha ...

 
Postado : 27/06/2014 6:05 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

ola lfoliveira

eu tenho macros que na hora que muda os parâmetros da planilha apaga e reaplica as formatação,
eu poderia usar para aplicar nas ranges corretas.

mas eu tenho que verificar valores entre 2 ou mais setores, então isso não funcionaria.

sobre ScreenUpdating = False
eu uso em todas as macros,
mas como em função que é executada a cada recalculo da planilha isso somente seria valido para alterações de valores e movimentação.
o fato é que formatação condicional é super volátil "faz recalculo a cada refresh de tela"
E a troca de informação entre vba e excel torna o processo mais lento.

Eu já tenho muitas outras formatações condicionais que seguem o padrão dessa, mas nenhuma usa indireto com lin() ou Col() "pelo oq eu me lembre não"

Até mais

 
Postado : 27/06/2014 6:32 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

Ao que parece o problema é realmente o indireto com o Lin()

se colocar um numero de linha no lugar de Lin() a formula funciona naquela linha

E agora?
alguém tem ideia do que se pode fazer ou opinião para alguma outra maneira de se escrever uma formula simples?

.

 
Postado : 27/06/2014 11:03 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

A função Lin() ou Col() "pega" o numero da linha/coluna de onde está referenciada; como a condicional "se movimenta" por assim dizer em toda a sua range, o numero é alterado.
Talvez, utilizando Desloc, que pode retorna um único endereço/valor mas também uma range. O problema, para mim, e que ainda não entendia a dinâmica para sua aplicação.

 
Postado : 27/06/2014 11:09 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

ola Reinaldo

não sei se vc baixou essa planilha, eu tentei simplificar mais ela

ela já tem uma formatação aplicada que faz oq eu quero em roxo
"com indice e linhas 7"
eu não sei usar desloc por isso usei índice e corresp

em U22 se vc colocar a letra de um dos setores, a formatação vai ser aplicada nesse setor

se adicionar colunas no meio dos setores vai ver que a formatação vai acompanhar.

Até

 
Postado : 27/06/2014 11:23 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

Ola

Olha que troço maluco...
o problema não era o indireto, pelo menos eu acho

adicionei um SE no meio do MENOR e funcionou :shock:

=E(Z$7="s"&$U$19;Z19=MENOR(SE(E(ÉNÚM(Z$8);Z22<>"");INDIRETO(INDIRETO(Z$10&14)&LIN()&":"&INDIRETO(Z$10&15)&LIN());"cc");1))

=Z19=MENOR(indireto... funciona, mas seleciona todos os setores

=E(...;Z19=MENOR(indireto... Não funciona, pq Lin() não repassa o numero da linha

=E(...;Z19=MENOR(SE(E(indireto ... funciona :?:

Alguém por favor me explique isso.

Att.

 
Postado : 27/06/2014 1:01 pm