Filtrar datos del Textbox y poner totales según fecha

Quisiera saber si es posible filtrar una base de datos en un listbox y que quede más o menos así:

A la derecha tengo la base de datos con las ventas de vendedores distintos, quiero visualizar en un listbox el total de cada vendedor según la fecha elegida. Alguien que me ayude.

  

Respuesta
1

Leonardo Daniel,

Adjunto en enlace el desarrollo de tu consulta para su revisión. Como alternativa se empleo la función SUMAR. SI. CONJUNTO() para mostrar la tabla de resultados según lo indicado.

Filtrar datos textbox y poner totales según fecha

2 respuestas más de otros expertos

Respuesta
2

Puedes lograr esa vista con una tabla dinámica

- Selecciona tus datos, entra al menú Insertar, Tabla dinámica, Tabla dinámica.

- En la siguiente ventana, selecciona la opción: "Hoja de cálculo existente"

- Entra al campo Ubicación y después selecciona la celda F3

- Arrastra el Vendedor al área "Rótulos de fila"

- Arrastra la Fecha al área "Filtro de informe"

- Arrastra la Venta al área "Valores"

Listo, en la celda G1 te aparece un combo con las fechas que tienes, selecciona una fecha y te mostrará los vendedores y sus ventas. Incluso puedes seleccionar varias fechas.


Sal u dos, si es lo que necesitas, no olvides valorar la respuesta.

Muchas gracias Dante, el problema es que los datos son muchos y es muy tediosa cargar los datos en la tabla dinámica. lo que necesito es mostrar lo que pido en un formulario

Una de las ventajas de utilizar tabla dinámica es que no tienes que cargar los datos, solamente tienes que seleccionar el área donde tienes tus datos. Solamente por comentar, con la tabla dinámica obtienes otras funcionalidades que puedes explotar.

Pero no hay problema, si lo quieres en un userform se puede hacer.

Entonces te recomiendo lo siguiente, lo ideal cuando manejas fecha, es tener un filtro por rango de fechas, fecha inicio y fecha final.

De esa forma si solamente quieres una fecha pones la fecha inicio: 01/02/2018, si quieres todo un mes, por ejemplo, pones fecha inicio 01/02/2018 y fecha fin 28/02/2018


Realiza lo siguiente:

- Crea una hoja y le pones por nombre "temp"

- En la macro cambia "Hoja9" por el nombre de tu hoja

- Crea un textbox2

- Pon el siguiente código en tu botón del form

Private Sub CommandButton1_Click()
'filtra por fechas
    Set h1 = Sheets("Hoja9")    'cambiar por el nombre de tu hoja
    Set h2 = Sheets("temp")     'hoja temporal
    h2.Cells.ClearContents
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    ListBox1.RowSource = ""
    If TextBox1.Value = "" Then
        MsgBox "Captura una Fecha 'Inicio'"
        Exit Sub
    End If
    fec1 = CDate(TextBox1.Value)
    If TextBox2 = "" Then
        fec2 = fec1
    Else
        fec2 = CDate(TextBox2.Value)
    End If
    '
    u = h1.Range("C" & Rows.Count).End(xlUp).Row
    j = 2
    For i = 2 To u
        If h1.Cells(i, "C").Value >= fec1 And h1.Cells(i, "C") <= fec2 Then
            Set b = h2.Columns("A").Find(h1.Cells(i, "A"), lookat:=xlWhole)
            If Not b Is Nothing Then
                h2.Cells(b.Row, "B") = h2.Cells(b.Row, "B") + h1.Cells(i, "B")
            Else
                u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
                h2.Cells(u2, "A") = h1.Cells(i, "A")
                h2.Cells(u2, "B") = h1.Cells(i, "B")
            End If
        End If
    Next
    u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
    ListBox1.RowSource = h2.Name & "!" & h2.Range("A2:B" & u2).Address
End Sub

Puedes capturar solamente una fecha en el textbox1 y presionar el botón,  o un rango de fechas y presionar el botón.


.

.

Respuesta
2

¿Algo así es lo que buscas?

Esta es la macro que ocupas, solo tecleas una fecha valida en el textbox y das doble click sobre de el y eso todo.

Option Base 1
Sub TOTALPORVENDEDOR()
Dim UNICOS As New Collection
Dim FUNCION As WorksheetFunction
Set DATOS = Range("A1").CurrentRegion
Set FUNCION = WorksheetFunction
Set H1 = Worksheets("HOJA1")
FECHA = CDate(H1.TextBox1.Text)
With DATOS
    F = .Rows.Count
    For I = 2 To F
        VENDEDOR = .Cells(I, 1)
        On Error Resume Next
            UNICOS.Add VENDEDOR, CStr(VENDEDOR)
        On Error GoTo 0
    Next I
    ReDim MATRIZ(UNICOS.Count, 2)
    For J = 1 To UNICOS.Count
        VENDEDOR = UNICOS.Item(J)
        MATRIZ(J, 1) = VENDEDOR
        MATRIZ(J, 2) = FUNCION.SumIfs(.Columns(2), .Columns(1), VENDEDOR, .Columns(3), CDbl(FECHA))
    Next J
    With H1.ListBox1
        .ColumnCount = 2
        .List = MATRIZ
    End With
End With
End Sub

Olvide mencionar que en el modulo VBA de la hoja donde tienes el textbox debes colocar este código, con esto después de teclear la fecha das doble click y esto activara la macro, además los controles deben ser del tipo activex

Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
totalporvendedor
End Sub

Gracias por el interés james, lo que necesito es que esto se se muestre en un formulario mediante un botón, es decir tengo un formulario que contiene el listbox el texbox y el botón, copie el código en el evento click del botón pero no me sale

Entonces lo que necesitas es una programación un poco diferente a como planteaste tu requerimiento se entendía que el listbox y el textbox estaba sobre la hoja, ¿esto es lo que ocupas?

y esta es la

Option Base 1
Private Sub CommandButton1_Click()
Dim UNICOS As New Collection
Dim FUNCION As WorksheetFunction
Set DATOS = Range("A1").CurrentRegion
Set FUNCION = WorksheetFunction
With DATOS
    FECHA = TextBox1.Text
    If FECHA = "" Then MsgBox ("Fecha en blanco"), vbInformation, "AVISO": GoTo siguiente
    FECHA = CDate(FECHA)
With DATOS
    F = .Rows.Count
    For I = 2 To F
        VENDEDOR = .Cells(I, 1)
        On Error Resume Next
            UNICOS.Add VENDEDOR, CStr(VENDEDOR)
        On Error GoTo 0
    Next I
    ReDim MATRIZ(UNICOS.Count, 2)
    For J = 1 To UNICOS.Count
        VENDEDOR = UNICOS.Item(J)
        MATRIZ(J, 1) = VENDEDOR
        MATRIZ(J, 2) = FUNCION.SumIfs(.Columns(2), .Columns(1), VENDEDOR, .Columns(3), CDbl(FECHA))
    Next J
    With ListBox1
        .ColumnCount = 2
        .List = MATRIZ
    End With
End With
End With
siguiente:
End Sub

macro

En el modulo VBA del botón comando pega el código y listo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas