Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Navegação entre Planilhas | Trabalhando com Dados do Excel
VBA do Excel para Automação Empresarial

Navegação entre Planilhas

Deslize para mostrar o menu

Dados reais não vêm com um rótulo indicando onde terminam. Fixar o intervalo Range("A1:I5") causa problemas assim que alguém adiciona um sexto pedido — por isso, é necessário perguntar à planilha onde seus dados terminam.

Encontrando a Última Linha

A linha de código mais utilizada em todo este curso:

Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Leia da direita para a esquerda: comece na parte inferior da coluna A (ws.Rows.Count), suba (End(xlUp)) até encontrar a primeira célula ocupada e retorne o número da linha. Funciona independentemente da quantidade de pedidos existentes.

Figura 3.2

Encontrando a Última Coluna

Funciona da mesma forma, mas na horizontal:

Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

UsedRange

Relata a área retangular completa da planilha que já conteve dados — útil para uma verificação rápida, mas deve ser usada com cautela: ela lembra células que já tiveram dados mesmo após a exclusão do conteúdo, podendo superestimar o intervalo real de dados.

Debug.Print ws.UsedRange.Address        ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count     ' 6

CurrentRegion

Geralmente a ferramenta mais adequada: expande a partir de uma única célula até o bloco contíguo de dados ao redor, parando na primeira linha ou coluna em branco — correspondendo exatamente a uma tabela limpa como Orders:

Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address           ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1    ' 5 — subtract 1 to exclude the header

Tarefa

  1. Escrever um Sub que encontre a última linha usando o método End(xlUp) e imprima no Immediate Window.
  2. No mesmo Sub, encontrar a última linha de uma segunda forma usando CurrentRegion.Rows.Count e imprimir também — confirmar se os valores coincidem.
  3. Adicionar manualmente um sexto pedido na linha 7 da planilha, executar novamente a macro e confirmar se ambos os métodos agora reportam 7 sem alterações no código:
Dica
expand arrow

1. Encontrando a última linha com End(xlUp)

  • Início a partir do final da coluna A e salto para cima — o mesmo padrão da seção "Finding the last row" do Capítulo 3.
  • Debug.Print para exibir o resultado na Janela Imediata (Ctrl+G).

2. Encontrando de outra forma com CurrentRegion

  • CurrentRegion expande a partir de uma célula inicial (tente Range("A1")) para o bloco contíguo completo.
  • .Rows.Count nessa região inclui a linha de cabeçalho — lembre-se da observação do capítulo sobre subtrair 1 se quiser apenas as linhas de dados. Como esta tarefa pede apenas para comparar os dois métodos, imprima primeiro a contagem bruta e depois analise o cabeçalho.

3. Adicionando uma sexta linha e executando novamente

  • Nenhuma alteração no código é necessária — basta digitar um novo pedido diretamente na linha 7 da planilha e executar o mesmo Sub novamente.
Solução
expand arrow
Sub CompareLastRowMethods()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    Dim lastRowMethod1 As Long
    lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    Debug.Print "End(xlUp): " & lastRowMethod1

    Dim lastRowMethod2 As Long
    lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
    Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Navegação entre Planilhas

Dados reais não vêm com um rótulo indicando onde terminam. Fixar o intervalo Range("A1:I5") causa problemas assim que alguém adiciona um sexto pedido — por isso, é necessário perguntar à planilha onde seus dados terminam.

Encontrando a Última Linha

A linha de código mais utilizada em todo este curso:

Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Leia da direita para a esquerda: comece na parte inferior da coluna A (ws.Rows.Count), suba (End(xlUp)) até encontrar a primeira célula ocupada e retorne o número da linha. Funciona independentemente da quantidade de pedidos existentes.

Figura 3.2

Encontrando a Última Coluna

Funciona da mesma forma, mas na horizontal:

Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

UsedRange

Relata a área retangular completa da planilha que já conteve dados — útil para uma verificação rápida, mas deve ser usada com cautela: ela lembra células que já tiveram dados mesmo após a exclusão do conteúdo, podendo superestimar o intervalo real de dados.

Debug.Print ws.UsedRange.Address        ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count     ' 6

CurrentRegion

Geralmente a ferramenta mais adequada: expande a partir de uma única célula até o bloco contíguo de dados ao redor, parando na primeira linha ou coluna em branco — correspondendo exatamente a uma tabela limpa como Orders:

Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address           ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1    ' 5 — subtract 1 to exclude the header

Tarefa

  1. Escrever um Sub que encontre a última linha usando o método End(xlUp) e imprima no Immediate Window.
  2. No mesmo Sub, encontrar a última linha de uma segunda forma usando CurrentRegion.Rows.Count e imprimir também — confirmar se os valores coincidem.
  3. Adicionar manualmente um sexto pedido na linha 7 da planilha, executar novamente a macro e confirmar se ambos os métodos agora reportam 7 sem alterações no código:
Dica
expand arrow

1. Encontrando a última linha com End(xlUp)

  • Início a partir do final da coluna A e salto para cima — o mesmo padrão da seção "Finding the last row" do Capítulo 3.
  • Debug.Print para exibir o resultado na Janela Imediata (Ctrl+G).

2. Encontrando de outra forma com CurrentRegion

  • CurrentRegion expande a partir de uma célula inicial (tente Range("A1")) para o bloco contíguo completo.
  • .Rows.Count nessa região inclui a linha de cabeçalho — lembre-se da observação do capítulo sobre subtrair 1 se quiser apenas as linhas de dados. Como esta tarefa pede apenas para comparar os dois métodos, imprima primeiro a contagem bruta e depois analise o cabeçalho.

3. Adicionando uma sexta linha e executando novamente

  • Nenhuma alteração no código é necessária — basta digitar um novo pedido diretamente na linha 7 da planilha e executar o mesmo Sub novamente.
Solução
expand arrow
Sub CompareLastRowMethods()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    Dim lastRowMethod1 As Long
    lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    Debug.Print "End(xlUp): " & lastRowMethod1

    Dim lastRowMethod2 As Long
    lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
    Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 2
some-alt