Macro para agrupar por fechas
Buenas noches.
Tengo en una hoja de excel 8.000 registros (filas) y necesito utilizar una macro y no una tabla dinámica que me agrupe por fechas las unidades que voy a producir, el tiempo en horas que me gasto y las cajas que empaco.
En ese orden comienza en la columna B la fecha, C las Unidades, D el tiempo en horas y en la E las cajas.
Que me agrupe por fechas esta información y cuando yo coloque el cursor en alguna de estas fechas agrupadas el me lleve unicamente los datos agrupados en esa fecha a otra hoja y me los pegue en la hoja destino.
1 respuesta
Con mucho gusto, puedo colaborarte en crear una macro, para ello te solicito de la manera más atenta y si eres tan amable, por favor, me puedas contestar las siguientes dudas:
1. ¿Cómo se llama tu hoja origen?
2. Cuándo te refieres a grupos, te refieres a que debe realizar total por unidades, ¿total de horas y total de cajas?
3. ¿Dónde quieres los grupos (totales)?
4. ¿Cómo quieres que se llame la hoja destino?
5. ¿Quieres qué la hoja destino sea nueva?
6. Además de los datos agrupado, ¿también quieres que se lleve los totales?
7. ¿Las fechas son diferentes años?
8. ¿Tiene títulos tu hoja origen?
9. ¿A partir de qué fila empiezan los datos?
10. ¿Existen filas vacías?
11. ¿Qué hay en la columna A?
12. ¿Qué hay después de la columna E?
13. Además de las 4 columnas (B, C, D y E), ¿Quieres qué se pasen más datos a la hoja destino?
14. En la hoja destino, ¿a partir de qué FILA quieres que se peguen los datos?
15. En la hoja destino, ¿a partir de qué COLUMNA quieres que se peguen los datos?
16. Si en la columna B, el valor no es una fecha, ¿qué debe hacer la macro?
17. Al finalizar la macro, ¿qué hoja quieres ver en pantalla?
18. Cuando termine la macro, ¿quieres qué te mande un MENSAJE?
19. ¿Qué debe decir el MENSAJE final?
20. Sólo por curiosidad, ¿por qué no quieres una tabla dinámica?
Qué posibilidad existe, de que me pudieras contestar en ese orden.
Te agradezco de antemano tu amable colaboración.
Sin más por el momento me despido enviándote un cordial saludo.
Atentamente. Dam
Gracias Dam por tu ayuda, aquí te envío las respuestas en su orden:
1. Se llama base
2. Si es decir aparece la fecha 01/10/2012 y debajo el total unidades, el total horas y total cajas.
3. Que me los envíe a otra hoja llamala consolidado.
4. Colócale el nombre a una consolidado y a la otra desglosado.
5. Ojo Son dos (2) Hojas destino, la primera es para enviar el consolidado (agrupación) por fechas de los datos, la segunda hoja es para cuando en la hoja consolidado de click en cualquier fecha que yo quiera, inmediatamente me envíe esos datos agrupados en esa fecha a esa nueva hoja de desglosado por asi llamarla, en esta hoja desglosado la información siembre debe llegar sobre la fila 13 y estar en las columnas comprendidas entre la A,b,c,d,e,f ya que en las otras columnas voy a tener formulas que me realicen cálculos cada vez que me llegue la información del desglosado, seria bueno que en la hoja del desglosado siempre que se envíen datos allí, poder borrar SOLO el contenido de las columnas A,b,c,d,e,f para que no quede basura y queden datos remontados, no se si me hago explicar bien? La hoja desglosado renueva los datos cada vez que se de click en la hoja consolidado a una fecha.
6. Es decir va a quedar algo asi en consolidado:
Fechas 02/10/2012 03/10/2012 04/10/2012 etc.
Unidades 15670 10230 11450
Tiempo 10 15 25
Cajas 250 350 850
Si colo el cursor y doy click en cualquier fecha, coloquemos ejemplo 03/10/2012 entonces en la hoja desglosado el me enviaría los datos desagrupados pero solo de ese dia asi
Columna A Fila 13 (Siempre comienza allí)
referencia Unidades Tiempo Cajas
0675SD 10 0,30 2
3456AL 200 2 20
3421XC 1500 4 95
Asi sucesivamente hasta que me traiga todo lo que había agrupado para esa fecha.
7. No las fechas son en el mismo año, lo que pasa es que es la información del mes anterior o el mes vigente.
8. Si la de la hoja consolidado los títulos y otras cositas están en las filas del 1 al 10 y en la hoja desglosado los títulos y otra información esta desde la fila 1 hasta la 11.
9. En la hoja Consolidado de la fila 12 y en la hoja desglosado en la fila 13.
10. No debiera ser, pero hay veces aparece, se debe contemplar el error de estos vacíos.
11. En la columna A de que hoja?, porque los datos están en la Hoja llamada base y ellos se almacenan asi, Columna A = Referencia, Columna B= Fecha, Columna C= Unidades, Columna D = tiempo, Columna E = Cajas
12. En la hoja base nada, en las destino ya te lo explique en el punto 5.
13. si puedes pasar la referencia seria maravilloso, no lo contemple en el consolidado porque como son diferentes referencias no se agruparían porque son diferentes, pero si en el desglosado aparecen seria lo ideal.
14. consolidado fila 12 y en la hoja desglosado en la fila 13.
15. En el consolidado en la columna C y en el desglosado en la A si me ayudas con la referencia, osea si pasas también la referencia.
16. No tenerla en cuenta ya que esta agrupando por fechas.
17. la del consolidado, porque la del desglosado se selecciona cuando se le de click alguna fecha del consolidado.
18. Si, algo asi como agrupado con éxito o algún progres bar.
19. Agrupado con éxito.
20. DISCULPA UN FAVOR MAS, por cada dia agrupado por fechas el tiempo debe ser inferior o igual a 16 horas, cuando en el consolidado se le de click a una fecha y el me lleve la información al desglosado me informe en la casilla C3 la diferencia en horas que tengo (si la sumatoria de horas para ese dia es de 25 y el tope máximo es 16 en la casilla C3 debe aparecer 9 y en la casilla D3 el costo de esas horas que seria C3*15600. En el desglosado me debe aparecer todo el desglosado de lo que el consolido para esa fecha pero me informa con cuantas horas me pase y el costo de esas horas que me pase. Es claro?
Nuevamente, muchas gracias.
Perdona, pero no me quedaron claros los siguientes puntos:
2. Puedes poner un ejemplo de cómo vienen los datos en “base”, ¿vienen hacia abajo o hacia la derecha?
5. ¿Entonces son dos hojas destino?
6. Tu ejemplo no es claro, el 03/10/2012, tienes en unidades 10230 y el desglosado solamente tienes 1710.
20. No me respondiste.
De la petición de las horas hablamos después vamos a trabajar con la pregunta original, si no te causa ningún inconveniente, siendo así; cuando termine la macro, te la envió para que la revises y posteriormente vamos haciéndole adecuaciones. Una pregunta por evento.
Buenas tardes, disculpa si no fui claro, tratare de serlo.
2. en base vienen hacia abajo
Referencia Fecha Unidades tiempo cajas Cliente
23145SD 03/10/2012 50 2 1 juan
1256AL 05/10/2012 200 3 20 pedro
3421XC 03/10/2012 2500 8 120 carlos
5636ED 06/10/2012 48900 3 250 samuel
Asi sucesivamente hacia abajo, esta seria la matriz de donde saldrían los datos.
5. Pues estos datos de la base se agruparían en la hoja consolidado horizontalmente como te explique en el punto 6 y deben pegarce a partir de la fila 12 como telo dije en el punto 14, en esta hoja quedarían ya consolidados los datos de base, pero cuando a una fecha que esta en el consolidado yo le de click para saber esas unidades que están en esa fecha a que clientes le pertenece, me debe llevar a una segunda hoja que se llama desglosado y colocarme la referencia que se encuentra en base (porque no puede ir al consolidado ya que son diferentes referencias, al consolidado solo iría fecha que se agrupa, unidades que se suman, horas que se suman, cajas que se suman) las unidades, el tiempo, las cajas y el cliente, a partir de la fila 13, hacia abajo, osea que voy a ver lo que estaba agrupado SOLO para esa fecha en el desglosado.
6. Es verdad, solo que no coloque todos los registros que sumaran 10.230 unidades, solo fueron 3 registros y me falto el etc. Pero debe mostrar todas las unidades desglosadas por cliente y referencia de esa fecha.
20. Porque a mi jefe le disgusta manejar tablas dinámicas y siempre me exige cosas en programación, disculpa por no haberte respondido.
Muchas gracias por tu ayuda, no sabes el favor tan tremendo que me haces.
Me contestas lo siguiente
Si ya ejecuté una vez la macro y en otro dia ejecuto nuevamente la macro, ¿qué pasa si ya existe la fecha en consolidado?
a) Le acumulo los datos
b) Borro los datos y pongo los nuevos
c) Agrego la columna al final
Si señor, buenas noches, en la hoja base tal vez podemos colocar una columna que me diga una de estas opciones (Programada, cancelada , activa, cumplida), y solo me filtre al consolidado las activas y las programadas, asi siempre voy a tener dominio desde la hoja Base. Creo que seria la mejor opción.
Saludos.
Listo señor, te anexo la macro con la solicitud original, agrupa por fecha y cuando le den click a la fecha te lleve al detalle de esa fecha.
Por favor, para las siguientes peticiones deberás levantar una pregunta por evento.
Instrucciones
1. Abre tu hoja de excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona ALt + F11
3. En el menú elige Insertar / Módulo
4. En el panel del lado derecho copia la macro
5. Para ejecutarla presiona F5
'***Macro*** Sub Macro2() 'Agrupa por fechas 'Por.dam Worksheets("base").Select Range("A1").Select ufil_base = ActiveCell.SpecialCells(xlLastCell).Row ucol_base = ActiveCell.SpecialCells(xlLastCell).Column Columns("A:E").Select Selection.Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(3, 4, 5), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True ActiveSheet.Outline.ShowLevels RowLevels:=2 Range("B1:E1").Select Range(Selection, Selection.End(xlDown)).Select Selection.SpecialCells(xlCellTypeVisible).Select Selection.Copy Worksheets("consolidado").Select Range("C12").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Selection.Replace What:="Total ", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Worksheets("base").Select Columns("B:E").Select Selection.RemoveSubtotal Worksheets("consolidado").Select ufil_consol = ActiveCell.SpecialCells(xlLastCell).Row ucol_consol = ActiveCell.SpecialCells(xlLastCell).Column 'Crea hiperlink For i = 4 To ucol_consol Cells(12, i).Select If IsDate(Cells(12, i)) Then fecha = Cells(12, i) Worksheets("base").Select Columns("B:B").Select Set RangoObj = Selection.Find(What:=fecha, _ After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) Worksheets("consolidado").Select linea_buscar = RangoObj.Row ActiveSheet.Hyperlinks.Add Anchor:=Selection, _ Address:="", SubAddress:="base!B" & linea_buscar Else If Cells(12, i) = "general" Then Range(Cells(12, i), Cells(12 + 3, i)).Clear i = ucol_consol End If End If Next Rows("12:15").Select With Selection.Font .Name = "Arial" .FontStyle = "Normal" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Cells(12, 3).Select MsgBox ("Agrupado con éxito") End Sub '***Macro***
Saludos. Dam
Por favor, tendrías la amabilidad de cerrar la pregunta.
Gracias, nuevamente, quisiera saber si necesito abrir otra pregunta o me puede colaborar ya que usted conoce ya este código, que cuando el hyperlink me lleve los datos de esa fecha que están en base a una hoja desglosado. Porque lo que esta haciendo el hyperlink es llevarme a la hoja base y colocarme en el primer registro que contenga esa fecha, la idea seria es que tomara todos los registros con esa fecha de base y me los pasara a la hoja desglosado. Estaré pendiente.
Gracias nuevamente.
- Compartir respuesta