O Excel VBA possui dois métodos, pertencentes ao objeto Aplicativo, para manipular dois ou mais intervalos: União e Cruzamento.
União
O método Union retorna todas as células em dois ou mais intervalos passados como seu argumento.
O comando a seguir selecionará o intervalo mostrado na imagem abaixo:
1 | União (intervalo ("A1: B4"), intervalo ("B3: C6")). Selecione |
Você pode atribuir qualquer valor ou fórmula ao intervalo retornado pelo método Union:
1 | União (intervalo ("A1: B4"), intervalo ("B3: C6")) = 10 |
Isso inserirá o valor 10 em cada célula da União.
Você pode agrupar qualquer função que resuma um intervalo em torno de um método Union. O exemplo a seguir retornará a soma dos valores nos intervalos A1: B4 e B3: C6:
1 | Result = Application.WorksheetFunction.Sum (union (Range ("A1: B4"), Range ("B3: C6"))) |
Você pode se surpreender ao obter o valor em Resultado como 160! Embora existam apenas 14 células na União (8 em cada intervalo com 2 sendo comum) quando você olha para Seleção, União na verdade retorna 16 células, portanto, o Resultado como 160.
Cruzar
O método Intersect retorna apenas as células comuns em dois ou mais intervalos passados como seu argumento.
O comando a seguir selecionará o intervalo mostrado (área cinza) na imagem abaixo:
1 | Cruzar (intervalo ("A1: B4"), intervalo ("B3: C6")). Selecione |
Uso de Intersect
O uso mais comum do Intersect é em eventos associados a uma planilha ou pasta de trabalho. É usado para testar se as células alteradas pertencem a um intervalo de interesse. A seguir, verifique se as células alteradas (identificadas por Alvo) e Intervalo A1: A10 são comuns e tome as medidas adequadas se forem.
O objeto Intersect não retorna nada se não houver células comuns, então Intersect (Target, Range (“A1: A10”)) Is Nothing será True se não houver células comuns. Adicionar Não à condição torna-a Verdadeira apenas se o resultado do teste Intersect (Alvo, Intervalo (“A1: A10”)) É Nada for Falso, em outras palavras Alvo e Intervalo A1: A10 têm algumas células em comum.
12345 | Sub-planilha privada_Change (ByVal Target As Range)If Not Intersect (Target, Range ("A1: A10")) Is Nothing Then'Realize a ação desejadaFim seEnd Sub |
Escrito por: Vinamra Chandra