Como foi referido num artigo anterior, as formulas personalizadas podem simplificar muitos processos e 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 IfNext 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
Dim 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 IfNext x
SplitByUppecase2 = Trim(result)
End Function
Alguns dos exemplos que vou disponibilizar no blog não são inventados e têm, ou já tiveram uma aplicação prática. O objectivo é de alguns exemplo é mostrar código, algumas soluções e como resolver problemas através do VBA, podendo no entanto não ser um exemplo que se utilize no dia a dia.
Exemplo do artigo: DOWNLOAD DO FICHEIRO
PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!
3 comentários:
Boa tarde!
Como devo fazer para, por exemplo, ao ler um texto e ele ecnontra um @ (arroba), eu queria que ele parasse a pesquisa, printasse o resultado lido e saisse da function. Pode me dar essa ajuda. email jhdpassos@gmail.com Helio
Helio,
Coloca a questão em Portugal-a-Programar com mais detalhes ;)
cara, e seu precisar dividir em colunas depois de separar?
Enviar um comentário