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