Crear macro listar por fechas datos de hoja excel

En Hoja1 tengo los sgte.:

  A            B            C               D             

Fecha clase nombre consumo

02/09/2019  K1 JUAN 15

02/09/2019  K2 ABEL 18

03/09/2019   K1     CESAR       12

03/09/2019  K1 JUAN 18

04/09/2019  K1 JUAN 18

04/09/2019  K1 CESAR 15

De estos datos debo generar un reporte mensual de cada clase en otra hoja (Hoja2) de la sgte. Manera:

Clase : k1

       A                       B                          C                         D

nombre/fecha   (02/09/2019)      (03/09/2019)    (04/09/2019)  ...

JUAN                      15                            18                      18

CESAR                      0                             12                     15

O sea separar por clase y nombre detallado por cada fecha, hice una macro en un formulario por cada clase y búsqueda por cada nombre y fecha, lo cual tuve que emplear muchas variables e instrucciones de búsqueda para cada nombre, lo que deseo es que ayuden a generar por medio de DO WHILE ... LOOP y emplearía menos instrucciones juntando a todas las personas de una clase en el ejemplo anterior mostrado

1 Respuesta

Respuesta
1

Creo que lo que necesitas lo puedes hacer fácilmente creando una tabla dinámica (solapa Insertar)

Saludos_

¡Gracias! La búsqueda tiene que ser mediante formulario seleccionando la clase en combobox1 mediante comando (cmdbusca) por cada fecha y otro botón comando para ver el listado en hoja2

Entiendo que la clase sería el filtro de la tabla dinámica.

En VBA no parece muy difícil establecer qué elementos deben ser visibles o no en el pivotfield de la TD que está establecido como filtro. Por ejemplo, para que el pivotfield "clase" de la tabla dinámica que está en hoja2 sea el filtro y establecer que la clase k1 sea visible y la clase k2 no lo sea el código podría ser:

Sub prueba()
    Dim pvt As PivotTable, pvf As PivotField
    Set pvt = Worksheets("Hoja2").PivotTables(1)
    Set pvf = pvt.PivotFields("clase")
    With pvf
        pvf.Orientation = xlPageField 'Establece el campo "clase" como filtro de la tabla dinámica
        pvf.PivotItems("k1").Visible = True  'hace que la clase k1 sea visible en la TD
        pvf.PivotItems("k2").Visible = False 'hace que la clase k2 no sea visible en la TD
    End With
    Set pvf = Nothing
    Set pvt = Nothing
End Sub

Comprendo que al principio quizás pueda resultar complicado empezar a trabajar con tablas dinámicas desde VBA, pero en este caso creo que podría merecer la pena el esfuerzo porque entiendo que todo lo que has expuesto en tu mensaje inicial que necesitas hacer lo puede hacer Excel automáticamente usando una tabla dinámica y unas pocas líneas de código.

Saludos_

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas