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