Excel VBA – União e Intersecção

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on September 7, 2023

O Excel VBA tem dois métodos, pertencentes ao objeto Application, para manipular dois ou mais intervalos: Union (União) e Intersect (Intesecção).

União

O método Union retorna todas as células em dois ou mais intervalos passados como argumento.

O comando a seguir selecionará o intervalo mostrado na imagem abaixo:

Union(Range("A1:B4"),Range("B3:C6")).Select

vba union selection

Você pode atribuir qualquer valor ou fórmula ao intervalo retornado pelo método Union:

Union(Range("A1:B4"), Range("B3:C6")) = 10

Isso inserirá o valor 10 em cada célula da União.

Você pode envolver qualquer função que resuma um intervalo em um método Union. O exemplo a seguir retornará a soma dos valores nos intervalos A1:B4 e B3:C6:

Resultado = Application.WorksheetFunction.Sum(Union(Range("A1:B4"), Range("B3:C6")))

Você pode se surpreender ao ver que o valor em Result é 160! Embora existam apenas 14 células na União (8 em cada intervalo, sendo 2 comuns), quando você olha para a Seleção, a União retorna, na verdade, 16 células, o que faz com que o Resultado seja 160.

Intersecção

O método Intersect retorna apenas as células comuns em dois ou mais intervalos passados como argumento.

O comando a seguir selecionará o intervalo mostrado (área cinza) na imagem abaixo:

Intersect(Range("A1:B4"),Range("B3:C6")).Select

vba intersect selection

Uso do Intersect

O uso mais comum do Intersect é em eventos associados a uma planilha ou pasta de trabalho. Ele é usado para testar se a(s) célula(s) alterada(s) pertence(m) a um intervalo de interesse. O exemplo a seguir verifica se a(s) célula(s) alterada(s) (identificada(s) por Target) e o intervalo A1:A10 são comuns e toma as medidas apropriadas se forem.

O objeto Intersect não retorna nada se não houver células comuns, portanto Intersect(Target, Range(“A1:A10”)) Is Nothing será True se não houver células comuns. Adicionar Not à condição a torna True somente se o resultado do teste Intersect(Target, Range(“A1:A10”)) Is Nothing for False, em outras palavras, Target e Range A1:A10 têm algumas células em comum.

Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
          ' Tomar a ação desejada
     End If
End Sub

Escrito por: Vinamra Chandra

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA