Sumar rango con filtro varias columnas pasar total filtrado a otra hoja por filtro.
Sumar rango con filtro varias columnas.
Tengo un libro, en el cual tengo que hacer lo siguiente: en columna "A" filtrar por fecha, las demás columnas ("b: ..."), ( los puntos son por que puede variar la cantidad de columnas), van números, tengo que poner la suma total de cada columna en hoja2 por su día de cada columna.
La imagen 2 seria el resumen. Las columnas pueden ser menos o más.
Disculpa Dante por preguntarte directamente.
1 Respuesta
H o l a:
Revisa insertando una tabla dinámica.
Arrastra la fecha a "Rótulos de fila" y cada campo de columna lo arrastras a "Valores"
De esa forma tendrás los totales por cada día y por cada columna:
':) S a l u d o s . D a n t e A m o r ':) Si es lo que necesitas. Recuerda valorar la respuesta. G r a c i a s.
Gracias Dante por responder y tu antencion, lo que necesito es autmatisarlo, que al momento de poner Hoja1.Activate, me haga toda la función, o sea que ya no tengan que moverle a nada.
Hasta el momento tengo este código.
Private Sub CommandButton1_Click()
Dim dia As Integer
Dim fin As Long
C = Cells(2, Columns.Count).End(xlToLeft).Column
fin = Hoja1.Range("a1048576").End(xlUp).Row ' ultima fila
For d = 2 To 32 ' ciclo par a elejir el dia'
For I = 2 To fin ' ciclo 31 dias de los meses no importa los que tienen 30 28 o viciestos
DIA2 = Hoja2.Cells(d, 1) ' doy valor del dia para buscar en hoja2
dia = Day(Hoja1.Cells(I, 1)) ' doy valor del dia para buscar en hoja2
If dia = DIA2 Then 'igualo dias hoja 1 y hoja2
Total = Total + Hoja1.Cells(d, 2) ' sumo dias
Hoja2.Cells(dia + 1, 3) = Total 'pongo total en hoja 2
' Exit For
'Else
' Exit For
End If
Next I
Next d
Hoja2.Activate
' suma hoja2 columna a la derecha
If C < Columns("B").Column Then C = Columns("C").Column
Range("B2") = Application.Sum(Range(Cells(2, Columns("C").Column), Cells(2, C)))
End Sub
En este código me hace la suma pero no logro que distinga la diferencia del día, y me faltaría que lo hiciera por columnas, el valor de las columnas puede ser variable de 1 a 3, 5 o 15.
Espero me puedas apoyar, o si encuentras una o una forma más fácil, de lo que intento hacer. Si te fijas al final esta el código que pusite. Y que me esta sirviendo.
Te anexo la macro
Sub Resumen() 'Por.Dante Amor Set h1 = Sheets("Hoja1") Set h2 = Sheets("Hoja2") h1.Rows(1).Copy h2.Rows(1) h2.UsedRange.Offset(1, 1).ClearContents For j = 2 To h1.Cells(1, Columns.Count).End(xlToLeft).Column For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row dia = Day(h1.Cells(i, "A")) + 1 h2.Cells(dia, j) = h2.Cells(dia, j) + h1.Cells(i, j) Next Next MsgBox "Fin" End Sub
No sé a que te refieres con esto:
"que al momento de poner Hoja1.Activate"
Si quieres que se ejecute en automático tienes que llamar la macro desde algún evento del libro o de la hoja, por ejemplo si quieres que se ejecute en automático cuando abres el libro:
Private Sub Workbook_Open() Call Resumen End Sub
En los eventos de la hoja, cuando seleccionas la hoja:
Private Sub Worksheet_Activate() Call Resumen End Sub
' : ) 'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias ' : )
¡Gracias, super excelente, magnifico!
Que bárbaro, eres mi ídolo, me quedo super, tengo una semana buscando, no paso por mi cabeza que se podía poner así el cilco, apenas había cambiado el else con total=0 y así ya me quedaba la suma, y me iba a faltar los ciclos por columnas.
Efectivamente, quiero que al momento en que se active la hoja se corra el código para poder portegerlo para modificarse.
Espero me puedas seguir apoyando, con dudas, tengo 46 años, y estoy comenzando en esto de la programación.
Con mucho gusto te ayudo con todas tus peticiones. Crea una nueva pregunta en todoexpertos por cada petición, en el desarrollo de la pregunta escribe: "para Dante Amor", ahí me describes con detalle lo que necesitas.
Sal u dos
Gracias Dante de este mismo código que me pasaste, como puedo modificar, si necesito copiar hoja1.cells(11,12) de comenzar la copia de celdas y pegarla en hoja2.cells(11,3)
h1.Rows(1).Copy h2.Rows(1)
Esta instrucción
H1. Rows(1). Copy h2. Rows(1)
Lo que hace es copiar la fila1, suponiendo que ahí tienes los encabezados.
No entiendo lo que necesitas.
Con mucho gusto te ayudo con todas tus peticiones. Crea una nueva pregunta en todoexpertos por cada petición, en el desarrollo de la pregunta escribe: "para Dante Amor", ahí me describes con detalle lo que necesitas.
Sal u dos
Buen día Dante Amor, gracias por tu apoyo, lo que necesito es que la copia inicie de hoja1 en
hoja1.cells(11,12), y pegarla en hoja2(11,3). La insturccion que pones, (que gracias a ti he aprendido), me copia todo el renglón, y solo necesitaría dondo te comento hacia adelante.
Según las imágenes que pusiste los datos de la hoja1 y de la hoja2 empiezan en la celda A1.
Ahora me estás pidiendo algo que no entiendo.
Con mucho gusto te ayudo con todas tus peticiones. Crea una nueva pregunta en todoexpertos por cada petición, en el desarrollo de la pregunta escribe: "para Dante Amor", ahí me describes con detalle lo que necesitas.
Sal u dos
¡Gracias!
Hola Dante, ya casi me sale lo que necesito, con tu código, me fui analizando línea por línea, para poder hacer lo que necesito, te dejo código, para que lo pruebes y veas.
Set H1 = Sheets("Hoja1")
Set h2 = Sheets("Hoja2")
H1.Rows(11).Copy h2.Rows(11)
Hoja2.Range("a:i").Delete
Hoja2.Range("b:b").Columns.Insert
x = 1
For i = 12 To 42
Hoja2.Cells(i, 1) = x
x = x + 1
Next i
' h2.UsedRange.Offset(1, 1).ClearContents ' limpio hoja2
For j = 1 To H1.Cells(11, Columns.Count).End(xlToLeft).Column 'BUSCAR ULTIMA COLUMNA
For i = 12 To H1.Range("j" & Rows.Count).End(xlUp).Row ' BUSCAR ULTIMA FILA
dia = Day(H1.Cells(i, "j")) + 1
h2.Cells(dia + 10, j + 2) = h2.Cells(dia + 10, j + 2) + H1.Cells(i, j + 10)
Next i
Next j
Hola Dante buen día, molestándote otra vez, ya me cambiaron la jugada, te explico, el código en el que me has estado ayudando, hace el movimiento, perfecto, lo hice para que fuera con 31 días, no importando si el mes es de 30 o viciesto, pero ahora necesito que no me ponga los días en los cuales no hubo movimiento. O sea del 1 al 15 (quitando digamos el día 9), hay movimiento de ahí hasta el 25, al ejecutar, el código que me mandaste me toma las columnas por día como debe ser 1,2,3, etc.
No encuentro manera de poder mandarte el archivo para que lo veas. Te dejo código.
Sub suma_matriz() Application.ScreenUpdating = False Set H1 = Sheets("Hoja1") Set H2 = Sheets("Hoja2") H1.Activate H1.Range("L18").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy H2.Activate H2.Range("C18").Select ActiveSheet.Paste Application.CutCopyMode = False Hoja2.Cells(18, 1) = "DIA" Hoja2.Cells(18, 2) = "TOTAL DIA " Hoja2.Rows("19:49").ClearContents '- poner los dias del 1 al 31 'x = 1 'For i = 19 To 49 ' Hoja2.Cells(i, 1) = x ' x = x + 1 'Next i '-------------- copio filas de h1 elimino repetidos For y = 19 To H1.Range("A" & Rows.Count).End(xlUp).Row ' BUSCAR ULTIMA FILA DONDE VA LA FECHA dia = Day(H1.Cells(y, "A")) Hoja2.Cells(y, 1) = dia Next y Hoja2.Range("A19:A1048000").Select Hoja2.Range(Selection, Selection.End(xlDown)).Select Hoja2.Range("A19:A1048000").RemoveDuplicates Columns:=1, Header:=xlYes Rows("19:19").Select Selection.Delete Shift:=xlUp '------------- sumar de hoja1 a hoja2 For j = 1 To H1.Cells(18, Columns.Count).End(xlToLeft).Column 'BUSCAR ULTIMA COLUMNA FILA TITULOS INCIDENTES For i = 19 To H1.Range("A" & Rows.Count).End(xlUp).Row ' BUSCAR ULTIMA FILA DONDE VA LA FECHA dia = Day(H1.Cells(i, "A")) + 1 H2.Cells(dia + 17, j + 2) = H2.Cells(dia + 17, j + 2) + H1.Cells(i, j + 11) Next i Next j '------------ suma columnas a la derecha For Z = 19 To 49 C = Hoja2.Cells(Z, Columns.Count).End(xlToLeft).Column If C < Hoja2.Columns("B").Column Then C = Columns("C").Column Hoja2.Range("B" & Z) = Application.Sum(Hoja2.Range(Cells(Z, Columns("C").Column), Cells(Z, C))) Next Z '------------ suma columnas f = 19 D = H2.Cells(18, Columns.Count).End(xlToLeft).Column For i = 1 To D If Cells(18, i) <> Empty Then Cells(50, i).FormulaR1C1 = "=SUM(R[-31]C:R[-1]C)" End If Next End Sub
- Compartir respuesta