Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

Excel: Separar Texto por Maiúsculas

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 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
        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 If 

        Next 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:

Anónimo disse...

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

Jorge Paulino disse...

Helio,

Coloca a questão em Portugal-a-Programar com mais detalhes ;)

Piter Habitzreiter disse...

cara, e seu precisar dividir em colunas depois de separar?

Mensagens Recentes



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico