Macro que cuente filas en base a criterios que se encuentran en diferentes columnas

Me gustaría un macro que me diera lo conteos en una tabla con esta forma:

Usuario            Escalación        Urgente            Prioridad          En tiempo

ESP                 (1)                   (2)                   (3)                   (4)

JUA                 (5)                   (6)                   (7)                   (8)

GRE                (9)                   (10)                 (11)                 (12)

SAL                (13)                 (14)                 (15)                 (16)

El macro contaría las filas en una tabla, si coincide en la columna F con el usuario y al mismo tiempo con el status (texto) en la columna L, en la misma fila.

Por ejemplo:

En la fila 5 aparece el usuario “ESP” en la columna F con status “URGENTE” en la columna L, que por lo tanto se contaría dentro del total en el espacio (2).

Espero se pueda, gracias de antemano.

1 respuesta

Respuesta
1

¿Quieres qué se lean los estatus de una hoja y que se haga la sumatoria en otra hoja?

¿Tienes los nombres en la columna "F" y los estatus en la columna "L"?

Y cómo quieres el resultado, ¿en las columnas A, B, C, D, E? ¿Ya tienes el formato? ¿O quieres que la macro lo cree?

¿Solamente tienes 4 estatus? ¿O qué la macro encuentre los estatus y por cada uno que cree una columna con su título?

Saludos. DAM

Si gustas mejor envíame tu archivo me dices en cuál hoja tienes tus datos y en otra hoja me pones el resultado que esperas.

¿Tiene qué ser con una macro o mejor te explico como crear una tabla dinámica?

Pues la tabla ya está en una hoja que se encuentra oculta que se llama "Resumen global" y es ahí donde me gustaría que se llenaran los espacios con las sumatorias, el primer espacio (1) inicia en C4 y el (16) en el F7.

El nombre de la columna F es "Usuario" y el de la columna L es "Importancia".

De preferencia me gustaría un macro porq me parece más sencillo. Aun así te envío mi archivo

Saludos y gracias

Me puedes enviar tu archivo en una hoja me explicas con ejemplos lo que necesitas.

Ya te lo envíe, pero acabo de ver lo de los ejemplos, ahorita te lo reenvío.

Saludos

Te envié un par de archivos uno con el ejemplo de la tabla dinámica y otro con la macro

Sub resumen()
'Por.Dante Amor
    Set h1 = Sheets("Detalle H.E. pendientes")
    Set h2 = Sheets("Resumen global")
    h2.Range("C4:F7").ClearContents
    For i = 2 To h1.Range("F" & Rows.Count).End(xlUp).Row
        Set b = h2.Range("B:B").Find(h1.Cells(i, "F"))
        If Not b Is Nothing Then
            f = b.Row
            Set c = h2.Range("C3:F3").Find(h1.Cells(i, "L"))
            If Not c Is Nothing Then
                h2.Cells(f, c.Column) = h2.Cells(f, c.Column) + 1
            End If
        Else
            u = h2.Range("B" & Rows.Count).End(xlUp).Row + 1
            Set c = h2.Range("C3:F3").Find(h1.Cells(i, "L"))
            If Not c Is Nothing Then
                h2.Cells(u, "B") = h1.Cells(i, "F")
                h2.Cells(u, c.Column) = h2.Cells(u, c.Column) + 1
            End If
        End If
    Next
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

La macro me marca algunos problemas en la tabla: divide los valores que obtiene con el usuario "ROMEROG5" cuando los datos en la tabla cambian.

Tampoco hace nada en la segunda tabla.

No se si tenga que ver esto, pero cuando copie el código a otro libro, no puedo porner la c con minúscula.

Sub Resumen()

    Set h1 = Sheets("Detalle H.E. pendientes")
    Set h2 = Sheets("Resumen global")
    h2.Range("C4:F7").ClearContents
    h2.Range("J4:M7").ClearContents
    For i = 2 To h1.Range("F" & Rows.Count).End(xlUp).Row
        Set b = h2.Range("B:B").Find(h1.Cells(i, "F"))
        If Not b Is Nothing Then
            f = b.Row
            Set C = h2.Range("C3:F3").Find(h1.Cells(i, "L"))
            If Not C Is Nothing Then
                h2.Cells(f, C.Column) = h2.Cells(f, C.Column) + 1
            End If
        Else
            u = h2.Range("B" & Rows.Count).End(xlUp).Row + 1
            Set C = h2.Range("C3:F3").Find(h1.Cells(i, "L"))
            If Not C Is Nothing Then
                h2.Cells(u, "B") = h1.Cells(i, "F")
                h2.Cells(u, C.Column) = h2.Cells(u, C.Column) + 1
            End If
        End If
    Next
End Sub

Revisa que los nombres sean iguales, por ejemplo revisé que tenías "ROMEROG5" y "ROMEROG5 ", el segundo nombre tiene un espacio a la derecha.


Para el manejo de variables:

La c de la línea: set Set C = h2.Range("C3:F3").Find(h1.Cells(i, "L"))

Es una variable, puede ser minúscula o mayúscula, cada programador la escribe como mejor le guste. A mí en lo personal, me gusta usar las variables con minúsculas, por ejemplo h1, h2, u, b, c, f.

A otros les gusta usar minúsculas y mayúsculas, por ejemplo para la última fila yo pongo "u" otros ponen UltimaFila, pero para una variable no le veo el caso, se trata de optimizar el código y de hacerlo más rápido y de no estar escribiendo variables con nombres tan largos. Esta es mi opinión.

http://www.todoexpertos.com/preguntas/5gauicu4qsaj54vm/macro-que-cuente-filas-en-base-a-datos-dados-en-3-columnas-distintas

¡Gracias! 

Disculpa las molestias pero queria ver si me puedes ayudar con la pregunta que te puse arriba, esta relacionada con esta. Intente modificar el codigo que me pasaste pero no logre que funcionara.

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas