Notifications
Clear all

Concaternar Complexo

4 Posts
4 Usuários
0 Reactions
1,208 Visualizações
(@andrea-f)
Posts: 0
New Member
Topic starter
 

Pessoal,

Tenho a seguinte planilha anexa que contém um concatenar um pouco mais complexo. Ele busca para mim os números das NFs e me traz o item e o código chamado migo, que podem ser vários números. Esse é um relatório que é extraído do meu sistema.
Elaborei 2 fórmulas que nomeie como "concatenarcomplexo" e "concatenarcomplexomigo".
Porém em algumas situações os números se repetem e gostaria de incluir dentro dessas fórmulas algo que eliminasse números repetidos, deixei em amarelo na planilha.
Se estiver confuso me avisem que tento explicar novamente.

Abraços,

Andréa

 
Postado : 13/05/2016 12:26 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Andrea, em uma analise rápida em seu modelo, vi que os numeros da NF se repetem devido os mesmos estarem repetidos na aba BASE, por exemplo a NF nº 50109, tem 3 lançamentos na BASE e o que diferencia é o ITEM.

NF........ITEM.....MIGO
50109....160......5003585469
50109....170......5003585469
50109....180......5003585469

Já a NF nº 82436 repete 7 vezes e os Itens são todos iguais.

O correto, se possível, seria eliminar primeiro as NF repetidas na BASE, agora se não for possível, teria de analisar e definir alguns critérios para comparação.

[]s

 
Postado : 13/05/2016 4:50 pm
(@tsa-xlsx)
Posts: 0
New Member
 

Andrea F,

A sugestao do Mauro Coutinho seria a mais coerente.

Entretanto, se eu entendi direito, voce criou as funcoes exatamente para fltrar o que esta repetido, de acordo com a tua necesidade.

Se for isso mesmo, seguem minhas sugestoes:

Function ConcatenarComplexo(NotaFiscal As Range) As String
    Dim i As Long
    Dim j As Long
    Dim UltimaLinha As Long
    Dim Valor As String
    Dim Valor2 As String
    Dim nao_repetidos() As String
    
    UltimaLinha = Sheets("BASE").Cells(Cells.Rows.Count, 1).End(xlUp).Row
    If UltimaLinha < 2 Then UltimaLinha = 2
    j = 1
    For i = 2 To UltimaLinha
        If Sheets("BASE").Range("A" & i).Value = NotaFiscal.Value Then
            Valor2 = Sheets("BASE").Range("B" & i).Value
            If j = 1 Then
                ReDim Preserve nao_repetidos(1 To j)
                nao_repetidos(j) = Valor2
                j = j + 1
                Valor = Valor2 & " "
            Else
                If IsError(Application.Match(Valor2, nao_repetidos, False)) Then
                    ReDim Preserve nao_repetidos(1 To j)
                    nao_repetidos(j) = Valor2
                    j = j + 1
                    Valor = Valor & Valor2 & " "
                End If
            End If
        End If
    Next
    ConcatenarComplexo = Valor
End Function
Function ConcatenarComplexoMigo(NotaFiscal As Range) As String
    Dim i As Long
    Dim UltimaLinha As Long
    Dim Valor As String
    
    UltimaLinha = Sheets("BASE").Cells(Cells.Rows.Count, 1).End(xlUp).Row
    If UltimaLinha < 2 Then UltimaLinha = 2
    For i = 2 To UltimaLinha
        If Sheets("BASE").Range("A" & i).Value = NotaFiscal.Value Then
            Valor = Valor & Sheets("BASE").Range("C" & i).Value & " "
            Exit For
        End If
    Next
    ConcatenarComplexoMigo = Valor
End Function
 
Postado : 14/05/2016 9:32 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

Além das ótimas sugestões acima segue alternativa.

Na UDF utilizada na coluna 'B' substitua estas linhas

 If Sheets("BASE").Range("A" & i).Value = NotaFiscal.Value Then
       Valor = Valor & Sheets("BASE").Range("B" & i).Value & " "
      End If

por estas

If Sheets("BASE").Range("A" & i).Value = NotaFiscal.Value _
      And InStr(Valor, Sheets("BASE").Range("B" & i).Value) = 0 Then
       Valor = Valor & Sheets("BASE").Range("B" & i).Value & " "
      End If

E na UDF utilizada na coluna 'C' substitua estas linhas

If Sheets("BASE").Range("A" & i).Value = NotaFiscal.Value Then
            Valor = Valor & Sheets("BASE").Range("C" & i).Value & " "
        End If

por estas

For i = 2 To UltimaLinha
      If Sheets("BASE").Range("A" & i).Value = NotaFiscal.Value _
       And InStr(Valor, Sheets("BASE").Range("C" & i).Value) = 0 Then
       Valor = Valor & Sheets("BASE").Range("C" & i).Value & " "
      End If
 
Postado : 15/05/2016 7:36 am