Macro o función para sumar datos por bloque

Fíjate que tengo este problema, espero me puedas ayudar. Te adjunto esta imagen para darme a entender sobre esta situación que tengo.

> Como podrás ver en la Columna A tengo almacenado un numero (ce Costos), quiero generar un reporte donde los Account Type me los agrupe y sume los valores, es decir por ejemplo que me sume todos los valores por meses de Salaries Consolidated, todos los de Travel Transportation, y que mi reporte solo tenga los totales de los diferentes tipos de cuentas, respetando el formato de los meses, de enero a junio que me agrupe por tipo las cuentas y que me sume los valores y generar así un reporte de todas las cuentas pero por el Ce Costo(Columna A), esto es, yo tengo diferentes centros de Costo y tengo que hacer un reporte dividido donde me agrupe por el centro de costos la suma de las cuentas como te lo explique previamente. No se si me di a entender, actualmente lo que hago es generar el reporte manualmente, voy copiando en la hoja de gastos y agrupando los datos y genero el concentrado de datos por cada centro de costos, pero el punto aquí es que tengo demasiados centros de costos y es muy laborioso generar esto de manera manual, estaba pensando si es posible hacer esto a través de una macro, o no se si conozcas alguna fórmula o función en excel para poder definir estas condiciones y me agrupe los datos de acuerdo al centro de costos y al tipo de cuenta y me arroje los totales finales de cada tipo de cuenta.

1 respuesta

Respuesta
3
He entendido que quieres filtrar todas las empresas (Account Type) y que se sumen todos los valores de los meses desde Ene hasta Jun, te lo he puesto suponiendo que el nombre de la Hoja sea Hoja1 y te llevo los datos filtrados a Hoja2, lo que tu llamas reporte. La única condición es que no haya celdas vacías en la Col C, quedaría la macro así:
Sub filtrar_sumar()
Dim empresa, celda  As String
Dim ene, feb, mar, abr, may, jun As Long
Dim r As Object
Application.ScreenUpdating = False
Sheets("Hoja1").Select
Range("C2").Select
Do While ActiveCell.Value <> ""
empresa = ActiveCell.Value
celda = ActiveCell.Address
Sheets("Hoja2").Select
ActiveSheet.Range("C:C").Select
On Error Resume Next
Set r = Selection.Find(What:=empresa)
If r Is Nothing Then
Sheets("Hoja1").Select
ene = ActiveCell.Offset(0, 1).Value
feb = ActiveCell.Offset(0, 2).Value
mar = ActiveCell.Offset(0, 3).Value
abr = ActiveCell.Offset(0, 4).Value
may = ActiveCell.Offset(0, 5).Value
jun = ActiveCell.Offset(0, 6).Value
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = empresa Then
ene = ene + ActiveCell.Offset(0, 1).Value
feb = feb + ActiveCell.Offset(0, 2).Value
mar = mar + ActiveCell.Offset(0, 3).Value
abr = abr + ActiveCell.Offset(0, 4).Value
may = may + ActiveCell.Offset(0, 5).Value
jun = jun + ActiveCell.Offset(0, 6).Value
End If
Loop
Sheets("Hoja2").Select
ActiveSheet.Range("C1").Select
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Value = empresa
ActiveCell.Offset(0, 1).Value = ene
ActiveCell.Offset(0, 2).Value = feb
ActiveCell.Offset(0, 3).Value = mar
ActiveCell.Offset(0, 4).Value = abr
ActiveCell.Offset(0, 5).Value = may
ActiveCell.Offset(0, 6).Value = jun
End If
Sheets("Hoja1").Select
Range(celda).Select
Do While ActiveCell.Value = empresa
ActiveCell.Offset(1, 0).Select
Loop
Loop
r = Nothing
Application.ScreenUpdating = True
End Sub
Pruébalas y si te ha servido comenta, puntúa y finaliza la consulta. Gracias.
>Un saludo
>Julio
Gracias experto, el punto es que quisiera que me diera los totales pero por centro Costo. Te pongo una imagen de como seria el reporte que genero actualmente manual.

>
Como podrás ver el reporte tiene en la Columna B todas las cuentas, y en la Columna A el centro de Cosco, y después la suma por meses de enero a junio de las cuentas (yo solo necesito los totales de cada una de las cuentas, así como lo marque con un cirsulo rojo en algunas cuentas). Y pues seria una macro así por bloques o algo para que divida las cuentas de la hoja original por centro beneficio y después agrepe los valores de cada una de las diferentes cuentas que existen. No se si me he dado a entender un poco mejor con esto experto.
De antemano gracias.
Un saludo
Toño
No entiendo tu agrupamiento, la macro suma los valores de los meses siempre que el nombre de la Col C coincida, ahora quieres que primero tome el valor de la celda A y que filtre todos los valores de C que contengan el valor de A y que sumen los valores de los meses.
Aclarame esto.
>Un saludo
>Julio
Hola experto, creo que ya te confundí con la idea, pero tratare de ser lo más claro posible. La primer imagen que te puse cuando comencé la consulta es mi archivo original, la segunda imagen es el reporte que actualmente genero, en el cual puedes ver que agrupo por Centro de costos cada una de las cuentas (Columna C en la primer imagen, Columna B en la segunda imagen).
El punto es, que generar ese reporte de la segunda imagen es muy largo, puesto que tengo muchos Centros de costos y tengo que ir agrupando por tipo de cuentas y al final solo mostrar el total por ejemplo del centro de costos 80001, el total de Salaries, el total de Telephone, etc etc. Lógicamente es la suma de cada mes, de enero a junio, pero pues en unos días más generare mi información de julio y tendré que hacer este reporte incluyendo este nuevo mes.
Espero me haya dado a entender y pues cualquier cosa me comentas y te explico en dado caso.
Gracias.
Saludos
Toño
Pues mira siento decirte que no te entiendo, porque ya no se con que archivo trabajar, si con el primero, o con el reporte que generas después.
Lo siento como no me lo expliques bien clarito no podré ayudarte.
>Un saludo
>Julio
Hola experto, disculpa por responderte hasta ahora, respecto lo que me comentaste, la primer imagen es mi archivo original de trabajo, la segunda es el reporte que genero manualmente, y ese reporte de la segunda imagen es el que quiero generar a través de una macro o proceso, podrás ver en la segunda imagen que agrupo ahí todas las cuentas de salaries, y las demás, y pongo solo los totales en el reporte que genero (segunda imagen) de acuerdo a cada tipo de cuenta, y por cada centro de costo.
Espero haya sido más claro y puedas ayudarme.
Gracias
Saludos
Toño
Ya te he entendido pero eso es una labor enorme de macros, te explico:
1º Tienes que recorrer todas las filas de tu Base de Datos en la col A y todos los que tengan el mismo código los tiene que llevar a la otra hoja.
2º Hay que ordenarlos por el nombre Col C para que se agrupen
3º Hay que repasar toda la Col C y cuando encuentre que el nombre de la Account Type cambia (y que sea más de uno) que inserte una fila
4º Situarse en cada fila en blanco para sumar los valores y esto empezando por el final para que sume correctamente de fila en blanco en fila en blanco.
Para hacer esto deberías conocer tu algo de código en VBA porque hacerte esto me va a llevar un montón de tiempo, tu fíjate la extensión de la macro, solo para que te sume los valores de los meses por Account Type
Aclarame si conoces código de macros para que pueda ayudarte, pero la labor la tienes que hacer tú, imaginate que cualquier usuario nos pidera que le hiciésemos un programa para su empresa... para ello están las empresas que se ganan la vida con esto, nosotros estamos para ayudaros pero tenéis que poner de vuestra parte, hay incluso expertos que advierten que no realizan las labores solo ayudan a que las hagáis vosotros.
En fin aclarame esto y te ayudaré en todo lo que tengas dudas.
>Un saludo
>Julio
Pues si experto, tengo algo de conocimiento en VBA, he realizado macros y sober todo más cosas de bases de datos en ese lenguaje, pero las macros luego si me causan duda y por eso ando aquí. El punto de esta consulta, sobre todo no se como poner la condición de que por centro de costo me agrupe las diferentes cuentas, yo hice una macro antes, donde hace un reporte parecido, pero ahí no tengo condición de la agrupación de los datos, espero me puedas dar una orientada sobre como poder definir esa condición.
Gracias!
Saludos
Toño
Pues bien debes de seguir estos pasos:
1º Selecciona todas las celdas de tu base de datos las copias y las pegas en la hoja reporte.
2º Ordena tus datos por la columna de Account Type para que se queden todos los datos juntos por esa Col (D)
3º Como ya tenemos todas los valores juntos nos falta insertar una fila cada vez que cambie el valor y pondríamos esta macro:
Sub insertar()
Dim centro As String
Range("A1").Select
centro = ActiveCell.Value
Do While ActiveCell.Value <> ""
Do While ActiveCell.Value = centro
ActiveCell.Offset(1, 0).Select
Loop
If ActiveCell.Value <> centro Then
Selection.EntireRow.Insert
End If
ActiveCell.Offset(1, 0).Select
centro = ActiveCell.Value
Loop
End Sub
4º Ahora en cada celda en blanco de cada mes debemos hacer la suma y para ello debemos aprovecharnos de las celdas en blanco y comenzaremos por el final con esta macro:
Sub Sumar()
Dim celdaINI, celdaFIN As String
Range("D65536").End(xlUp).Select
Do While ActiveCell.Address <> "$D$1"
celdaFIN = ActiveCell.Address
If ActiveCell.Offset(-1, 0).Value = "" Then
ActiveCell.Offset(1, 0).Value = ActiveCell.Value
ActiveCell.End(xlUp).Select
celdaFIN = ActiveCell.Address
ActiveCell.End(xlUp).Select
celdaINI = ActiveCell.Address
GoTo saltar
End If
ActiveCell.End(xlUp).Select
celdaINI = ActiveCell.Address
saltar:
Range(celdaFIN).Offset(1, 0).Select
ActiveCell.Formula = "=SUM(" & celdaINI & ":" & celdaFIN & ")"
If celdaINI = "$D$1" Then Exit Sub
On Error Resume Next
ActiveCell.End(xlUp).Offset(-2, 0).Select
Loop
End Sub
Como verás esta creada solo para la col D (Jan) deberas de copiarla 5 veces más cambiando las referencias de celdas para que te sume todos los meses, puedes poner todas las macros en una sola, tardará un poco dependiendo de la cantidad de datos, por ello pones al principio Application.ScreenUpdate=False y al final =True
Pruébalo y me cuentas.
>Un saludo
>Julio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas