Notifications
Clear all

Abreviar nomes do meio

2 Posts
2 Usuários
0 Reactions
1,430 Visualizações
(@matheusdsr)
Posts: 4
New Member
Topic starter
 

Olá, Amigos.

Preciso de uma ajuda, estava com um duvida para saber como se abreviava nomes do meio numa célula no Excel, achei um excelente Código de autoria de Adilson Soledade moderador da comunidade, porém gostaria de saber se teria como o código VBA fornecer as abreviações mas sem os pontos, nome completo (José Anchieta Santos Neves) o código fornece assim(José A. S. Neves), gostaria sem os pontos(José A S Neves). Desde já agradeço pela ajuda.

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
 
Postado : 03/07/2018 6:03 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Matheusdsr,

Boa noite!

Antes de qualquer coisa, pedimos, por gentileza, ao postar código VBA no fórum, utilizar a ferramenta CODE existente logo acima da caixa de mensagens (quinto botão da esquerda para a direita).

Quanto a sua demanda, veja se é assim.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 03/07/2018 7:49 pm