Utilizando o Objeto Cells dentro do Objeto Range!

Muito programadores, em relação à linguagem de planilhas, preferem o Objeto Range, por sua facilidade em fazer referência em uma determinada célula.(...)

Autor: Hildebrando Rodrigues

Em VBA, para fazer referência a uma determinada célula ou grupos de células, frequentemente utilizamos o objeto Range. Muitos programadores em início de carreira preferem trabalhar com este objeto devido à proximidade com a linguagem de planilha. 

Ao fazer referência à célula HR53, basta digitar range(“HR53”). Outra facilidade apresentada por este objeto é a ativação automática do menu de propriedades, métodos e objetos. Digitando ponto (.) após a referência à célula, este menu é ativado automaticamente.

Após informar a referência à célula, digitar o ponto e a primeira letra do método, propriedade ou objeto desejado. Quando o cursor estiver posicionado sobre a opção desejada, tecle Enter ou Tab para registrar a ação.

As possibilidades de referências oferecidas pelo objeto range não se resumem apenas a uma única célula. Com este objeto é possível referir-se a grupos de células, coluna inteira, grupos de colunas, linhas inteiras ou grupos de linhas inteiras. Observe alguns exemplos de referências a grupos com o objeto range:

  • Range(“A1:D4”) – Referência às células A1 até D4
  • Range(“A:A”) – Referência à coluna A inteira
  • Range(“A:Z”) – Referência às colunas A até Z inteiras
  • Range(“1:1”) – Referência à linha 1 inteira
  • Range(“1:10”) – Referência às linhas 1 a 10 inteiras

Como pudemos observar as possibilidades de referências a células ou grupos de células com o objeto Range são muitas. Porém, tais referências são absolutas, não abrindo possibilidade para referências relativas.

Uma possibilidade de criar referências relativas com o objeto range é inserir o objeto Cells dentro do objeto range. Existe sim a possibilidade de criar referências relativas somente com o objeto range. Basta concatenar variáveis com o objeto.

Eu particularmente acho interessante o objeto cells por trabalhar apenas com números e não letras. Isto elimina a necessidade de digitar aspas, o que julgo ser mais produtivo.

Existem dois tipos de referência a células através do objeto cells: por índice ou por coordenadas.

Como já dito antes, ambas utilizam apenas números. No primeiro caso, referência por índice, a célula A1 é denominada cells(1), a célula B1 é denominada cells(2), a célula C1 é cells(3), a célula XFD1 é cells(16384). A numeração continua na linha seguinte (linha 2) onde a célula A2 é denominada cells(16385) e assim por diante.

Por coordenadas, as colunas são numeradas de 1 até 16.384 e as linhas, de 1 até 1.048.576. Desta forma, ao referir-se à célula D48, enquanto no objeto range esta referência apresenta-se como range(“D48”), no objeto cells, esta referência é apresentada como cells(48,4).

A única coisa chata neste objeto é a necessidade de digitar o método, propriedade ou objeto após o ponto. Ele não apresenta o menu como no objeto range. Se quisermos recortar o conteúdo da célula B17, devemos digitar integralmente cells(17,2).cut.

Outro problemas que encontramos ao utilizar o objeto cells é a impossibilidade de fazer referência a grupos de células. Aí é que entra a inserção deste objeto, no objeto range.

A praticidade do objeto cells é a possibilidade de inserir variáveis numéricas dentro deste objeto. Podemos declarar uma variável N como integre e alimentá-la com o valor inicial 2. Observe o exemplo abaixo:

Dim N as Integer

N=53

Cells(N,8)=”Menininha”

Ao rodar esta rotina exemplo, será inserida a palavra Menininha na célula H53. Além de inserir a variável na referência à linha, pode-se inserir variável também na referência à coluna. Observe o exemplo a seguir onde foi criada a variável X para alimentar a referência à coluna:

Dim N as Integer

Dim X as Integer

N=53

X=8

Cells(N, X)=”Menininha”

Após rodar a rotina acima, a palavra Menininha será inserida na mesma célula (H53). Escrever esta mesma instrução com o objeto Range, seria bem mais complicado.

O método Address em um objeto cells retorna o endereço absoluto da célula referida. O retorno de cells(29,2).Address é $B$29. Sendo assim, inserir variáveis numéricas em referências com o objeto cells possibilita criarmos referências relativas com o objeto range. Observe o exemplo a seguir:

Sub teste()

Dim N As Integer

N = 5

Range(Cells(N, 2). Address, Cells(N, 10). Address).Select

End Sub

Para melhorar o código, podemos eliminar a referência ao método Address do objecells dentro do objeto range. Quando o objeto cells está dentro do objeto range, não é necessário informar o método Address, pois este é o padrão do objeto cells quando este se encontra dentro do objeto range. Observe o exemplo a seguir:

Sub teste()

Dim N As Integer

N = 5

Range(Cells(N, 2), Cells(N, 10)).Select

End Sub

O código ficará mais “limpo” e funcionará da mesma maneira. Utilizar o objeto cells dentro de objetos range, possibilita trabalhar com referências relativas de modo mais prático. Principalmente se estas referências estiverem inseridas em loops ou criar ranges elásticos para alimentar listboxes.

Curtiu o post? Deixe seu comentário nos contando se o conteúdo foi relevante para você ou caso tenha ficado alguma dúvida!

Deixe o seu comentário!

Não perca nenhum post!