Mostrar solo únicos al filtrar en textbox y sumar valores de otra columna

Para Dan

Disculpa Dan tantas preguntas!

Sabes que tengo un Textbox que filtro datos de cualquiera de tres columnas 1,2,10

Lo que deseo es que solo me muestre una vez el valor filtrado y que sume la columna 6 del listbox

Ejemplo            

 asi me aparece        

Textbox = s09p          

Listbox     

Codigo           columna6

 s09p                  5

s09p                   1

Como deberia aparecer es

Textbox = s09p          

Listbox     

Codigo           columna6

 s09p                  6

Se podrá hacer !!

Nose si me explico bien

Private Sub TextBox13_Change()
Application.ScreenUpdating = False
On Error Resume Next
lbltotal = ""
On Error Resume Next
  Me.ListBox1.Clear
Hoja4.Select
     ListBox1.ColumnCount = 8
    ListBox1.ColumnWidths = "60;200;60;90;90;120;90;90"
        For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
           cadena = UCase(Cells(i, 1).Value) & UCase(Cells(i, 2).Value) & UCase(Cells(i, 10).Value)
           If cadena Like "*" & UCase(TextBox13.Value) & "*" Then
             If Cells(i, "G") <> 0 Then
              ListBox1.AddItem Cells(i, "A")
            ListBox1. List(ListBox1.ListCount - 1, 0) = Cells(i, "A")
              ListBox1. List(ListBox1.ListCount - 1, 1) = Cells(i, "H")
              ListBox1. List(ListBox1.ListCount - 1, 2) = Cells(i, "I")
              ListBox1. List(ListBox1.ListCount - 1, 3) = Cells(i, "B")
              ListBox1. List(ListBox1. ListCount - 1, 4) = Format(Cells(i, "D"), "DD-MM-YYYY")
              ListBox1. List(ListBox1. ListCount - 1, 5) = Format(Cells(i, "J"), "DD-MM-YY")
              ListBox1.List(ListBox1.ListCount - 1, 6) = Format(Cells(i, "G"), "#0.00")
            ListBox1.List(ListBox1.ListCount - 1, 7) = (Cells(i, "L"))
            Else
            End If
           End If
        Next i
    Exit Sub
Errores:
   MsgBox "No se encuentra.", vbExclamation, "EXCELeINFO"
End Sub

1 Respuesta

Respuesta
3

H o l a:

Te anexo la macro para mostrar y sumar los únicos

Private Sub TextBox13_Change()
'Act.Por.Dante Amor
    lbltotal = ""
    ListBox1.Clear
    ListBox1.ColumnCount = 8
    ListBox1.ColumnWidths = "60;200;60;90;90;120;90;90"
    For i = 2 To Hoja4.Range("A" & Rows.Count).End(xlUp).Row
        cadena = UCase(Hoja4.Cells(i, 1)) & UCase(Hoja4.Cells(i, 2)) & UCase(Hoja4.Cells(i, 10))
        If cadena Like "*" & UCase(TextBox13) & "*" And Hoja4.Cells(i, "G") <> 0 Then
            If ListBox1.ListCount = 0 Then
                agregar i, Hoja4
            Else
                existe = False
                For j = 0 To ListBox1.ListCount - 1
                    If ListBox1.List(j) = Hoja4.Cells(i, "A") Then
                        ListBox1.List(j, 6) = Format(CDbl(ListBox1.List(j, 6)) + Hoja4.Cells(i, "G"), "#0.00")
                        existe = True
                        Exit For
                    End If
                Next
                If existe = False Then agregar i, Hoja4
            End If
       End If
    Next
End Sub
'
Sub agregar(i, Hoja4)
'Por.Dante Amor
    ListBox1. AddItem Hoja4.Cells(i, "A")
    ListBox1. List(ListBox1.ListCount - 1, 1) = Hoja4.Cells(i, "H")
    ListBox1. List(ListBox1.ListCount - 1, 2) = Hoja4.Cells(i, "I")
    ListBox1. List(ListBox1.ListCount - 1, 3) = Hoja4.Cells(i, "B")
    ListBox1. List(ListBox1.ListCount - 1, 4) = Format(Hoja4. Cells(i, "D"), "DD-MM-YYYY")
    ListBox1. List(ListBox1.ListCount - 1, 5) = Format(Hoja4.Cells(i, "J"), "DD-MM-YY")
    ListBox1.List(ListBox1.ListCount - 1, 6) = Format(Hoja4.Cells(i, "G"), "#0.00")
    ListBox1.List(ListBox1.ListCount - 1, 7) = Hoja4.Cells(i, "L")
End Sub

Hola Dan !!

Le explico mejor

En el textbox ingreso 111042 y me aparece lo siguiente en el primer pantallazo aparare dos veces el código ahi donde dice Material y dos veces el lote....

Mi idea es que si el código que en el pantallazo es el material que esta en la columna A de la hoja$   y el lote que esta en la columna B de la hoja4 si son iguales solo aparezca una vez pero con el stock sumado que esta en la columna G de la hoja4... La idea es que sea como muestro abajo en el pantallazo donde aparece un solo dato..

Por favor gracias

Saludos

En tu pregunta original no mencionaste el Lote, ahora no entiendo lo que necesitas.

Tu petición original es esta:

Codigo           columna6

 s09p                  5

s09p                   1


Como puedes ver, no mencionaste ningún Lote.

La macro funciona correctamente cuando el código de la columna A es el mismo.


Entonces, si la macro funciona correctamente para los códigos de la columna A, podrías valorar la respuesta.

Si la nueva solicitud que deseas es más complicada, entonces tendrías que crear una nueva pregunta y con todo gusto te envío la macro actualizada.

H o l a:

No resultó tan complicado, te anexo la macro actualizada:

Private Sub TextBox13_Change()
'Act.Por.Dante Amor
    lbltotal = ""
    ListBox1.Clear
    ListBox1.ColumnCount = 8
    ListBox1.ColumnWidths = "60;200;60;90;90;120;90;90"
    For i = 2 To Hoja4.Range("A" & Rows.Count).End(xlUp).Row
        cadena = UCase(Hoja4.Cells(i, 1)) & UCase(Hoja4.Cells(i, 2)) & UCase(Hoja4.Cells(i, 10))
        If cadena Like "*" & UCase(TextBox13) & "*" And Hoja4.Cells(i, "G") <> 0 Then
            existe = False
            For j = 0 To ListBox1.ListCount - 1
                If ListBox1.List(j) = Hoja4.Cells(i, "A") And ListBox1.List(j, 3) = Hoja4.Cells(i, "B") Then
                    ListBox1.List(j, 6) = Format(CDbl(ListBox1.List(j, 6)) + Hoja4.Cells(i, "G"), "#0.00")
                    existe = True
                    Exit For
                End If
            Next
            If existe = False Then agregar i, Hoja4
       End If
    Next
End Sub
'
Sub agregar(i, Hoja4)
'Por.Dante Amor
    ListBox1. AddItem Hoja4.Cells(i, "A")
    ListBox1. List(ListBox1.ListCount - 1, 1) = Hoja4.Cells(i, "H")
    ListBox1. List(ListBox1.ListCount - 1, 2) = Hoja4.Cells(i, "I")
    ListBox1. List(ListBox1.ListCount - 1, 3) = Hoja4.Cells(i, "B")
    ListBox1. List(ListBox1.ListCount - 1, 4) = Format(Hoja4. Cells(i, "D"), "DD-MM-YYYY")
    ListBox1. List(ListBox1.ListCount - 1, 5) = Format(Hoja4.Cells(i, "J"), "DD-MM-YY")
    ListBox1.List(ListBox1.ListCount - 1, 6) = Format(Hoja4.Cells(i, "G"), "#0.00")
    ListBox1.List(ListBox1.ListCount - 1, 7) = Hoja4.Cells(i, "L")
End Sub

Dan

No se que hago mal copie la macro en el textbox... ¿cree dos códigos iguales en la columna A y dos lotes en la columna B de la hoja 4 y me muestra los dos datos nuevos que agregue en el listbox y no uno... Te podría enviar mi archivo por favor?

No se que hago mal

Gracias

Envíame tu archivo, tal vez tengas números o letras o espacios entre los datos y es por eso que no encuentra la coincidencia y no se acumulen los valores.

Recuerda poner tu nombre de usuario en el asunto.

Ya le envié el archivo!

Gracias

Macro actualizada:

Private Sub TextBox13_Change()
'Act.Por.Dante Amor
    lbltotal = ""
    ListBox1.Clear
    ListBox1.ColumnCount = 8
    ListBox1.ColumnWidths = "60;200;60;90;90;120;90;90"
    For i = 2 To Hoja4.Range("A" & Rows.Count).End(xlUp).Row
        cadena = UCase(Hoja4.Cells(i, 1)) & UCase(Hoja4.Cells(i, 2)) & UCase(Hoja4.Cells(i, 10))
        If cadena Like "*" & UCase(TextBox13) & "*" And Hoja4.Cells(i, "G") <> 0 Then
            existe = False
            For j = 0 To ListBox1.ListCount - 1
                If IsNumeric(ListBox1.List(j)) Then vmate = CDbl(ListBox1.List(j)) Else vmate = ListBox1.List(j)
                If IsNumeric(ListBox1.List(j, 3)) Then vlote = CDbl(ListBox1.List(j, 3)) Else vlote = ListBox1.List(j, 3)
                '
                If vmate = Hoja4.Cells(i, "A") And vlote = Hoja4.Cells(i, "B") Then
                    ListBox1.List(j, 6) = Format(CDbl(ListBox1.List(j, 6)) + Hoja4.Cells(i, "G"), "#0.00")
                    existe = True
                    Exit For
                End If
            Next
            If existe = False Then agregar i, Hoja4
       End If
    Next
End Sub

Como dato informativo. Cuando almacenas un número en textbox, combobox o listbox, el número es almacenado como texto, entonces si preguntas si el número 2 es igual al texto "2", el resultado es que no son iguales, es por eso que no acumulaba. Lo que hay que hacer es convertir los valores numéricos que están como texto a número.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas