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.
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".
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".
Diferentemente de Offset, Resize não aceita como parâmetros valores negativos.
É 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
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
Exercícios Sugeridos
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.
© 2024 SuperExcelVBA | SOBRE