Redimensionando Intervalo VBA


Para construir um intervalo de células (Range) a partir de parâmetros ou de outro intervalo de células (Range) é necessário conhecer comandos de redimensionamento e/ou de deslocamento, sendo os principais Offset e Resize.


VBA Offset

Offset é um comando para deslocamento, seja horizontal ou vertical, de um intervalo de células (Range).

    Range("B2").Offset(RowOffSet:=1, ColumnOffset:=1).Select
    'O comando acima é o mesmo que Range("B2").Offset(1, 1).Select

O código acima selecionará a célula "C3".

Não é necessário utilizar os termos: RowOffSet e ColumnOffSet. Assim como em uma função, é possível utilizar apenas os números como parâmetros (na ordem RowOffSet e depois ColumnOffset), tornando a parametrização implícita.

  Range("B2").Offset(-1, -1).Select

O código acima selecionará a célula "A1", pois números negativos nesta função significam recuar linhas ou colunas.

A vantagem da parametrização explicita (utilizando os termos RowOffSet e ColumnOffSet) é que ela permite alterar a ordem que se escreve os parâmetros.

  Range("B2").Offset(2, 3).Select
  Range("B2").Offset(ColumnOffset:=3, RowOffSet:=2).Select
  'Ambos os comandos acima realizam a mesma ação

Um Range pode conter um intervalo com mais de uma célula, e este intervalo pode ser deslocado com Offset.

    Range("B2:D4").Offset(1, 1).Select

O código acima selecionará as células de "C3" a "E5", partindo do referência de "B2" a "D4".

Offset

VBA Resize

Resize é um comando para criação de um novo intervalo Range partindo da célula de menor linha e menor coluna do intervalo de referência (mesmo que ele tenha apenas uma célula).

    Range("A1").Resize(RowSize:=2, ColumnSize:=2).Select
    'O comando acima é o mesmo que Range("A1").Resize(2, 2).Select

O código acima selecionará as células de "A1" a "B2".

Da mesma forma que em Offset, é possível omitir o nome dos parâmetros (RowSize, ColumnSize).

  Range("B2").Resize(3, 3).Select

O código acima selecionará as células de "B2" a "D4".

A propriedade Resize sempre utilizará a célula de menor linha e menor coluna como ponto de partida. O tamanho do Range de referência é irrelevante:

  Range("A1:J20").Resize(2, 2).Select

Nesta seleção a célula de menor linha e menor coluna será "A1". Logo, o código selecionará as células de "A1" a "B2".

Resize

Diferentemente de Offset, Resize não aceita como parâmetros valores negativos.


VBA Resize junto com VBA Offset

É possível utilizar os comandos Resize e Offset conjuntamente em uma única linha de código:

    Range("A2:B3").Select
    Range("A2:B3").Resize(1, 2).Offset(-1, 1).Select
    Range("A2:B3").Offset(-1, 1).Resize(1, 2).Select 'Alternativa à linha anterior
Resize e Offset

Apesar do intervalo final no caso ser o mesmo, a ordem de execução se resolve da esquerda para direita.

    Range("A2:B3").Resize(1, 2).Offset(-1, 1).Select
    'Ordem de execução: Primeiro Range("A2:B3").Resize(1, 2), em seguida .Offset(-1, 1) para depois .Select


Fixando o Aprendizado

Exercícios Sugeridos

Offset Resize Procurar e Pintar Par e Impar


SuperExcelVBA.com é um site voltado ao aprendizado de VBA. Exemplos e explicações podem ter sido simplificados para maior e mais veloz compreensão. Estamos constantemente nos atualizando e corrigindo erros, porém não existe garantia sobre o conteúdo disponível no site. Todos os direitos reservados.

Excel ® é uma marca registrada da Microsoft Corporation.

© 2019 SuperExcelVBA | SOBRE

Protected by Copyscape