Saltar al contenido

Sumarsi con criterio de igualdad adentro de otro criterio de igualdad


SabrinaSol

Recommended Posts

publicado

Estimados,

Les comento lo que quiero hacer, y la verdad que me estoy volviendo loca buscando la solución.

Tengo tablas de más de 50 mil filas y más de 10 columnas, de las cuales debo extraer información.

Como lo que tengo que hacer es complicado de explicar, se los muestro con un ejemplo simplificado:

A____B___C__D

Ert__Bra__5__4

Sdf__Arg__7__6

Sdf__Arg__6__2

Sdf__Bra__5__3

Sdf__Bra__6__2

Sdf__Bra__5__4

Tyu__Arg__6__4

Tyu__Arg__2__3

Tyu__Bra__1__1

Uio__Arg__2__3

Uio__Bra__5__3

Vbn__Bra__4__2

De modo que Sdf debe sumar para Arg 13 en la columna C y 8 en la columna D, y de nuevo Sdf suma para Bra 16 en la columna C y 9 en la columna D. Algo similar sucede para Tyu. El resultado, corriendo la macro que busco, debería ser:

A____B___C__D

Ert__Bra__5__4

Sdf__Arg__13__8

____Bra__16__9

Tyu__Arg__8__7

____Bra__1__1

Uio__Arg__2__3

Uio__Bra__5__3

Vbn__Bra__4__2

El código que encontré, sólo me sirve para el caso en que sólo tenga un criterio, o sea, las columnas A, C, y D, y es el siguiente:

Sub sumarsi()

Application.ScreenUpdating = False

Dim uf As Long, uf2 As Long

Dim rangocriterio As Range

Dim rangosuma1 As Range

Dim rangosuma2 As Range

uf = Range("A" & Rows.Count).End(xlUp).Row

Range("A1:A" & uf).AdvancedFilter 2, CriteriaRange, Range("E1"), Unique:=True

Set rangocriterio = Range("A2:A" & uf)

Set rangosuma1 = Range("B2:B" & uf)

Set rangosuma2 = Range("C2:C" & uf)

Range("F1") = Range("B1"): Range("G1") = Range("C1")

uf2 = Range("E" & Rows.Count).End(xlUp).Row

With Range("F2:F" & uf2)

.Formula = "=SUMIF(" & rangocriterio.Address & ", $E2 ," & rangosuma1.Address & ")"

.Formula = .Value

End With

With Range("G2:G" & uf2)

.Formula = "=SUMIF(" & rangocriterio.Address & ", $E2 ," & rangosuma2.Address & ")"

.Formula = .Value

End With

Me podrían decir cómo hacer para que me sirva teniendo dos columnas como criterios?

Muchísimas gracias.

Saludos!

publicado

Hola Sabrina, intenta con esto adaptando los rangos, si no funciona por favor sube tu libro.

Sub Sabrina()
Application.ScreenUpdating = False
Range("C1").EntireColumn.Insert
Range("C1") = "COMBO"
Range("C2:C13").FormulaR1C1 = "=RC[-2]&RC[-1]"
Range("C1:C13").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"G2"), Unique:=True
Range("H3:I10").FormulaR1C1 = "=SUMIF(R2C3:R13C3,RC7,R2C[-4]:R13C[-4])"
Range("H3:I10").Value = Range("H3:I10").Value
Range("C1").EntireColumn.Delete
Application.ScreenUpdating = True
End Sub[/CODE]

publicado

Muchas gracias por responder!

Como inconveniente encontré que coloca los datos de la columna A y B en una sola, juntos, por ej. dice ErtBra. Y necesito que estén en dos columnas distintas.

Y por otro lado, me gustaría poder modificar el código para armar otras macros donde pueda ampliar la cantidad de columnas criterio (donde siempre es el mismo: que se repitan los datos). Y no comprendo el rango del criterio como para ampliarlo, no se si entiende mi duda.

Saludos!

publicado

Subo un archivo pequeño que sirve de ejemplo para que te sea más fácil entender lo que necesito.

Quiero sumar las columnas E y F teniendo en cuenta que A se subdivide en B y a su vez B se subdivide en C. Por lo cual quiero que las columnas E y F muestren las sumatorias de cada rama del árbol.

En otros archivos puede haber más o menos columnas criterio. En este archivo son la A, B, y C, en otros puede haber más o menos.

Desde ya, te agradezco muchísimo por el interés en resolverlo.

Saludos!

Ejemplo para SumarSi.xls

publicado

Intenta con esto, tu archivo aun no lo

Sub Sabrina()
Application.ScreenUpdating = False
Range("C1").EntireColumn.Insert
Range("C1") = "COMBO"
Range("C2:C13").FormulaR1C1 = "=RC[-2]&RC[-1]"
Range("C1:C13").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"G1"), Unique:=True
Range("I2:J9").FormulaR1C1 = "=SUMIF(R2C3:R13C3,RC7,R2C[-5]:R13C[-5])"
Range("I2:J9").Value = Range("I2:J9").Value
Range("A1:B1") = Array(1, 2)
Columns("G:G").ClearContents
Range("A1:B13").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"G1:H1"), Unique:=True
Rows("1:1").ClearContents
Columns("C:C").Delete 'Shift:=xlToLeft
Range("F2:I9").Select
Application.ScreenUpdating = True
End Sub[/CODE]

veo, lo hare tan pronto pueda

publicado

Hola, gracias por la respuesta! Paso a comentarte los resultados.

Ahora sí, las columnas están separadas :)

Sólo que desaparece la fila encabezados, pero no es un gran problema, lo copio otra vez y listo.

En cuanto al código, te aclaro que el verdadero archivo tiene 52707 filas (lo achiqué porque no me permite subir archivos tan grandes). Entonces, cuando quiera ejecutar la macro, no puedo saber previamente de cuántas filas quedará la tabla-resultado con las sumatorias que necesito. Por lo que leo en el código, el rango hasta la fila 9 lo estableciste porque ya sabés que en el ejemplo que puse, la tabla-resultado llegaba hasta ahí. Pero en la realidad, como te decía, no lo voy a poder saber.

Por otro lado, ¿qué debería modificar en el código para incluir otras columnas? Por ejemplo, en el archivo que voy a trabajar, voy a incluir otra columna que describe los números de la columna C. Subo el archivo nuevamente, con esta pequeña modificación, para que lo veas.

Saludos!

Sumar Si Sab 6C.xls

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.