Notifications
Clear all

Intervalo Dinâmico usando DESLOC()

38 Posts
5 Usuários
0 Reactions
26.5 K Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Range Dinâmico

ao definir um nome (usando Ctrl+F3) ao invés de selecionar o range (que ficaria fixo) use as funções Desloc() e Cont.Valores(), combinadas...

eu escrevi coisas diferentes nas células B2 a B5 de uma planilha...

teclei Ctrl+F3 (ou Inserir > Nome > Definir) e defini um nome qualquer para o intervalo que vou criar

no campo refere-se a, eu escrevi a fórmula abaixo:

=DESLOC(Plan1!$B$2;0;0;CONT.VALORES(Plan1!$B:$B);1)

Detalhe 01: NADA MAIS PODERÁ ESTAR EM NENHUMA CÉLULA DA COLUNA B, pois se tiver algo ali, o cont.valores da coluna B não funcionará e pegará linhas a mais do range flexível, ou range variável, ou Range Dinâmico (como prefiro chamar)

Detalhe 02: o início da lista do range dinamico é sempre o primeiro item da lista, e não o seu cabeçalho, ok?

Detalhe 03: uma vez q um nome definido no excel passa a ter uma fórmula (com ou sem funções, não importa) este nome não mais aparecerá na lista do Ctrl+Y (ir para) nem ao lado da barra de fórmulas... para ver o resultado do range dinamico, deve-se voltar à definição de nomes e clicar no campo refere-se à, daí o range vai BRILHAR na planilha . . .

Detalhe 4: naum pode haver nada em cima da lista tb, exceto se for um título, mas neste caso, ver detalhe 5...

Detalhe 5: se vc tiver um titulo na sua lista nas células do excel, precisa usar um -1, pra não contá-lo no range dinamico

neste caso ficaria assim

=DESLOC(Plan1!$B$2;0;0;CONT.VALORES(Plan1!$B:$B)-1;1)

NOTA/EXTRA:
essa função, se bem utilizada, pode variar em linhas (como explicado acima) e/ou em colunas... fica aí um exercício pra quem quiser brincar de nomear áreas cujo tamanho mude...

----------------------------------
é possível usar um Nome Definido no Excel (seja dinâmico ou não) em qualquer função do excel, inclusive qdo as utilizamos matricialmente:

exemplos:
=SOMA(VENDAS)

=PROCV(vendedor;TabelaVendedores;ColunaSalario;0)

=soma((Produtos="Leite")*(TabelaVendedores=Vendedor)*(ValoresVenda>Limite)*ValoresVenda)
terminando com Ctrl+Shift+Enter

claro q pra esta ultima é necessário ter um conhecimento mais profundo de Excel no que diz respeito a condicionais, mas é praticamente uma SOMASE() com 3 critérios do tipo E...
e se usarmos o q eu chamo de Range Dinâmico, podemos fazer miséria com as fórmulas e funções...

Vantagem: Qualquer pessoa que ler a fórmula, terá mais facilidade em entendê-la, pois não é endereços e sim textos facilmente compreensíveis....

as dicas dadas acima, utilizam fórmulas em portugues...

Traduzindo as funções:

    DESLOC é OFFSET
    SOMA é SUM
    PROCV é VLOOKUP
    SOMASE() é SUMIF()[/list:u:2i93tdim]

    Exemplo 1:
    Se alguém quiser exemplo de rng dinamico com procv

    crie um range dinamico chamado tabela, e na fórmula, use:
    =desloc(Plan1!A1;1;0;cont.valores(Plan1!A:A);5)

    Este Range Dinâmico é uma tabela que compreende um número variável de linhas, por um número fixo de colunas da planilha Plan1, ou seja,

    Preencha A1 até E1 com títulos de coluna
    Preencha A2 até E20 com valores de acordo com o cabeçalho

    noutra plan, pode ser a plan2
    Coloque na célula A2 a seguinte fórmula:
    =procv(a1;tabela;5;0)

    assim, td q vc escrever na célula A1, aparecerá o valor correspondente na célula A2...

    Exemplo 2:
    Foi definido um nome (use Ctrl+F3 para conferir). Este nome definido é o TblProduto e foi definido com a seguinte fórmula:
    =DESLOC(Plan1!$L$1;1;0;CONT.VALORES(Plan1!$L:$L)-1;3)

    Isso significa que a função DESLOC() pega como referência uma célula cujo endereço é L1, e a partir da célula DEBAIXO dela, iniciou um intervalo dinâmico de células.

    Enfim... Isso significa que ao adicionar itens na tabela de produtos, o intervalo dinâmico já as incluirá, não sendo mais necessário alterar o conteúdo do nome definido, pois este é dinâmico.

    Utilizei na tabela exemplo ao lado alguns PROCV() com testes de erro ( ÉERROS() ), e utilizei o range dinâmico TblProdutos no meio da função:
    =PROCV($A2;Tblprodutos;2;0)

    Vantagens:
    1) LER a fórmula e entendê-la;
    2) Para efeito de manutenção, não será mais necessário alterar o "alcance" do PROCV();

    Desvantagens:
    1) Ainda não enxerguei desvantagem... alguém se habilita?

    O arquivo está anexado nesta postagem.

    Quem tiver dúvidas, é só perguntar... temos verdadeiros mestres em Range Dinâmico por aqui! :geek:

    ANEXOS BONS:

     
Postado : 10/07/2009 3:23 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito boa a dica!!

Acho aformula Desloc uma das mais dificeis e magicas do Excel, gosto de usar, outra formula dificil que gostaria de saber mais Fernando e que usei uma vez mais tenho receio de usar por ser dificil de montar, pois oculpa muito tempo é BDCONTAR.

Vlw!!!!

 
Postado : 10/07/2009 5:11 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Essa postagem do range dinâmico é uma das mais fodas... merecia um jóia e ou um sticky (y)

 
Postado : 10/07/2009 11:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito legal, ficava alterando manualmente a referência das células.Vou utilizar muito.
Abraços. :D

 
Postado : 04/09/2009 10:27 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito Sinistro. Util ao extremo, e me fez rever meu antigo conceito de que o procv é a funcao mais util do excel (sim, meus conhecimento sao limitados). Pra quem já tentou estudar VBA e nao chegou a lugar algum, indispensavel entender essa formular pra nao ficar perdido nos offset.
Valeu Fernando! :!: :!: :!: :!: :!:

 
Postado : 03/11/2009 7:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

O arquivo está anexado ao tópico em ambos os formatos.

 
Postado : 22/06/2012 6:27 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

"Desvantagens:
1) Ainda não enxerguei desvantagem... alguém se habilita?"
.
---------------------------------- Você inutiliza todas as linhas das colunas destinadas à Desloc !!! ... Não pode nem fazer um rascunho na parte de baixo, se fizer, a Desloc vai lá incorporar o dado !!!

 
Postado : 12/09/2014 8:58 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

"Desvantagens:
1) Ainda não enxerguei desvantagem... alguém se habilita?"

COPA,

Tem um outro tópico onde o Fernando explica que usar range dinâmico com ÍNDICE() é mais rápido do que usar DESLOC(). Isso porque desloc é função volátil e índice não é.

Você inutiliza todas as linhas das colunas destinadas à Desloc !!! ... Não pode nem fazer um rascunho na parte de baixo, se fizer, a Desloc vai lá incorporar o dado !!!

Mas tem um porém, o Fernando também criou outro tópico por ai explicando que devemos evitar referenciar a linha inteira (nesse caso, usando CONT.VALORES(). Assim, vc pode usar um range dinâmico prevendo apenas 100, 1000 ou 10000 linhas, por exemplo, e pode até rascunhar acima ou abaixo delas. Sem contar que a gente fica viciado em usar CONT.VALORES(), e pegar todas as células não vazias, mas também pode-se utilizar CONT.NÚM, ou CONT.SE, por exemplo, o que permitiria, por exemplo, ter um range dinâmico com nomes de pessoas, e ainda rascunhar um cálculo na mesma coluna.

Abs

 
Postado : 16/09/2014 2:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

JSCopa, qto tempo...

Então, você tem razão por um lado... Mas é que do ponto de vista da aplicação geral do intervalo dinâmico, teoricamente ele pode crescer até ... .até pra sempre... então, escrever qualquer coisa, mesmo que rascunho, abaixo de um local aonde serão inseridos dados, é risco de perder o rascunho quando dados forem preenchidos.
Eu penso em banco de dados... se vc quer rascunhar qualquer coisa, vc insere linhas em branco ao final da tabela, e escreve coisas ali ?

Mas vou concordar com você num aspecto: sim, vc acaba prendendo e limitando o uso da planilha onde o intervalo dinâmico é aplicado. Mas, por outro lado, o Excel não impede de fazer rascunhos em outros locais, melhores até. Não vejo sua argumentação como desvantagem.

Como o GTSalikis disse: claro que se alguém quiser brincar diferentemente com o conceito do range dinâmico,
- Primeiro precisa dominar tudo que tem ali, e você domina pq aprendeu muito bem, lá no Orkut! rs...

- Segundo, lembrar que apesar de estarmos referenciando colunas inteiras, podemos referenciar intervalos específicos, limitando o range dinâmico em 10, 100, 1mil ou sei lá, 10mil linhas. Basta brincar com os intervalos dentro de todas as funções ou com as funções dentro da fórmula, para garantir que isso aconteça.

- E terceiro, sim, vc pode usar outras funções... para determinar onde o intevalo começa (qtas linhas abaixo da referência), pode usar um CORRESP().... Para contar os itens, pode ser Cont.Se(), ou outras funções de contagem... assim vc garante que seu range dinamico nao representa a tabela toda, mas sim um pedaço dela... garantindo assim a possibilidade de escrever abaixo da tabela sem problemas...

Enfim, existem mil maneiras....
;-)

 
Postado : 17/09/2014 8:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Fernando, entendi seus argumentos !!!
.
Acho essa DESLOC show ... mas, como não trabalho com BD infinitos, me incomoda o fato dela não poder fazer mais nada na parte de baixo das colunas (afinal essa DESLOC é muito bisbilhoteira kkkkk) ... por isto prefiro as ÍNDICES/CORRESPs e PROCVs com uma boa margem de linhas para possíveis acréscimos/necessidades !!!
.

 
Postado : 19/09/2014 7:43 pm
(@generoso)
Posts: 0
New Member
 

Estou com dificuldade para colocar a lista em outra ABA.
Alterei as formulas não não funciona.
Alguem pode dizer o que estou fazendo de errado?

Só uso um campo de busca: Calculo!C5
A lista esta: Cidades!A2:A1367

Deloc_linha_final =PROC('Calculo'!C5;ESQUERDA(Lista_Completa;NÚM.CARACT('Calculo'!C5));LIN(Linhas))-1
Desloc_qtd_linhas =SOMARPRODUTO(--(ESQUERDA(Lista_Completa;NÚM.CARACT('Calculo'!C5))='Calculo'!C5))
Linhas =INDIRETO("Cidades!2:"&CONT.VALORES('Cidades'!$A:$A))
lista_completa =INDIRETO("Cidade!A2:A"&CONT.VALORES('Cidades'!$A:$A))
lista_Filtrada =DESLOC('Cidades'!$A$1;Desloc_Linha_Final;0;Desloc_Qtd_Linhas*-1)
Lista_Validação =SE(OU('Calculo'!C5="";NÚM.CARACT('Calculo'!C5)>5);Lista_Completa;Lista_Filtrada)

 
Postado : 21/05/2015 10:17 am
(@generoso)
Posts: 0
New Member
 

Alterei estas formulas conforme abaixo, mas tambem não funciona.
Linhas =INDIRETO("Cidades!2:"&CONT.VALORES('Cidades'!$A:$A))
lista_completa =INDIRETO("Cidades!A2:A"&CONT.VALORES('Cidades'!$A:$A))

 
Postado : 21/05/2015 10:19 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Estava lendo e baixei os exemplos, só não consegui ajustar para a minha questão, tambem quem mandou não estudar formulas e se dedicar a outras coisas, mas a questão é a seguinte.

Tenho uma determinada coluna com formulas que logicamente retornam os dados de outra, e uma outra em que utilizo formula para contar ou somar estes resultados, então criei um range dinâmico para utilizar dentro de uma outra formula, só que o Desloc pega até a ultima celula com formula independente se está com o resultado ou não, e eu gostaria que pegasse até a ultima celula com Resultado.

Se precisar depois coloco um modelo, mas é o mesmo que coloquei no tópico :
SOMARPRODUTO entre periodos de Horas [Resolvido]
viewtopic.php?f=20&t=18211

Já estou saindo do serviço, mais tarde vejo.

[]s

 
Postado : 23/11/2015 2:00 pm
(@mprudencio)
Posts: 0
New Member
 

Mauro em que tabela e em que coluna ???

 
Postado : 23/11/2015 2:31 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

não use o cont.valores(), use o cont.se(intervalo;"<>") . . .

Assim (por exemplo, na coluna G):
CONT.SE(G:G;"<>")

 
Postado : 23/11/2015 2:37 pm
Página 1 / 3