Macro para filtrar 2 columnas y sumar cuando coincidan

Master mi problema es el siguiente tengo estas columnas.
Cuenta débito crédito empresa

401 2 5 compras1

401 4 5 compras1

401 2 5 compras2
401 4 5 compras2

401 1 1 compras3
401 1 1 compras3

El problemas es q necesito una macro que me sume por empresas iguales por ejemplo que sume el crédito y el débito de "compras1" y que quede en nombre de cuenta la 401 quedaría algo asi:

Cuenta débito crédito empresa
401 6 10 compras1
401 6 10 compras2

401 2 2 compras3

1 respuesta

Respuesta
1

Lo que solicitas se puede hacer con una tabla dinámica sin necesidad de programar. ¿Lo has probado?

Dime si necesitas ayuda

hola experto gracias por tomarte el tiempo lo hice con tablas dinámicas pero el caso es que me lo piden con una macro obligatorio. en verdad apreciaría mucho tu ayuda en este caso sin mas me despido y te envío un cordial saludo quedo en espera de tu valiosa ayuda.

Te mando la solución y sigue mis pasos:

Vamos a copiar tus datos iniciales en el rango A1:D7

Después solo tienes que ejecutar esta macro y todo listo

Sub prueba()
'por luismondelo
Range("a1:d1").Copy Destination:=Range("e1")
Range("d2").Select
Do While ActiveCell.Value <> ""
valor = ActiveCell.Value
fila = ActiveCell.Row
contarsi = Application.WorksheetFunction.CountIf(Columns(4), valor)
suma1 = Application.WorksheetFunction.Sum(Range(Cells(fila, 2), Cells(fila + contarsi - 1, 2)))
suma2 = Application.WorksheetFunction.Sum(Range(Cells(fila, 3), Cells(fila + contarsi - 1, 3)))
Range("h65000").End(xlUp).Offset(1, 0).Value = valor
Range("f65000").End(xlUp).Offset(1, 0).Value = suma1
Range("g65000").End(xlUp).Offset(1, 0).Value = suma2
Range("e65000").End(xlUp).Offset(1, 0).Value = 401
Do While ActiveCell.Value = valor
ActiveCell.Offset(1, 0).Select
Loop
Loop
End Sub

recuerda finalizar

hola luis gracias por tomarte el tiempo solo una ultima cuestión y quedaría todo estupendamente. los valores de la columna de cuenta son estáticos el problema es que puede que haya muchas cuentas 401, 402 etc, se le puede agregar para que filtre los valores y solo ponga los únicos? en resumen tendría que sumar débito y crédito si las columnas "cuenta" y "empresa" coinciden.

aprecio tu ayuda.

¿Pero... en qué coinciden cuenta y empresa...?

¿Qué acaban igual?

Mejor hazme un ejemplo de lo que comentas

claro luis
mira en mi tabla puedo tener estos datos:
cuenta débito crédito Empresa

401 1 2 compras1
456 1 2 compras4
432 1 2 compras2
401 1 2 compras1
416 1 2 compras3
456 1 2 compras4

401 1 2 compras6

401 1 2 compras6

432 1 2 compras2
como puedes darte cuenta la fila uno coincide con la fila cuatro por lo tanto esas filas se suman : pero también hasta abajo esta la cuenta 401 pero de otra empresa por lo tanto quedaría asi:

401 2 4 compras 1

401 2 4 compras 6

luego la fila dos coincide con la ultima fila por lo tanto quedaría asi:

456 2 4 compras 4

y finalmente:

432 2 4 compras2

y asi sucesivamente.

como puedes darte cuenta los mismos números de cuentas que pertenecen ala misma empresa se suman.
"agradezco tu tiempo personas como tu hacen falta en este mundo"

Te mando la solución: ahora vamos a copiar tu última tabla en el rango A1:D10 y después ejecuta la macro siguiente:

Sub ejemplo1()
'por luismondelo
Range("a1").CurrentRegion.Sort key1:=Range("d1"), order1:=xlAscending, Header:=xlYes, ordercustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("a1:d1").Copy Destination:=Range("e1")
Range("d2").Select
Do While ActiveCell.Value <> ""
valor = ActiveCell.Value
dato = ActiveCell.Offset(0, -3).Value
Set busca = ActiveSheet.Range("d1:d500").Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ubica = busca.Address
Do
If Right(dato, 1) = Right(valor, 1) Then
suma1 = suma1 + ActiveCell.Offset(0, -2).Value
suma2 = suma2 + ActiveCell.Offset(0, -1).Value
End If
Set busca = ActiveSheet.Range("d1:d500").FindNext(busca)
Loop While Not busca Is Nothing And busca.Address <> ubica
End If
Range("h65000").End(xlUp).Offset(1, 0).Value = valor
Range("f65000").End(xlUp).Offset(1, 0).Value = suma1
Range("g65000").End(xlUp).Offset(1, 0).Value = suma2
Range("e65000").End(xlUp).Offset(1, 0).Value = dato
suma1 = 0
suma2 = 0
Do While ActiveCell.Value = valor
ActiveCell.Offset(1, 0).Select
Loop
Loop
End Sub

recuerda finalizar

todo excelente master !!! solo un detallito no suma el ultimo dato de la tabla tengo que moverle algo o es por la forma de acomodar los datos?

mas bien no suma bien el débito y el crédito master :( perdón por la molestia

Creo que si lo suma es el 432 y lo suma con otra fila

rayos master no quisiera llevarte la contra por que tu eres el experto pero el débito y el crédito me los arroja todos en cero :(

A mi me funciona bien. Te prepararé un video demostrativo pero te lo envío más tarde

master te envío una imagen del resultado tal vez sea por el acomodo de mis datos podrías darle un vistazo?

http://www.xs.to/u/aletzander/albums/10233/photo/38987

pff master te pido una gran disculpa pero los datos que use en mi ejemplo para exponer mi caso solo eran datos que se me ocurrieron al momento y por mi error realizaste la macro basándote en esos datos.. te pido una gran disculpa estos es una muestra de los datos reales que maneja mi documento de excel.
[url=http://www.xs.to/u/aletzander/albums/10233/photo/38990]http://www.xs.to/u/aletzander/albums/10233/photo/38990
[/url]una ves mas reiterando mis disculpas espero puedas ayudarme te lo agradecería infinitamente.

el problema radica en que esos valores siempre cambiaran nunca son estáticos master

Entonces es mejor que me lo mandes por mail haciendo un ejemplo manual detallado

[email protected]

Perfecto!! luis

perdón por las molestias Luis ya te envíe a tu correo un ejemplo de como debería de quedar la macro asi como una explicación de la misma te pido una disculpa por no aver tomado datos reales al tratar de explicar aquí. y agradezco tu ayuda no se como pagar todo lo que estas haciendo por mi. te envío un cordial saludo y espero tu respuesta.

Ya te he enviado una propuesta. Ya me contarás.

Por algo eres un experto estoy enormemente agradecido y conforme con el resultado me despido no sin antes desearte un excelente dia y espero poder contar contigo en un futuro eres el mejor !!! y que dios te bendiga.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas