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
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?
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 :(
master te envío una imagen del resultado tal vez sea por el acomodo de mis datos podrías darle un vistazo?
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.
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.
- Compartir respuesta