Notifications
Clear all

UDF UnirTexto()

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

Bom dia pessoal, *(sim o dia tem 24 horas então eu posso dizer bom dia a hora que eu quiser)...

Seguinte, eu comecei há cerca de um mês, a utilizar uma das novas funções do Excel 2016, UnirTexto(), que concatena textos com maestria.
Por razões que não vêm ao caso, tive que reinstalar meu Excel 2016 usando a conta MS da empresa e não a pessoal. Com isso consegui liberar os recursos como Power Pivot, Power View, Power Map, que era meu objetivo.
MAS, as funções UnirTexto(), Ses(), Concat() não estão mais presentes. Eu atualizei até a última versão, e mesmo assim nada. Deve ter algo ver com o tipo de assinatura, enfim... tb não vou entrar nesse mérito.

Como eu preciso da função e ela não existia, parei tudo. Eu sou desses, se o Excel não me atende, eu forço a me atender. Criei a UnirTexto() para ser usada como UDF.

Quem sabe o que é UDF e/ou tem um suplemento com funções personalizadas próprias, as famosas UDF *(User Defined Functions = Funções Definidas pelo Usuário), sabe bem como utilizar este código abaixo.
Também pode encontrar em anexo um modelo onde ela funciona.

O código está abaixo:

Option Explicit
'====================================================================
'Nome.........: UnirTexto *(Criada e incluída no Excel 2016, mas ausente nas outras versões)
'Data.........: 29/03/2016 (dmy)
'Autor........: Fernando Fernandes
'Contato......: Fernando.Fernandes@outlook.com.br
'Descrição....: Concatena todos os textos informados no último parâmetro,
'               usando o delimitador para separá-los, ignorando ou não as células vazias
'Forum........: www.Planilhando.com.br
'====================================================================
Public Function UnirTexto(ByVal Delimitador As String, _
                          ByVal IgnorarVazios As Boolean, _
                          ParamArray Celulas() As Variant) As Variant
On Error GoTo TratarErro
Dim Intervalo   As Variant
Dim Resultado   As String
Dim i           As Long
Dim j           As Long
Dim k           As Long
    
    If UBound(Celulas, 1) < LBound(Celulas, 1) Then
        UnirTexto = VBA.Conversion.CVErr(xlErrValue)
        Exit Function
    End If
    
    For i = LBound(Celulas, 1) To UBound(Celulas, 1) Step 1

        If VBA.Information.IsArray(Celulas(i)) Then
        
            Intervalo = Celulas(i)
            For j = LBound(Intervalo, 1) To UBound(Intervalo, 1) Step 1
                For k = LBound(Intervalo, 2) To UBound(Intervalo, 2) Step 1
                    If Not VBA.Information.IsError(Intervalo(j, k)) Then
                        If Not VBA.Strings.Trim(Intervalo(j, k)) = vbNullString Then
                            Resultado = Resultado & Delimitador & Intervalo(j, k)
                        End If
                    End If
                Next k
                
            Next j
            
        Else
        
            If Not VBA.Information.IsError(Celulas(i)) Then
                If Not VBA.Strings.Trim(Celulas(i)) = vbNullString Then
                    Resultado = Resultado & Delimitador & Celulas(i)
                End If
            End If
            
        End If
        
    Next i

    If VBA.Strings.Len(Resultado) > VBA.Strings.Len(Delimitador) Then
        Resultado = VBA.Strings.Right(Resultado, VBA.Strings.Len(Resultado) - VBA.Strings.Len(Delimitador))
    End If
    UnirTexto = Resultado
    Exit Function
TratarErro:
    UnirTexto = VBA.Conversion.CVErr(xlErrValue)
End Function
 
Postado : 29/03/2016 3:03 pm