Menu

DESLOC no Excel (OFFSET): intervalos dinâmicos e totais

=DESLOC(A1;3;2) retorna a célula 3 linhas abaixo e 2 colunas à direita de A1. Com uma altura, ela retorna um intervalo inteiro, que é como se totalizam as últimas N linhas ou se monta uma média móvel.

Todas as planilhas desta página são ao vivo: mude um número ou uma fórmula e elas recalculam.

=DESLOC(A1;3;2) retorna a célula 3 linhas abaixo e 2 colunas à direita de A1, que é C4. Dê a ela também uma altura e uma largura e ela retorna um intervalo inteiro, que é o principal uso da DESLOC: totais e médias sobre um intervalo que se move ou cresce. A DESLOC se chama OFFSET em inglês, e a tabela mostra a fórmula assim: =OFFSET(A1,E2,F2). Você também pode digitar as fórmulas em português, com ponto e vírgula.

Partir de A1
G2
ABCDEFG
1ProductCategoryPriceRowsColsResult
2AppleFruit$1.2032$0.80
3PearFruit$1.50
4CarrotVegetable$0.80
5BreadBakery$2.40
6MilkDairy$1.10
Clique em uma célula para ver a fórmula. Mude um número ou uma fórmula e a planilha recalcula.No Excel em português: =DESLOC(A1;E2;F2)

3 linhas abaixo e 2 à direita de A1 cai em C4, o preço de Carrot, $0.80. Coloque 0 em Cols para ver o nome Carrot, ou 5 em Rows para a linha de Milk. Linhas e colunas podem ser negativas para subir ou voltar, e passar da borda de cima ou da lateral da planilha dá #REF!.

Sintaxe da DESLOC

=OFFSET(reference, rows, cols, [height], [width])
  • reference: a célula inicial (ou intervalo).
  • rows, cols: quanto se mover. 0 significa ficar.
  • height, width: o tamanho do intervalo a retornar, contado a partir da célula de destino. Se ficarem de fora, valem o tamanho de reference.

Sozinha em uma célula, uma DESLOC que retorna várias células se espalha no Excel 365; versões antigas costumam mostrar #VALOR! (#VALUE! em inglês; a tabela mostra os nomes de erro em inglês). Dentro de SOMA, MÉDIA, CONT.NÚM ou MÁXIMO, ela funciona como um intervalo.

Somar as últimas N linhas

O trabalho clássico da DESLOC: um total que sempre cobre as linhas mais recentes, quantas linhas forem acrescentadas. A CONT.NÚM (COUNT em inglês) descobre quantos valores existem, a DESLOC desce até o primeiro dos últimos N, e a altura pega N linhas.

Total dos últimos N meses
F2
ABCDEF
1MonthSalesLast NTotal
2Jan4,200314,900
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
8Jul5,000
Clique em uma célula para ver a fórmula. Mude um número ou uma fórmula e a planilha recalcula.No Excel em português: =SOMA(DESLOC(B1;CONT.NÚM(B2:B13)-E2+1;0;E2;1))

São 7 valores, então a DESLOC começa 7-3+1, 5 linhas abaixo de B1, em B6, e pega 3 linhas: de May a Jul, 14,900. Digite 4900 em B9 (agosto) e o total passa para Jun, Jul e Aug, porque a CONT.NÚM agora encontra 8. O intervalo B2:B13 deixa espaço para o resto do ano. A coluna não pode ter células vazias no meio, senão a CONT.NÚM conta a menos e a janela cai no lugar errado.

Uma média móvel

Arrastada por uma coluna, a DESLOC com um deslocamento de linha negativo dá a cada linha uma janela com as linhas de cima: aqui, a média do mês atual e dos dois anteriores.

Média móvel de três meses
C4
ABC
1MonthSales3-month average
2Jan4,200
3Feb3,900
4Mar4,8004,300
5Apr5,1004,600
6May4,6004,833
7Jun5,3005,000
8Jul5,0004,967
Clique em uma célula para ver a fórmula. Mude um número ou uma fórmula e a planilha recalcula.No Excel em português: =MÉDIA(DESLOC(B4;-2;0;3;1))

C4 tira a média de B2:B4 (de Jan a Mar), 4,300. Cada linha abaixo desce a janela uma linha. Mude o 3 para 6 e o -2 para -5 para uma média de seis meses (nesse caso, comece a fórmula na linha 7). Este caso em particular nem precisa da DESLOC: =MÉDIA(B2:B4) arrastada para baixo a partir de C4 faz o mesmo, porque as referências relativas já se movem. A DESLOC vale a pena quando o tamanho da janela vem de uma célula.

Por que o ÍNDICE costuma ser a melhor escolha

A DESLOC é volátil: o Excel recalcula toda DESLOC depois de qualquer edição em qualquer lugar da pasta de trabalho, já que não tem como saber de antemão para quais células ela vai apontar. Uma planilha com milhares delas fica lenta. O ÍNDICE também retorna uma referência, e um intervalo escrito como início:ÍNDICE(...) cresce do mesmo jeito sem ser volátil:

=SUM(OFFSET(B2, 0, 0, E2, 1))        first E2 rows, volatile
=SUM(B2:INDEX(B2:B13, E2))           same rows, not volatile

No Excel em português: =SOMA(DESLOC(B2;0;0;E2;1)) e =SOMA(B2:ÍNDICE(B2:B13;E2)). As duas leem as primeiras E2 linhas da coluna. A DESLOC também é mais difícil de auditar: Rastrear Precedentes e os contornos coloridos que o Excel desenha enquanto você edita a fórmula mostram a célula inicial e os argumentos, não o intervalo que a DESLOC acaba retornando. Use a DESLOC para um modelo rápido ou o intervalo de um gráfico; prefira o ÍNDICE em pastas grandes. A página do ÍNDICE fala mais sobre retornar intervalos, e a INDIRETO é a outra função de referência volátil.

Prática: total dos primeiros N meses

Vendas mensais
F2
ABCDEF
1MonthSalesFirst NTotal
2Jan4,2004
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
8Jul5,000
Clique em uma célula para ver a fórmula. Mude um número ou uma fórmula e a planilha recalcula.

Sua vez: Em F2, use a DESLOC dentro da SOMA para totalizar os primeiros N meses, em que N está em E2.

Perguntas frequentes

O que a DESLOC faz no Excel?

Ela retorna uma referência que fica a um certo número de linhas e colunas de uma célula inicial, com tamanho opcional. =DESLOC(A1;3;2) é a célula 3 linhas abaixo e 2 colunas à direita de A1, que é C4.

Como somo as últimas N linhas no Excel?

Comece pelo cabeçalho e desça até o primeiro dos últimos N valores: =SOMA(DESLOC(B1;CONT.NÚM(B2:B100)-N+1;0;N;1)). A CONT.NÚM descobre quantos valores existem, e a altura N pega essa quantidade de linhas. Só funciona quando a coluna não tem lacunas.

Por que a DESLOC é volátil?

O Excel recalcula toda DESLOC depois de qualquer mudança na pasta de trabalho, porque as células para onde ela aponta só são conhecidas depois que ela roda. Em pastas grandes, isso deixa tudo mais lento. Um intervalo montado com ÍNDICE, como B2:ÍNDICE(B2:B100;N), faz o mesmo trabalho sem ser volátil.

Quais são os argumentos da DESLOC?

DESLOC(ref; lins; cols; [altura]; [largura]): a célula inicial, quantas linhas para baixo (negativo é para cima), quantas colunas para a direita (negativo volta) e, opcionalmente, o tamanho do intervalo a retornar.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR