Em VBA as formulas personalizadas podem simplificar muitos processos, permitindo criar fórmulas/operações à medida de cada necessidade.

Os seguintes exemplos mostram algumas formas de como separar um texto com base nas maiúsculas.

Por exemplo, estando o nome “JorgePaulino” numa célula e pretendendo separar esse nome, em outra célula, através das letras que se encontram em maiúsculas de modo a ficar “Jorge Paulino”.

Uma das formas de fazer esta separação é correr todas as letras e da frase e verificar qual o valor Ascii de cada letra/símbolo. Com base nesse resultado, adiciona-se ou não, um espaço de modo a separar o texto final (Método #1). As tabelas de códigos Ascii estão disponíveis nos ficheiros Help do Excel ou nos seguintes links da MSDN:

Tabela de Códigos Ascii – Parte 1
Tabela de Códigos Ascii – Parte 2

Outra forma de separar o texto é utilizando uma lista de letras/símbolos que irão servir para separar o texto e, através da função InStr() que verifica a posição de uma letra numa string, separar ou não (Método #2). A vantagem desta segunda forma é apenas que não é necessário saber os códigos Ascii e é mais simples de adicionar/remover condições para separar o texto.

Por exemplo, se fosse necessário separar também por um traço (-), bastava inseri-lo no final da string.

Segue o código dos dois métodos:

    ’ —————————————————————— 
    ’ Função que separa uma palavra com base nas letras maiúsculas 
    ’ 
    ’ Método #1 – Ascii 
    ’ —————————————————————— 
    Public Function SplitByUppecase(ByVal rg As Range) As String 
        Dim ascValue As Integer 
        Dim x As Integer 
        Dim c As String 
        Dim result As String 

         ‘ Ciclo em todas as letras da palavra 
        For x = 1 To Len(rg.Text) 

             ‘ Guarda a informação da letra actual 
            c = Mid(rg.Text, x, 1)

             ‘ Retorna o valor inteiro do código ascii de cada letra 
            ascValue = Asc(c)

             ‘ Caso o código pertença a uma letra maiúscula 
            ’ coloca um espaço (separador) e de pois a letra 
            If ascValue >= 65 And ascValue <= 90 Then 
                result = result & ” “ & c 
            Else 
                result = result & c 
            End If

         Next x 

         SplitByUppecase = Trim(result)

    End Function 
    ’ —————————————————————— 
    ’ Função que separa uma palavra com base nas letras maiúsculas 
    ’ 
    ’ Método #2 – Usando InStr() 
    ’ —————————————————————— 
    Public Function SplitByUppecase2(ByVal rg As Range) As String 
        Dim matchString As String 
        Dim c As String, result As String 
        Dim x As Integer 

         ‘ Lista de letra que vão servir para separar o texto 
        matchString = ”ABCDEFGHIJKLMNOPQRSTUVXYZW”

         ‘ Ciclo em todas as letras da palavra 
        For x = 1 To Len(rg.Text)

             ‘ Guarda a informação da letra actual 
            c = Mid(rg.Text, x, 1) 

             ‘ Verifica se a letra actual está na máscara, usando a 
            ’ função InStr(), que retorna a posição da letra na string 
            If InStr(1, matchString, c, vbBinaryCompare) > 0 Then 
                result = result & ” “ & c 
            Else 
                result = result & c 
            End If 

        Next x

        SplitByUppecase2 = Trim(result) 

    End Function

 

São dois métodos que permitem obter o mesmo resultado. Em determinadas situações, um pode ser mais útil do que outro, como por exemplo no método 2, poder definir novos elementos de separação.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s