Excel VBA – União e Intersecção
In this Article
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
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
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