Automatizar tablas función sumar.si o similar como configurarla

La tabla que os muestro la utilizo para agrupar nº de bultos
por pedido para posteriormente exportar los datos a otra tabla a modo de libro
de registro.
En la tabla aparecen 2 bloques de datos :
-
En el bloque de arriba se introducen a
mano, dependiendo del pedido el nº de
bultos , dimensiones y nº de lote de compra
del producto.
-
Y en el bloque de abajo se muestra un resumen de
todos los datos de la tabla de arriba
separados por dimension, nº de bultos y nº de lote.
Esta “tabla resumen” la estoy generando a mano pero mi
intención es automatizarla. He probado la función sumar.si pero no consigo
obtener los resultados como se muestran en el ejemplo (imagen), no consigo que
tenga los criterios de suma que necesito.
En la tabla resumen lo que pretendo es que me separe y sume
por dimension, que separe por nº de lote y muestre el resultado en nº bulto
como sale en el ejemplo. El resto de datos como nº de pedido y nº cliente se
pueden coger de A1 y A2 . Luego la fecha en obs. Palets corresponde a la fecha
de compra de dichos palets, que podría generarla en una tabla nueva y capturar
esos datos para mostrarlos en esa ubicación .
Se que es complejo e igual no se puede hacer. Os consulto a
vosotros por que por mas que leo y leo , cada vez me lio mas.
Gracias de antemano por vuestra ayuda.

Respuesta
1

Lo reviso y cuando tenga un ejemplo te le envío.

Me puedes enviar tu correo a [email protected]

En el asunto pon tu usuario y pregunta de todoexpertos

Saludos. Dam

Te mando una macro para contar los bultos, el resultado te lo va a poner a partir de la columna J, para que de ahí tomes los datos y los pegues en tu bloque resumen.

Instrucciones para ejecutar macro
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

Sub bultos()
'cuenta el número de bultos
'Por.Dam
filaini = 6
Cells(6, 1).Select
Selection.End(xlDown).Select
filafin = ActiveCell.Row
Range("A5:D15").Select
Range(Cells(filaini - 1, 1), Cells(filafin, 4)).Select
Selection.Sort Key1:=Range("C" & filaini), Order1:=xlAscending, _
        Key2:=Range("D" & filaini), Order2:=xlAscending, _
        Key3:=Range("A" & filaini), Order3:=xlAscending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
        DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
una = 1
filades = 6
totbulto = 0
For i = filaini To filafin
    If una = 1 Then
        largo = Cells(i, 3)
        ancho = Cells(i, 4)
        lote = Cells(i, 1)
        bulto = Cells(i, 2)
        una = 2
    End If
    largo_n = Cells(i, 3)
    ancho_n = Cells(i, 4)
    lote_n = Cells(i, 1)
    bulto_n = Cells(i, 2)
    If largo = largo_n And ancho = ancho_n And lote = lote_n Then
        totbulto = totbulto + 1
    Else
        Cells(filades, 10) = totbulto
        Cells(filades, 11) = largo
        Cells(filades, 12) = ancho
        Cells(filades, 13) = lote
        filades = filades + 1
        totbulto = 1
    End If
    largo = largo_n
    ancho = ancho_n
    lote = lote_n
    bulto = bulto_n
Next
'datos finales
        Cells(filades, 10) = totbulto
        Cells(filades, 11) = largo
        Cells(filades, 12) = ancho
        Cells(filades, 13) = lote
End Sub

Prueba como funciona, si quieres que ponga los resultado en tu bloque resumen las celdas destino, o por lo menos la fila destino, tendría que ser fija, si no es fija y aún así quieres que ponga los datos, el título "No. PEDIDO" ese nombre si tendría que ser fijo, con esto ya podría encontrar en qué celda empezarían los datos; también si necesitas algún otro ajuste a la macro, con gusto lo realizo.

Dam sencillamente es sublime, yo pensaba que no se podría hacer . Enhorabuena de verdad.

Ahora te paso una captura de la tabla para que veas el resultado :

Hay unas cosas que me gustaría comentarte ...

- En la fila B Nº Bulto , me ordena los palets por largo y eso no lo puedo alterar, esos bultos son los números que llevan los palets para identificarlos ( digamos que son las bases de la mercancía que va sobre ellos ). deben quedarse del 1 en adelante si puede ser.

- Al mostrar el resumen que me has preparado la fila K6 entiendo que es un palet de 290 lote 78, pero no se muestra correctamente.

- Como comentas la tabla de arriba es variable , normalmente no solemos pasar de 30 palets ( bultos ), con lo que la tabla se puede ampliar hasta los 30 registros y dejarla fija, para que el macro pueda buscar siempre sobre los mismos bloques de registros.

- Con respecto al resumen me gustaría automatizarlo lo máximo posible ya que me ahorraría muchísimo tiempo , por lo que pienso que con la programación del macro se podría hacer, es decir por ejemplo con los datos de A1 y A2 puedes rellenar A24 B24 C24 , luego irían los datos que me has configurado y en OBS PALLETS, podríamos crear una pequeña tabla donde contendría la fecha de compra , nº de lote y proveedor, y dependiendo del lote vendido fuera rellenándolo.

Se que es muchísimo pedir pero me sacarías de un gran apuro, y de nuevo gracias.

Ya veo que utilizas las imágenes muy bien, podrías poner con flechas o algo así, cómo se llenan los datos del bloque resumen y lo automatizo.

Y segundo, ¿podríamos poner el resumen en las columnas de la derecha?, para que puedas tener hacia abajo, incluso más de 30 bultos y no nos estorbe el bloque resumen, incluso, podrías poner en primer plano el resumen y en las columnas de la derecha el detalle de bultos y se vería más presentable.

Hola Dam, te he hecho una captura con flechas como me has indicado para automatizar el resumen. Con respecto a la vistosidad de la hoja , te comento que he ocultado otros datos que se incluyen para no liarnos por que no son relevantes para el resumen. Ese resumen luego lo exporto a otra hoja a modo de registro de movimientos y ya existe en en ese formato por lo que no lo puedo cambiar ( por que me lo exigen asi ).

Ademas para tu comodidad por si te sirve te paso el excel aquí por si lo necesitas :

http://uploading.com/files/get/a1f12m6d/EJEMPLO.xls

El link de la imagen a tamaño completo :

De nuevo muchísimas gracias por tu ayuda.

Desafortunadamente no pude abrir el archivo, así que me faltaron llenar algunos datos, no sé si ya los estés llenando con alguna fórmula o envíame tu archivo a [email protected] para completarlos; mientras realiza las pruebas con la nueva macro. Asegúrate de que en la columna D exista el título “TIPO PRODUCTO”, en la imagen que me enviaste aparece en la celda D22, así que si este título aparece en la columna D, sin importar la fila, la macro podrá encontrar la fila y de ahí pegar los datos de los resultados.

Te cambio la macro

Sub bultos()
'cuenta el número de bultos
'Por.Dam
hoja = ActiveSheet.Name
Worksheets.Add
hojab = ActiveSheet.Name
'hojab = Sheets("Hoja12").Name
Sheets(hoja).Select
filaini = 6
Cells(6, 1).Select
Selection.End(xlDown).Select
filafin = ActiveCell.Row
Range("A5:D15").Select
Range(Cells(filaini - 1, 1), Cells(filafin, 4)).Copy Destination:= _
    Sheets(hojab).Range("A1")
Range("D:D").Select
Set RangoObj = Selection.Find(What:="TIPO PRODUCTO", _
    After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
filades = RangoObj.Row + 2
Sheets(hojab).Select
Range("A1:D" & Rows.Count).End(xlUp).Select
Selection.Sort Key1:=Range("C1"), Order1:=xlDescending, _
        Key2:=Range("A1"), Order2:=xlDescending, _
        Key3:=Range("D1"), Order3:=xlDescending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
        DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
ufila = Range("A" & Rows.Count).End(xlUp).Row
una = 1
totbulto = 0
For i = 2 To ufila
    If una = 1 Then
        largo = Cells(i, 3)
        ancho = Cells(i, 4)
        lote = Cells(i, 1)
        bulto = Cells(i, 2)
        una = 2
    End If
    largo_n = Cells(i, 3)
    ancho_n = Cells(i, 4)
    lote_n = Cells(i, 1)
    bulto_n = Cells(i, 2)
    If largo = largo_n And ancho = ancho_n And lote = lote_n Then
        totbulto = totbulto + 1
    Else
        Sheets(hoja).Cells(filades, 1) = Sheets(hoja).Cells(2, 2) 'no.pedido
        Sheets(hoja).Cells(filades, 2) = Sheets(hoja).Cells(1, 2) 'cliente
        Sheets(hoja).Cells(filades, 4) = totbulto
        Sheets(hoja).Cells(filades, 5) = largo
        Sheets(hoja).Cells(filades, 6) = ancho
        Sheets(hoja).Cells(filades, 8) = lote
        filades = filades + 1
        totbulto = 1
    End If
    largo = largo_n
    ancho = ancho_n
    lote = lote_n
    bulto = bulto_n
Next
'datos finales
        Sheets(hoja).Cells(filades, 1) = Sheets(hoja).Cells(2, 2) 'no.pedido
        Sheets(hoja).Cells(filades, 2) = Sheets(hoja).Cells(1, 2) 'cliente
        Sheets(hoja).Cells(filades, 4) = totbulto
        Sheets(hoja).Cells(filades, 5) = largo
        Sheets(hoja).Cells(filades, 6) = ancho
        Sheets(hoja).Cells(filades, 8) = lote
    Application.DisplayAlerts = False
    Worksheets(hojab).Delete
    Application.DisplayAlerts = True
Sheets(hoja).Select
End Sub

Saludos.Dam

Si es lo que necesitas.

Antes de finalizar la consulta , darte las gracias por tu solución, ahora voy a intentar entender la programación para terminar la tabla.

Finalizo la consulta , pero me quedo con su email, por si lo necesitara.

Un 10 Dam.

Posdata:

"De nada servirá el esfuerzo, sino existe una nota de reconocimiento"

. Luis Gabriel Carrillo Navas

Muchísimas gracias Dam , ya me gustaría saber lo que tu de excel y visual ... es impresionante ... jamas pensé que este software tenia tanto potencial.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas