Dicas de VBA – Separar Texto por Maiúsculas

5 Comentários

Por Jorge Paulino para o Pplware!

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.

 

Exemplo do artigo: SepararMaiusculas

Escrito por: Jorge Paulino
Homepage: Página Autor: Jorge Paulino

Comentários

5

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de João Pinto

    Bom artigo, amigo Jorge!

    1. Avatar de Jorge Paulino

      Obrigado João 😉

      Um abraço

  2. Avatar de Pedro A.
    Pedro A.

    Esse método 2 é de génio. Muito bom, eu teria feito mais um loop 🙁 Mas sou apenas amador 😉

  3. Avatar de joao marcos
    joao marcos

    ola meu nome e joão marcos estou precisando de ajudar , queria um codigo em vba , para usar no power point para colorir a celula de uma tabela no power point me ajuda ?

    1. Avatar de Jorge Paulino

      Isso não tem nada a ver com o artigo!

      Coloca a questão no fórum ou em http://www.portugal-a-programar.pt