Trabalhando com Intervalos
Deslize para mostrar o menu
Seleção de Intervalos
Utilizado durante a exploração; em código de produção, evite .Select e prefira referenciar intervalos diretamente:
ws.Range("A1:I1").Select ' fine for exploring
ws.Range("A1:I1").Font.Bold = True ' better — skips Select entirely
Offset
Move uma referência relativa a si mesma — leia como (linhas para baixo, colunas para a direita), com números negativos movendo para cima ou para a esquerda:
Dim orderCell As Range
Set orderCell = ws.Range("A2") ' ORD1001
Debug.Print orderCell.Offset(1, 0).Value ' one row down → ORD1002
Debug.Print orderCell.Offset(0, 2).Value ' two columns right → Acme Corp
Debug.Print orderCell.Offset(-1, 0).Value ' one row up → the header, "Order ID"
Redimensionar
Altera quantas linhas ou colunas um intervalo cobre, mantendo fixa a sua célula superior esquerda:
Dim headerRow As Range
Set headerRow = ws.Range("A1")
Set headerRow = headerRow.Resize(1, 9) ' now covers A1:I1, the full header
Combine Offset e Resize para capturar "tudo abaixo do cabeçalho" sem saber a quantidade de linhas com antecedência:
Dim dataRange As Range
Set dataRange = ws.Range("A1").CurrentRegion
Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)
' dataRange now covers A2:I6 — every order, no header
Intervalos Nomeados
Atribua um nome em inglês simples a um intervalo para referenciá-lo em vez de usar o endereço:
ThisWorkbook.Names.Add Name:="OrdersTable", RefersTo:=ws.Range("A1:I6")
Debug.Print ws.Range("OrdersTable").Rows.Count
Tarefa
- Começando em Range("A2") (ORD1001), utilize
Offsetpara exibir o Produto e o Total do pedido duas linhas abaixo (ORD1003) — sem digitar "A4", "D4" ou "H4". - Use
CurrentRegion,OffseteResizejuntos para selecionar apenas as linhas de dados (sem o cabeçalho) e exibir quantas linhas esse intervalo contém. - Crie um intervalo nomeado chamado
OrdersDatacobrindo o mesmo intervalo apenas de dados e confirme que é possível referenciá-lo pelo nome na Janela Imediata.
1. Usando Offset de A2 para alcançar ORD1003
- Definir uma variável
RangeparaA2— esta é a célula âncora, exatamente como no exemplo trabalhado do capítulo. - "Duas linhas abaixo" e "mesma coluna" significa que o primeiro argumento de
Offset(linhas) é 2 e o segundo (colunas) é 0 — para a coluna Product. - Total está em uma coluna diferente, mas na mesma linha — então apenas o número do deslocamento de coluna muda entre suas duas chamadas de
Offset, não o de linha. - Conte as colunas a partir da posição de A2: Product está 3 colunas à direita de Order ID; Total está 7 colunas à direita.
2. Combinando CurrentRegion, Offset e Resize
CurrentRegionemA1retorna toda a tabela, incluindo o cabeçalho.Offset(1, 0)desloca todo esse bloco uma linha para baixo — suficiente para remover o cabeçalho do topo.Resizeprecisa reduzir a contagem de linhas exatamente pela mesma quantidade que você deslocou, ou a borda inferior ultrapassará uma linha além dos dados reais.
3. Criando e testando um intervalo nomeado
- Intervalos nomeados são adicionados através de
ThisWorkbook.Names.Add, atribuindo umName:=e umRefersTo:=— você pode reutilizar a mesma expressão de intervalo da dica 2 em vez de construí-la novamente do zero. - Para referenciá-lo depois, use
Range("OrdersData")— o nome se torna uma string simples, não uma variável.
Sub NavigateWithoutHardcoding()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
' --- 1. Offset from A2 to reach ORD1003 ---
Dim orderCell As Range
Set orderCell = ws.Range("A2")
Debug.Print orderCell.Offset(2, 3).Value ' Product
Debug.Print orderCell.Offset(2, 7).Value ' Total
' --- 2. CurrentRegion + Offset + Resize ---
Dim dataRange As Range
Set dataRange = ws.Range("A1").CurrentRegion
Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)
Debug.Print "Data rows: " & dataRange.Rows.Count
' --- 3. Named range ---
ThisWorkbook.Names.Add Name:="OrdersData", RefersTo:=dataRange
End Sub
Execute o Sub (F5) e, em seguida, na Janela Imediata (Ctrl+G) digite:
?Range("OrdersData").Rows.Count
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo