Função de divisão do Excel VBA - explicada com exemplos

Ao trabalhar com o VBA no Excel, pode ser necessário dividir uma string em partes diferentes com base em um delimitador.

Por exemplo, se você tiver um endereço, poderá usar a função VBA Split para obter diferentes partes do endereço que são separadas por uma vírgula (que seria o delimitador neste caso).

SPLIT é uma função de string embutida no Excel VBA que pode ser usada para dividir uma string de texto com base no delimitador.

Função SPLIT do Excel VBA - Sintaxe

Dividir (Expressão, [Delimitador], [Limite], [Comparar])
  • Expressão: Esta é a string que você deseja dividir com base no delimitador. Por exemplo, no caso do exemplo de endereço, todo o endereço seria a 'expressão'. No caso de ser uma string de comprimento zero (“”), a função SPLIT retornaria um array vazio.
  • Delimitador: Este é um argumento opcional. Este é o delimitador usado para dividir o argumento ‘Expressão’. No caso do nosso exemplo de endereço, uma vírgula é um delimitador que é usado para dividir o endereço em diferentes partes. Se você não especificar este argumento, um caractere de espaço é considerado o delimitador padrão. No caso de você fornecer uma string de comprimento zero (“”), toda a string de 'Expressão' é retornada pela função.
  • Limite: Este é um argumento opcional. Aqui você especifica o número total de substrings que deseja retornar. Por exemplo, se você deseja retornar apenas as três primeiras substrings do argumento ‘Expression’, isso seria 3. Se você não especificar este argumento, o padrão é -1, que retorna todas as substrings.
  • Comparar: Este é um argumento opcional. Aqui você especifica o tipo de comparação que deseja que a função SPLIT execute ao avaliar as substrings. As seguintes opções estão disponíveis:
    • Quando a comparação é 0: Esta é uma comparação binária. Isso significa que, se o delimitador for uma string de texto (digamos ABC), isso diferencia maiúsculas de minúsculas. ‘ABC’ não seria igual a ‘abc’.
    • Quando a comparação é 1: Esta é uma comparação de texto. Isso significa que se o seu delimitador for uma string de texto (digamos ABC), mesmo que você tenha 'abc' na string 'Expressão', ele será considerado um delimitador.

Agora que cobrimos o básico da função SPLIT, vamos ver alguns exemplos práticos.

Exemplo 1 - dividir as palavras em uma frase

Suponha que eu tenha o texto - “A Raposa Castanha Rápida Salta Sobre o Cachorro Preguiçoso”.

Posso usar a função SPLIT para colocar cada palavra desta frase em um item separado em uma matriz.

O código abaixo seria para isso:

Sub SplitWords () Dim TextStrng As String Dim Result () As String TextStrng = "A Raposa Castanha Rápida Salta Sobre o Cachorro Preguiçoso" Result () = Split (TextStrng) End Sub

Embora o código não faça nada útil, ele ajudará você a entender o que a função Split no VBA faz.

A função Split divide a string de texto e atribui cada palavra ao array Result.

Portanto, neste caso:

  • Resultado (0) armazena o valor “The”
  • Resultado (1) armazena o valor “Rápido”
  • O resultado (2) armazena o valor “Marrom” e assim por diante.

Neste exemplo, especificamos apenas o primeiro argumento - que é o texto a ser dividido. Como nenhum delimitador foi especificado, ele usa o caractere de espaço como o delimitador padrão.

Nota importante:

  1. A função VBA SPLIT retorna uma matriz que começa na base 0.
  2. Quando o resultado da função SPLIT é atribuído a uma matriz, essa matriz deve ser declarada como um tipo de dados String. Se você declará-lo como um tipo de dados Variant, ele mostrará um erro de incompatibilidade de tipo). No exemplo acima, observe que declarei Result () como um tipo de dados String.

Exemplo 2 - contar o número de palavras em uma frase

Você pode usar a função SPLIT para obter o número total de palavras em uma frase. O truque aqui é contar o número de elementos na matriz que você obtém ao dividir o texto.

O código a seguir mostraria uma caixa de mensagem com a contagem de palavras:

Sub WordCount () Dim TextStrng As String Dim WordCount As Integer Dim Result () As String TextStrng = "A raposa castanha rápida salta sobre o cão preguiçoso" Result = Split (TextStrng) WordCount = UBound (Result ()) + 1 MsgBox "O A contagem de palavras é "& WordCount End Sub

Nesse caso, a função UBound informa o limite superior do array (ou seja, o número máximo de elementos que o array possui). Como a base da matriz é 0, 1 é adicionado para obter a contagem total de palavras.

Você pode usar um código semelhante para criar uma função personalizada em VBA que pegará o texto como entrada e retornará a contagem de palavras.

O código a seguir criará esta função:

Função WordCount (CellRef As Range) Dim TextStrng As String Dim Result () As String Result = Split (WorksheetFunction.Trim (CellRef.Text), "") WordCount = UBound (Result ()) + 1 End Function

Depois de criada, você pode usar a função WordCount como qualquer outra função regular.

Esta função também lida com espaços iniciais, finais e duplos entre as palavras. Isso foi possível usando a função TRIM no código VBA.

Caso você queira aprender mais sobre como essa fórmula funciona para contar o número de palavras em uma frase ou deseja aprender sobre uma forma de fórmula não VBA para obter a contagem de palavras, confira este tutorial.

Exemplo 3 - Usando um delimitador diferente de caractere de espaço

Nos dois exemplos anteriores, usamos apenas um argumento na função SPLIT e os demais foram os argumentos padrão.

Ao usar algum outro delimitador, é necessário especificá-lo na fórmula SPLIT.

No código a seguir, a função SPLIT retorna uma matriz baseada em uma vírgula como delimitador e, em seguida, mostra uma mensagem com cada palavra em uma linha separada.

Sub CommaSeparator () Dim TextStrng As String Dim Result () As String Dim DisplayText As String TextStrng = "The, Quick, Brown, Fox, Jump, Over, The, Lazy, Dog" Result = Split (TextStrng, ",") Para i = LBound (Result ()) To UBound (Result ()) DisplayText = DisplayText & Result (i) & vbNewLine Next i MsgBox DisplayText End Sub

No código acima, usei o loop For Next para percorrer cada elemento do array ‘Result’ e atribuí-lo à variável ‘DisplayText’.

Exemplo 4 - Divida um endereço em três partes

Com a função SPLIT, você pode especificar quantos números de divisões deseja obter. Por exemplo, se eu não especificar nada, todas as instâncias do delimitador serão usadas para dividir a string.

Mas se eu especificar 3 como o limite, a string será dividida em apenas três partes.

Por exemplo, se eu tiver o seguinte endereço:

2703 Winifred Way, Indianapolis, Indiana, 46204

Posso usar a função Split no VBA para dividir este endereço em três partes.

Ele divide os dois primeiros com base no delimitador de vírgula e a parte restante se torna o terceiro elemento da matriz.

O código a seguir mostraria o endereço em três linhas diferentes em uma caixa de mensagem:

Sub CommaSeparator () Dim TextStrng As String Dim Result () As String Dim DisplayText As String TextStrng = "2703 Winifred Way, Indianapolis, Indiana, 46204" Result = Split (TextStrng, ",", 3) For i = LBound (Result ( )) Para UBound (Result ()) DisplayText = DisplayText & Result (i) & vbNewLine Next i MsgBox DisplayText End Sub

Um dos usos práticos disso pode ser quando você deseja dividir um endereço de linha única no formato mostrado na caixa de mensagem. Em seguida, você pode criar uma função personalizada que retorna o endereço dividido em três partes (com cada parte em uma nova linha).

O código a seguir faria isso:

Função ThreePartAddress (cellRef As Range) Dim TextStrng As String Dim Result () As String Dim DisplayText As String Result = Split (cellRef, ",", 3) For i = LBound (Result ()) To UBound (Result ()) DisplayText = DisplayText & Trim (Result (i)) & vbNewLine Next i ThreePartAddress = Mid (DisplayText, 1, Len (DisplayText) - 1) Função final

Depois de ter esse código no módulo, você pode usar a função (ThreePartAddress) na pasta de trabalho como qualquer outra função do Excel.

Esta função tem um argumento - a referência de célula que contém o endereço.

Observe que, para que o endereço resultante apareça em três linhas diferentes, você precisa aplicar o formato de quebra de texto às células (está na guia Página Inicial do grupo Alinhamento). Se o formato ‘Wrap Text’ não estiver habilitado, você verá o endereço inteiro como uma única linha.

Exemplo 5 - Obtenha o nome da cidade a partir do endereço

Com a função Split no VBA, você pode especificar que parte do array resultante deseja usar.

Por exemplo, suponha que estou dividindo o seguinte endereço com base na vírgula como delimitador:

2703 Winifred Way, Indianapolis, Indiana, 46204

A matriz resultante seria semelhante à mostrada abaixo:

{"2703 Winifred Way", "Indianapolis", "Indiana", "46204"}

Como esta é uma matriz, posso escolher exibir ou retornar uma parte específica dessa matriz.

Abaixo está um código para uma função personalizada, onde você pode especificar um número e ele retornará esse elemento da matriz. Por exemplo, se eu quiser o nome do estado, posso especificar 3 (já que é o terceiro elemento da matriz).

Função ReturnNthElement (CellRef As Range, ElementNumber As Integer) Dim Result () As String Result = Split (CellRef, ",") ReturnNthElement = Result (ElementNumber - 1) End Function

A função acima leva dois argumentos, a referência da célula que contém o endereço e o número do elemento que você deseja retornar. A função Split divide os elementos do endereço e os atribui à variável Result.

Em seguida, ele retorna o número do elemento que você especificou como o segundo argumento. Observe que, como a base é 0, ElementNumber-1 é usado para retornar a parte correta do endereço.

Essa fórmula personalizada é mais adequada quando você tem um formato consistente em todos os endereços - ou seja, a cidade é sempre mencionada após as duas vírgulas. Se os dados não forem consistentes, você não obterá o resultado desejado.

Caso queira o nome da cidade, você pode usar 2 como o segundo argumento. Caso você use um número maior que o número total de elementos, ele retornará o #VALOR! erro.

Você pode simplificar ainda mais o código conforme mostrado abaixo:

Função ReturnNthElement (CellRef As Range, ElementNumber As Integer) ReturnNthElement = Split (CellRef, ",") (ElementNumber - 1) Função final

No código acima, em vez de usar a variável Result, ele retorna apenas o número do elemento especificado.

Portanto, se você tiver Split (“Good Morning”) (0), ele retornará apenas o primeiro elemento, que é “Good”.

Da mesma forma, no código acima, ele retorna apenas o número do elemento especificado.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave