Range, Cells e Offset
Antes de iniciarmos a falar sobre Range, Cells e Offset vamos fazer uma revisão rápida das maneiras de utilizar células.
Podemos tanto utilizar o Range como o Cells, ou seja selecionar a célula “A2” pode ser:
Cells(1,2).select (linha 1 e coluna 2)
Ou
Range(“A2”).select
Você pode usar das duas formas para selecionar (.select) ou para pegar o valor da célula (.value), mas existe alguns detalhes que só é possível ora com a primeira forma ora com a segunda forma.
Exemplos:
É fácil selecionar um grupo de células com o range: Range(“A1:B2”).select
Com o cells podemos selecionar todas as células da planilha: Cells.Select
Ou apagar o conteúdo das células Cells.ClearContents
Entretanto algumas vezes nos deparamos com uma situação que nos exige copiar algum dado abaixo ou ao redor da célula selecionada!!!
Antes de prosseguirmos vamos colocar um exemplo para facilitar. Sempre que alguém clicar em uma célula, desejamos que o valor dessa célula seja copiado para célula à direita.
Um caminho mais tortuoso é saber a coluna ativa e a linha ativa, e a partir disso (como sabemos a coluna) adicionar + 1 e colar o valor da célula atual
linha = activeCell.row
coluna = activeCell.column
Cells(linha, coluna + 1).Value = Cells(linha, coluna).Value
_________________________________________________________
Offset
Mas com o uso do offset esta tarefa é facilitada, pois essa propriedade nos permite movimentar ao redor da célula ativa ou de uma célula especifica.
Ou seja podemos utilizar como:
Movimentar a partir de célula especifica >> Range(“B2”).Offset(1,0).Select
Ou
Movimentar ao redor da célula ativa >> ActiveCell.Offset(1,0).Select
Modo de usar:
Na propriedade offset o primeiro número dentro dos parênteses representa as linhas que você irá movimentar. Número positivo significa quantas casas a para baixo, número negativo acima e o zero permanece no mesmo local
O segundo número dentro dos parênteses representa as colunas, positivo a direita, negativo à esquerda e o zero permanece na mesma coluna.
Ou seja para movimentar o cursor uma célula para baixo:
ActiveCell .Offset(1,0).Select
Movimentar acima:
ActiveCell .Offset(-1,0).Select
Movimentar para direita:
ActiveCell.Offset(0,1).Select
Movimentar para esquerda:
ActiveCell.Offset(0,-1).Select
__________________________________________________________________________
Caso esteja iniciando com macros sugiro acessar os primeiros passos ->> clique aqui
Caso deseja ver mais utilidades com a propriedade offset – >> clique aqui
Segue Vídeo sobre Range, Cells e Offset
Para ajudar ainda mais, coloco abaixo a planilha Range, Cells e Offset gratuitamente.
Espero que lhe ajude!
Excluir Linhas Duplicadas
Excluindo linhas duplicadas em coluna ordenada.
Dim nLine As Long
Dim nString, nRow As String
Dim nAdress as String
Let nLine = 1
Let nAdress = “B10”
Range(nAdress).Select
Let str = Range(nAdress).Value
Do While Not ActiveCell.Offset(nLine).Value = “”
If ActiveCell.Offset(nLine).Value = nString Then
GoSub DeleteRow
Else
Let nString = ActiveCell.Offset(nLine).Value
Let nLine = nLine + 1
End If
Loop
Exit Sub
DeleteRow:
Let nRow = nLine + 1 & “:” & nLine + 1
Rows(nRow).Select
Selection.Delete Shift:=xlUp
Range(nAdress).Select
Return
End Sub
http://info.abril.com.br – escrito por André Luiz Bernardes
Excluindo linha em branco
Geralmente eu faço um código bem maior e lento, mas eu descobri a função abaixo e vale apena divulgar.
Com o código abaixo possibilitará deletar todas as células em branco que estiverem na coluna D
Range(“D1:D” & Cells _
(Rows.Count,2).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Como Contar Linha Com Vba
Há várias maneiras de contar linha com vba, existe tantas que não lembro todas, e cada tipo de procedimento possui vantagens e desvantagens.
E neste artigo específico vou trazer duas maneiras:
Codigo 1 – contar linha a linha
>>CODIGO 1 – O problema do código abaixo é o tempo para verificar (dependendo da qtde) e complexidade, pois ele irá varrer linha a linha da coluna especificada
Sub Macro1() varColuna = 1 ' Coluna que será verificado varLinha = 1 ' Linha inicial que será verificado varConteudo = 1 Do While varConteudo <> Empty 'continua a verificar se conteudo for diferente de vazio varLinha = varLinha + 1 'contador de linha varConteudo = Cells(varLinha, varColuna).Value 'grava o valor da celula Loop MsgBox "A qtde. de linhas é: " + CStr(varLinha - 1) End Sub
Codigo 2 – Contar linha 2
‘>>CODIGO 2 O problema deste código abaixo que se tiver uma linha vazia no meio dos registros ele vai contar junto
Sub Contador() numeroRegistros = Range("A65536").End(xlUp).Row MsgBox "Número de Registros: " & numeroRegistros, vbOkOnly, "Número de registros em: " & now() End Sub
‘Este ultimo código é visto pelo site msdn
E como havia dito existe outras maneira que você poerá ver aqui no site:
Última linha vazia ou preenchida
O código de última linha que está demonstrado abaixo é muito simples e funcional, ele verifica a última linha preenchida na coluna A, se você quiser saber a ultima linha vazia basta no final do código colocar +1
Sub Macro1() UltimaLinha = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row End Sub
Última Célula Alterada na Planilha
Este código difere dos outros pois aqui você vai ver qual a última célula alterada, ou seja a última linha com célula alterada e mesmo que o valor tenha sido apagado você irá saber.
Foi utilizado durante tempos atrás em um projeto que necessitava saber a última célula alterada e se fosse diferente do desejado o código salvava a pessoa que alterou
Perfeito para saber se alguém fez alguma alteração em sua planilha.
Código Última Célula Alterada
Cells(1, 1).Select ActiveCell.SpecialCells(xlLastCell).Select num_linha = ActiveCell.Cells.Row num_coluna = ActiveCell.Cells.Column
.
Ultima linha vazia ou em branca da planilha
Pessoalmente não gosto de utilizar este tipo de código (já tive problemas) para ultima linha vazia.
Mas visualmente é mais fácil que o uso do while.
Exemplo de ultima linha vazia:
Range("a20").Select '....Seleciona primeira linha preenchida Selection.End(xlDown).Select '....vai até última linha preenchida x = Selection.Row '....grava na variavel a última linha x = x + 1 ' ...pega a célula em "branco".
O problema está se você tiver uma linha vazia no meio da sua coluna. Se for utilizar este código recomendo classificar antes.
Exemplo de ‘Do While’ – qual a ultima linha preenchida
Este artigo é bem simples, pois o intuito é demonstrar o uso do do while.
Conforme imagem e código abaixo é possível verificar com VBA linha em branco (vazia) e também como usar o “do while” na planilha:
Como o Do while é uma estrutura de repetição (faça enquanto) e com esta vamos usar para repetir a contagem das linhas (contaLinha = contaLinha + 1) enquanto a linha atual não for vazio (verificaCel)
Codigo Ultima Linha com Do while
Sub teste() contaLinha = 1 'Esta variavel irá servir para pular de linha verificaCel = Cells(contaLinha, 1).Value 'Variável para gravar o conteúdo da célula Do While verificaCel "" 'Faça enquanto conteudo da celula diferente de vazio '... contaLinha = contaLinha + 1 'soma ela mesma, pula para próxima linha verificaCel = Cells(contaLinha, 1).Value 'verifica novo conteudo Loop 'volta para o while MsgBox "A linha vazia é " + CStr(contaLinha) 'Mostra mensagem, qual linha é a vazia End Sub