Como selecionar células/intervalos usando procedimentos do Visual Basic no Excel

A Microsoft oferece exemplos de programação somente para ilustração, sem garantias expressas ou implícitas. Isso inclui, mas não está limitado a, as garantias implícitas de qualidade comercial ou conformidade para uma determinada finalidade. Este artigo supõe que você conhece a linguagem de programação que está sendo demonstrada e as ferramentas usadas nos processos de criação e depuração. Os engenheiros de suporte da Microsoft podem ajudá-lo, fornecendo a explicação da funcionalidade de determinado procedimento, mas não modificarão estes exemplos para fornecer funcionalidade adicional nem criarão procedimentos específicos para atender às suas necessidades específicas. Os exemplos neste artigo usam os métodos do Visual Basic listados na tabela a seguir.

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 usam as propriedades na tabela a seguir.

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 planilha ativa

Para selecionar a célula D5 na planilha ativa, você pode usar um dos seguintes exemplos:

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

Como selecionar uma célula em outra planilha na mesma pasta de trabalho

Para selecionar a célula E6 em outra planilha na mesma pasta de trabalho, você pode usar um dos seguintes exemplos:

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

Ou você pode ativar a planilha e usar o método 1 acima para selecionar a célula:

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

Como selecionar uma célula em uma planilha em uma pasta de trabalho diferente

Para selecionar a célula F7 em uma planilha em uma pasta de trabalho diferente, você pode usar um dos seguintes exemplos:

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

Ou você pode ativar a planilha e usar 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 planilha ativa

Para selecionar o intervalo C2:D10 na planilha ativa, você pode usar 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 em outra planilha na mesma pasta de trabalho

Para selecionar o intervalo D3:E11 em outra planilha na mesma pasta de trabalho, você pode usar um dos seguintes exemplos:

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

Ou você pode ativar a planilha e usar 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 em uma planilha em uma pasta de trabalho diferente

Para selecionar o intervalo E4:F12 em uma planilha em uma pasta de trabalho diferente, você pode usar um dos seguintes exemplos:

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

Ou você pode ativar a planilha e usar 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 nomeado na planilha ativa

Para selecionar o intervalo nomeado "Test" na planilha ativa, você pode usar um dos seguintes exemplos:

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

Como selecionar um intervalo nomeado em outra planilha na mesma pasta de trabalho

Para selecionar o intervalo nomeado "Testar" em outra planilha na mesma pasta de trabalho, você pode usar o seguinte exemplo:

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

Ou você pode ativar a planilha e usar o método 7 acima para selecionar o intervalo nomeado:

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

Como selecionar um intervalo nomeado em uma planilha em uma pasta de trabalho diferente

Para selecionar o intervalo nomeado "Test" em uma planilha em uma pasta de trabalho diferente, você pode usar o seguinte exemplo:

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

Ou você pode ativar a planilha e usar o método 7 acima para selecionar o intervalo nomeado:

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

Como selecionar uma célula relativa à célula ativa

Para selecionar uma célula que esteja cinco linhas abaixo e quatro colunas à esquerda da célula ativa, você pode usar o seguinte exemplo:

ActiveCell.Offset(5, -4).Select

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

ActiveCell.Offset(-2, 3).Select

Observação

Ocorrerá um erro se você tentar selecionar uma célula que esteja "fora da planilha". O primeiro exemplo mostrado acima retornará um erro se a célula ativa estiver nas colunas A a D, já 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 célula (não a ativa)

Para selecionar uma célula que esteja cinco linhas abaixo e quatro colunas à direita da célula C7, você pode usar um dos seguintes exemplos:

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

Como selecionar um intervalo de deslocamento de células de um intervalo especificado

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

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

Se o intervalo nomeado estiver em outra planilha (não na ativa), ative-a primeiro e selecione o intervalo usando o seguinte exemplo:

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

Como selecionar um intervalo especificado e redimensionar a seleção

Para selecionar o intervalo nomeado "Banco de Dados" e estender a seleção em cinco linhas, você pode usar o seguinte exemplo:

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

Como selecionar um intervalo especificado, desadimensioná-lo e redimensioná-lo

Para selecionar um intervalo de quatro linhas abaixo e três colunas à direita do intervalo nomeado "Banco de Dados" e incluir duas linhas e uma coluna a mais do que o intervalo nomeado, você pode usar 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 nomeados "Teste" e "Exemplo", você pode usar o seguinte exemplo:

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

Observação

que ambos os intervalos devem estar na mesma planilha para que este exemplo funcione. Observe também que o método Union não funciona entre planilhas. Por exemplo, essa 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"))

retorna a mensagem de erro:

Falha no método Union da classe de aplicativo

Como selecionar a interseção de dois ou mais intervalos especificados

Para selecionar a interseção dos dois intervalos nomeados "Teste" e "Exemplo", você pode usar o seguinte exemplo:

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

Observe que ambos os intervalos devem estar na mesma planilha para que este exemplo funcione.

Os exemplos 17-21 neste artigo referem-se ao conjunto de dados de exemplo a seguir. 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 em uma coluna contígua, use o seguinte exemplo:

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

Quando esse código for usado 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, use o seguinte exemplo:

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

Quando esse código for usado com a tabela de exemplo, a célula A5 será selecionada.

Como selecionar um intervalo inteiro de células contíguas em uma coluna

Para selecionar um intervalo de células contíguas em uma coluna, use 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 esse código é usado 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 em uma coluna

Para selecionar um intervalo de células que não são contíguas, use 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 esse código for usado com a tabela de exemplo, ele selecionará as células A1 a A6.

Como selecionar um intervalo retangular de células

Para selecionar um intervalo retangular de células ao redor de uma célula, use o método CurrentRegion. O intervalo selecionado pelo método CurrentRegion é uma área limitada por qualquer combinação de linhas em branco e colunas em branco. Veja a seguir um exemplo de como usar o método CurrentRegion:

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

Esse código selecionará as células A1 a C4. Outros exemplos para selecionar o mesmo intervalo de células estã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, talvez você queira selecionar as células A1 a C6. Neste exemplo, o método CurrentRegion não funcionará devido à linha em branco na Linha 5. Os exemplos a seguir selecionarão 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 várias colunas não contíguas de comprimento variável

Para selecionar várias colunas não contíguas de comprimento variável, use o exemplo de macro e tabela de exemplo a seguir:

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 esse código é usado com a tabela de exemplo, as células A1:A3 e C1:C6 serão selecionadas.

Observações sobre os exemplos

A propriedade ActiveSheet geralmente pode ser omitida, porque está implícita se uma planilha específica não for nomeada. Por exemplo, em vez de

ActiveSheet.Range("D5").Select

você pode usar:

Range("D5").Select

A propriedade ActiveWorkbook também geralmente pode ser omitida. A menos que uma pasta de trabalho específica seja nomeada, a pasta de trabalho ativa estará implícita.

Ao usar o método Application.Goto, se você quiser usar dois métodos Cells dentro do método Range quando o intervalo especificado estiver em outra planilha (não na ativa), inclua o objeto Sheets a 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 nomeado "Test"), você também pode usar uma variável cujo valor é uma cadeia de caracteres de texto. Por exemplo, em vez de

ActiveWorkbook.Sheets("Sheet1").Activate

você pode usar

ActiveWorkbook.Sheets(myVar).Activate

em que o valor de myVar é "Sheet1".