O objeto Range e o derivado Cells
O objeto Range
se refere a um intervalo de células, que pode ter apenas uma célula ou
milhares delas. De longe, este é o objeto que é mais utilizado na
programação em VBA do Excel. É um objeto complexo, com dezenas de
propriedades e métodos. Para quem não compreende esses termos, propriedades
são características do objeto, que normalmente podem ser alteradas, enquanto métodos
são ações que podem ser executadas com o objeto. Vejamos o exemplo de código
abaixo:
células A1 a C1. Value, por sua vez, é uma propriedade. No exemplo
está recebendo o valor “Tabelas”. Portanto, se há muitos métodos e
propriedades, há muitas possibilidades do que fazer.
Voltando ao objeto Range, há muitas formas de utilizá-lo, tudo
depende da necessidade do momento. Vejamos alguns exemplos:
primeiro é muito mais comum, é mais prático. Mas é importante saber que
podemos colocar dois elementos distintos dentro dos parênteses, saber
disso ajuda a entender como usar variáveis junto aos intervalos. O
terceiro exemplo seleciona um intervalo nomeado, de nome Matriz,
enquanto o quarto exemplo traz uma variável chamada Intervalo, que
deve estar no formato string e trazer um texto como
“A1:D10”.
diferença é que se refere a uma única célula, não sendo possível
selecionar intervalos com ele. Com esta definição fica bem claro quando se
deve usar um e quando se deve usar o outro. A referência para a célula
também é diferente, é necessário colocar linha e coluna nos argumentos.
Por exemplo:
Cells(5, 2).Formula = “=Today()”
segunda coluna, ou seja, célula B5. Pode parecer menos intuitivo desta
forma para quem está acostumado com a forma de notação do Excel, mas na
programação esta forma é bem melhor – com a prática você comprovará
isso.
referindo a duas células distintas. Elas são o início e o fim do
intervalo. É possível colocar objetos Cells como argumentos,
observe:
Range(Cells(2, 2), Cells(8, 5)). Clear
simples digitar “B2:E8”, mas imagine que no lugar dos números tenhamos
variáveis:
Range(Cells(Linha1, Coluna1), Cells(Linha2, Coluna2)).Clear
Range e Cells. Na hora de codificar essa será uma das formas
que você mais verá.
propriedade chamada Cells. Isso significa que você pode referenciar
uma célula dentro de um intervalo especificado. Isso é particularmente
útil ao usar junto com intervalos nomeados. Suponha que você tenha um
intervalo nomeado chamado Matriz, indo de E5 a J10 e você quer selecionar
a terceira linha da segunda coluna. Isso é possível desta forma:
célula solicitada. Não importa se acrescentar colunas antes desse
intervalo, você não precisará editar o código, pois o intervalo nomeado
permanece se referindo ao mesmo grupo de células.
Perceba que com este conhecimento você pode acessar praticamente qualquer
célula da planilha sem precisar alterar a seleção da célula ativa. Usar o
método Select ou Activate é muito comum no início, quando se
está aprendendo a programar no Excel. Porém, o ideal é tentar codificar de
maneira que possamos acessar o conteúdo das células sem precisar alterar a
célula ativa no momento. Temos basicamente três motivos:
casos pode ser alguns milissegundos de economia, mas quando se processa
uma quantidade muito grande de dados o tempo gasto pode ser de alguns
minutos;
usuário deixou, exceto quando é realmente necessário ir para uma certa
posição da planilha;
alterar a posição da célula ativa sem querer, enquanto olha abismado para
a tela do editor VBA com o código. Daí ele continua o processo quando
encontrar o botão certo e sabe-se lá o que vai acontecer com o restante do
processamento.
da célula ativa. Isso pode parecer difícil no começo, mas com prática e
insistência chega-se lá. Veja esta função que escrevi um dia:
_
Intervalo.Columns.Count).Column
Intervalo.Cells(1, 1).Row To _
Intervalo.Cells(Intervalo.Rows.Count,
1).Row
Cells(Vertical, Horizontal).Value = Valor Then
LocalizarReferencia = Cells(Vertical, Horizontal).Address
Exit Function
If
retorna o endereço da primeira ocorrência (ignorando eventuais outras
ocorrências, pois o intervalo onde usei esta função foi usado tinha
valores únicos). Encontrando um valor sairá da função imediatamente (Exit Function). Caso não for encontrado o valor e chegar até o fim da função, será
devolvido “#N/D” (simulando o mesmo valor da função NÃO.DISP).
intervalo em busca do valor. Gaste alguns minutos analisando o código,
executando passo a passo (com a tecla F8) e entendendo o
funcionamento das estruturas de repetição. Compreenda o uso do
Range.Cells e do uso dos atributos Column, Row e
Count. Aprendendo a trabalhar desta forma você dificilmente
precisará selecionar alguma célula nos futuros códigos.
Se você gosta de usar uma estrutura do tipo Do While até encontrar
célula vazia, você pode usar um código como o exemplo abaixo:
… ‘ Código do processamento
Linha = Linha + 1
cliques acidentais enquanto estiver debugando o código. Perceba que usando
Cells não há necessidade de usar a propriedade Offset, como
é muito comum com o objeto ActiveCell.
métodos. Use o Pesquisador de Objetos do Editor de VBA (tecla de
atalho F2) e observe todas as possibilidades. Você pode descobrir
propriedades e métodos que podem facilitar ainda mais sua vida.
Boa prática com esses novos conhecimentos!
Pedro Martins
artefinalista, eletrotécnico, programador de CLP (para máquinas
industriais) e analista de sistemas em sistema bancário, programando em
COBOL.
Mexe com computadores e programação desde a segunda metade dos anos
1980, quando teve um MSX e aprendeu a programar em BASIC. É a favor da
disseminação do conhecimento.