Notifications
Clear all

Função personalizada para abreviar nomes

4 Posts
1 Usuários
0 Reactions
2,824 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Espero que o código seja útil:

Function ABREVIARNOMES(Célula As Range, ParamArray NomesSemAbreviar()) As String
    Dim PrimeiroNome As String, Texto As String, _
    ÚltimoNome As String, Abrev As String
    Dim i As Integer, k As Integer, Opcional As Integer, Controle As Integer
    Dim Nome, Nomes, NomeSemAbreviar, PosiçãoInicial
    
    Application.Volatile
    
        
    'Se só houver uma palavra, somente ela é retornada
    Texto = Célula
    If InStr(1, Texto, " ") = 0 Then
        ABREVIARNOMES = Texto
        Exit Function
    End If
        
    'Retornar todas a palavras do nome para uma matriz
    Nomes = Split(Texto, " ")
            
    'Retornar o primeiro nome
    PrimeiroNome = Left(Texto, InStr(1, Texto, " ") - 1)
    
    'Retornar o último nome
    ÚltimoNome = Right(Texto, Len(Texto) - InStrRev(Texto, " ", -1))
        
    'Se não for informado o argumento opcional, é atribuída uma cadeia vazia
    If IsMissing(NomesSemAbreviar) Then
    Opcional = 1
    End If
        
    'Loop para percorrer os nomes do texto informado
    For Each Nome In Nomes
        Select Case Len(Nome)
        'Não abreviar conectores como "e"
        Case 1
        Abrev = Abrev & Nome & Space(1)
        'Não abreviar conectores como "de" ou "das"
        Case 2, 3
            If Left(Nome, 1) = "d" Then Abrev = Abrev & Nome & Space(1)
        Case Else
            'Execução para o caso em que não há argumentos opcionais
            If Opcional = 1 Then
                Abrev = Abrev & UCase(Left(Nome, 1)) & "." & Space(1)
            Else
                'Quando há argumentos opcionais testa o nome contra cada um deles
                For Each NomeSemAbreviar In NomesSemAbreviar
                    If Nome = NomeSemAbreviar Then
                    Controle = 1
                    Exit For
                    Else
                    Controle = 0
                    End If
                Next NomeSemAbreviar
                
                If Controle = 1 Then
                'Se for encontrada coincidência com os argumentos opcionais, não realiza abreviatura
                Abrev = Abrev & Nome & Space(1)
                Else
                'Se não for encontrada coincidência com os argumentos opcionais, realiza abreviatura
                Abrev = Abrev & UCase(Left(Nome, 1)) & "." & Space(1)
                End If
            End If
        End Select
    Next Nome
    
    'Criar o nome final definitivo, com abreviaturas e demais considerações
    Abrev = PrimeiroNome & Right(Abrev, Len(Abrev) - InStr(1, Abrev, "."))
    ABREVIARNOMES = Left(Abrev, Len(Abrev) - 3) & ÚltimoNome

End Function

Eis o arquivo com as aplicações: http://www.4shared.com/document/3N7IwZQW/Abreviao_de_Nomes.html

 
Postado : 29/07/2010 8:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bacana !

 
Postado : 02/08/2010 9:08 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito bacana!!!!

 
Postado : 06/08/2010 4:58 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Valeu Adilson.

Muito bom!

 
Postado : 10/12/2010 5:30 pm