Como selecionar células/intervalos através de procedimentos do Visual Basic no Excel

A Microsoft fornece exemplos de programação apenas a título informativo, sem qualquer garantia expressa ou implícita, incluindo, sem limitações, as garantias implícitas de comercialização e/ou adequação a um fim específico. Este artigo pressupõe que o utilizador está familiarizado com a linguagem de programação demonstrada e as ferramentas utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às suas necessidades específicas. Os exemplos neste artigo utilizam os métodos do Visual Basic listados na seguinte tabela.

Method             Arguments
------------------------------------------
Activate           none
Cells              rowIndex, columnIndex
Application.Goto   reference, scroll
Offset             rowOffset, columnOffset
Range              cell1
                   cell1, cell2
Resize             rowSize, columnSize
Select             none
Sheets             index (or sheetName)
Workbooks          index (or bookName)
End                direction
CurrentRegion      none

Os exemplos neste artigo utilizam as propriedades na seguinte tabela.

Property         Use
---------------------------------------------------------------------
ActiveSheet      to specify the active sheet
ActiveWorkbook   to specify the active workbook
Columns.Count    to count the number of columns in the specified item
Rows.Count       to count the number of rows in the specified item
Selection        to refer to the currently selected range

Como Selecionar uma Célula na Mesma

Para selecionar a célula D5 na tabela ativa, pode utilizar um dos seguintes exemplos:

ActiveSheet.Cells(5, 4).Select
-or-
ActiveSheet.Range("D5").Select

Como Selecionar uma Célula Noutra Livro no Mesmo Livro

Para selecionar a célula E6 noutra célula do mesmo livro, pode utilizar um dos seguintes exemplos:

Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
   -or-
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))

Em seguida, pode ativar a mesma e, em seguida, utilizar o método 1 acima para selecionar a célula:

Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select

Como Selecionar uma Célula numa Livro Diferente

Para selecionar a célula F7 numa livro diferente, pode utilizar um dos seguintes exemplos:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
-or-
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")

Em seguida, pode ativar a mesma e, em seguida, utilizar o método 1 acima para selecionar a célula:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).Select

Como Selecionar um Intervalo de Células na Mesma

Para selecionar o intervalo C2:D10 na mesma, pode utilizar qualquer um dos seguintes exemplos:

ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select
ActiveSheet.Range("C2:D10").Select
ActiveSheet.Range("C2", "D10").Select

or

ActiveSheet.Range(ActiveSheet.Cells(2, 3), ActiveSheet.Cells(10, 4)).Select

or, alternatively, it could be simplified to this:

Range(Cells(2, 3), Cells(10, 4)).Select

Como Selecionar um Intervalo de Células Noutra Livro no Mesmo Livro

Para selecionar o intervalo D3:E11 noutra livro no mesmo livro, pode utilizar um dos seguintes exemplos:

Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")

Em seguida, pode ativar a mesma e, em seguida, utilizar o método 4 acima para selecionar o intervalo:

Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select

Como Selecionar um Intervalo de Células numa Livro Diferente

Para selecionar o intervalo E4:F12 numa livro diferente, pode utilizar um dos seguintes exemplos:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")
Application.Goto _
      Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")

Em seguida, pode ativar a mesma e, em seguida, utilizar o método 4 acima para selecionar o intervalo:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
   ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select

Como Selecionar um Intervalo com Nome na Mesma

Para selecionar o intervalo com nome "Teste" na mesma, pode utilizar um dos seguintes exemplos:

Range("Test").Select
Application.Goto "Test"

Como Selecionar um Intervalo Com Nome noutra livro no mesmo livro

Para selecionar o intervalo com nome "Teste" noutra livro no mesmo livro, pode utilizar o seguinte exemplo:

Application.Goto Sheets("Sheet1").Range("Test")

Em seguida, pode ativar a mesma e, em seguida, utilizar o método 7 acima para selecionar o intervalo com nome:

Sheets("Sheet1").Activate
Range("Test").Select

Como Selecionar um Intervalo com Nome numa Livro Diferente

Para selecionar o intervalo com nome "Teste" numa lista num livro diferente, pode utilizar o seguinte exemplo:

Application.Goto _
   Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")

Em seguida, pode ativar a mesma e, em seguida, utilizar o método 7 acima para selecionar o intervalo com nome:

Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select

Como Selecionar uma Célula Relativa à Célula Ativa

Para selecionar uma célula que está cinco linhas abaixo e quatro colunas à esquerda da célula ativa, pode utilizar o seguinte exemplo:

ActiveCell.Offset(5, -4).Select

Para selecionar uma célula que se senta duas linhas acima e três colunas à direita da célula ativa, pode utilizar o seguinte exemplo:

ActiveCell.Offset(-2, 3).Select

Nota

Ocorrerá um erro se tentar selecionar uma célula que está "fora da mesma". O primeiro exemplo apresentado acima devolverá um erro se a célula ativa estiver nas colunas A a D, uma vez que mover quatro colunas para a esquerda levaria a célula ativa para um endereço de célula inválido.

Como Selecionar uma Célula Relativa a Outra (Não Ativa) Célula

Para selecionar uma célula que está cinco linhas abaixo e quatro colunas à direita da célula C7, pode utilizar um dos seguintes exemplos:

ActiveSheet.Cells(7, 3).Offset(5, 4).Select
ActiveSheet.Range("C7").Offset(5, 4).Select

Como Selecionar um Offset de Intervalo de Células a partir de um Intervalo Especificado

Para selecionar um intervalo de células com o mesmo tamanho que o intervalo com nome "Teste", mas que é deslocado quatro linhas para baixo e três colunas para a direita, pode utilizar o seguinte exemplo:

ActiveSheet.Range("Test").Offset(4, 3).Select

Se o intervalo com nome se encontrar noutra (não na lista ativa), ative essa lista primeiro e, em seguida, selecione o intervalo utilizando o seguinte exemplo:

Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select

Como Selecionar um Intervalo Especificado e Redicionar a Seleção

Para selecionar o intervalo com nome "Base de Dados" e, em seguida, expandir a seleção em cinco linhas, pode utilizar o seguinte exemplo:

Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, _
   Selection.Columns.Count).Select

Como selecionar um Intervalo Especificado, Desdoculá-lo e, em seguida, Redicioná-lo

Para selecionar um intervalo quatro linhas abaixo e três colunas à direita do intervalo com nome "Base de Dados" e incluir duas linhas e uma coluna mais do que o intervalo com nome, pode utilizar o seguinte exemplo:

Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, _
   Selection.Columns.Count + 1).Select

Como Selecionar a União de Dois ou Mais Intervalos Especificados

Para selecionar a união (ou seja, a área combinada) dos dois intervalos com nome "Teste" e "Amostra", pode utilizar o seguinte exemplo:

Application.Union(Range("Test"), Range("Sample")).Select

Nota

que ambos os intervalos têm de estar na mesma página para que este exemplo funcione. Tenha também em atenção que o método União não funciona em folhas. Por exemplo, esta linha funciona bem.

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))

mas esta linha

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))

devolve a mensagem de erro:

O método de união da turma de aplicações falhou

Como Selecionar a Interseção de Dois ou Mais Intervalos Especificados

Para selecionar a interseção dos dois intervalos com nome "Teste" e "Amostra", pode utilizar o seguinte exemplo:

Application.Intersect(Range("Test"), Range("Sample")).Select

Tenha em atenção que ambos os intervalos têm de estar na mesma página de trabalho para que este exemplo funcione.

Os exemplos 17-21 neste artigo referem-se ao seguinte conjunto de exemplo de dados. Cada exemplo indica o intervalo de células nos dados de exemplo que seriam selecionados.

A1: Name    B1: Sales    C1: Quantity
A2: a       B2: $10      C2: 5
A3: b       B3:          C3: 10
A4: c       B4: $10      C4: 5
A5:         B5:          C5:
A6: Total   B6: $20      C6: 20

Como Selecionar a Última Célula de uma Coluna de Dados Contíguos

Para selecionar a última célula numa coluna contígua, utilize o seguinte exemplo:

ActiveSheet.Range("a1").End(xlDown).Select

Quando este código é utilizado com a tabela de exemplo, a célula A4 será selecionada.

Como Selecionar a Célula Em Branco na Parte Inferior de uma Coluna de Dados Contíguos

Para selecionar a célula abaixo de um intervalo de células contíguas, utilize o seguinte exemplo:

ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select

Quando este código é utilizado com a tabela de exemplo, a célula A5 será selecionada.

Como Selecionar um Intervalo Inteiro de Células Contíguas numa Coluna

Para selecionar um intervalo de células contíguas numa coluna, utilize um dos seguintes exemplos:

ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
   -or-
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _
      End(xlDown).Address).Select

Quando este código é utilizado com a tabela de exemplo, as células A1 a A4 serão selecionadas.

Como Selecionar um Intervalo Inteiro de Células Não Contíguas numa Coluna

Para selecionar um intervalo de células não contíguo, utilize um dos seguintes exemplos:

ActiveSheet.Range("a1",ActiveSheet.Range("a" & ActiveSheet.Rows.Count).End(xlUp)).Select
   -or-
ActiveSheet.Range("a1:" & ActiveSheet.Range("a" & ActiveSheet.Rows.Count). _
   End(xlUp).Address).Select

Quando este código é utilizado com a tabela de exemplo, seleciona as células A1 a A6.

Como Selecionar um Intervalo Retangular de Células

Para selecionar um intervalo retangular de células à volta de uma célula, utilize o método Região Atual. O intervalo selecionado pelo método Região Atual é uma área vinculada por qualquer combinação de linhas e colunas em branco. Segue-se um exemplo de como utilizar o método Região Atual:

ActiveSheet.Range("a1").CurrentRegion.Select

Este código irá selecionar as células A1 a C4. Outros exemplos para selecionar o mesmo intervalo de células são listados abaixo:

ActiveSheet.Range("a1", _
   ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
   -or-
ActiveSheet.Range("a1:" & _
   ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select

Em alguns casos, poderá querer selecionar as células A1 a C6. Neste exemplo, o método Região Atual não irá funcionar devido à linha em branco na Linha 5. Os seguintes exemplos irão selecionar todas as células:

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
    -or-
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & _
   ActiveSheet.Cells(lastRow, lastCol).Address).Select

Como Selecionar Múltiplas Colunas Não Contíguas de Comprimento Variável

Para selecionar múltiplas colunas não contíguas de comprimento variável, utilize a seguinte tabela de exemplo e exemplo de macro:

A1: 1  B1: 1  C1: 1  D1: 1
A2: 2  B2: 2  C2: 2  D2: 2
A3: 3  B3: 3  C3: 3  D3: 3
A4:    B4: 4  C4: 4  D4: 4
A5:    B5: 5  C5: 5  D5:
A6:    B6:    C6: 6  D6:
StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a,b).Select

Quando este código é utilizado com a tabela de exemplo, as células A1:A3 e C1:C6 serão selecionadas.

Notas nos exemplos

Normalmente, a propriedade ActiveSheet pode ser omitida porque é implícita se não for nomeada uma folha específica. Por exemplo, em vez de

ActiveSheet.Range("D5").Select

pode utilizar:

Range("D5").Select

Normalmente, a propriedade ActiveWorkbook também pode ser omitida. A menos que seja dado um nome a um livro específico, o livro ativo está implícito.

Quando utiliza o método Application.Goto, se quiser utilizar dois métodos de Células no método Intervalo quando o intervalo especificado estiver noutra folha de trabalho (não ativa), tem de incluir o objeto Folhas de cada vez. Por exemplo:

    With ActiveWorkbook.Sheets("Sheet1")
        Application.Goto .Range(.Cells(2, 3), .Cells(4, 5))
    End With

Para qualquer item entre aspas (por exemplo, o intervalo com nome "Teste"), também pode utilizar uma variável cujo valor é uma cadeia de texto. Por exemplo, em vez de

ActiveWorkbook.Sheets("Sheet1").Activate

pode utilizar

ActiveWorkbook.Sheets(myVar).Activate

em que o valor de myVar é "Folha1".