Una forma de lograr llenar una hoja con la sumatoria de celdas específicas en forma de consulta

Quisiera saber si podía ayudarme a encontrar una solución a mi duda.

En una primera hoja en la columna A tengo un listado de número de serie de partes, lo sigue una serie de columnas que representan las semanas del año conteniendo una cantidas me explico: si en la celda B1 tengo 00001 en b2 tengo una cantidad de partes de la primera semana en la B3 la cantidad de la segunda semana y así todo el año lo que yo necesito es una forma de que en la hoja 2 se me arrojen las sumatoria de semanas específicas de una sola parte por ejemplo, de la semana 3 a la semana 6 cuántas partes se registraron como consulta, si pudiera en 2 celdas los 2 números de semana y en una tercera me aparezca el resultado

Le he dado muchas vueltas y jugado con sumar. Si pero no he podido dar con el como

Respuesta

No creo que haya problema en resolver lo que pides con una sola fórmula matricial, siempre y cuando publiques una foto una foto real de la ubicación de los datos en la hoja de cálculo, en donde estarían las celdas que tu indicas como criterios (si son para cada fila, o para todos los datos), en donde el resultado (y sería genial si muestras el resultado de un cálculo hecho manualmente)...

Posiblemente SUMAR. SI no te sirva, porque tiene la limitación de requerir TODOS los rangos del mismo tamaño. Con fórmulas matriciales, esta limitación no es absoluta.

2 respuestas más de otros expertos

Respuesta
1

¿Es esto lo que buscas?, ¿Por ejemplo seleccionar de la semana 2 a la 6 y sacar la sumatoria?

la cual queda asi en la hoja 2

si tu respuesta es si, esta es la macro que ocupas

Sub sumar()
Set DATOS = Range("b2").CurrentRegion
Set H2 = Worksheets("HOJA2")

With DATOS

Set DATOS = .Cells(2, 2).Resize(.Rows.Count - 1, .Columns.Count - 1)
.Select
INICIO = Val(InputBox("SEMANA INICIAL", "AVISO"))
Final = Val(InputBox("SEMANA FINAL", "AVISO"))
Set AREA = .Columns(INICIO).Resize(.Rows.Count, Final - INICIO + 1)
SUMA = WorksheetFunction.Sum(AREA)
End With

With H2
.Range("B2") = "SEMANA " & INICIO
.Range("C2") = "SEMANA " & Final
.Range("D2") = SUMA
End With

End Sub

Los únicos datos que necesitas cambiar son los que están en los range() por los que tu estés usando en tu información.

Esto es increíble, es un grandísimo avance para mi y corre excelente solo, me preguntaba si había manera de poner que lance la sumatoria de una sola fila y se que modo?  

Me explico, de una sola parte, como en tu ejemplo de tyu-01 de la semana 1 a la 2.

En la siguiente imagen te muestro el resultado de la nueva macro, ahora la macro te pide un numero de parte, una semana de inicio y una de fin y te hace la selección en base a estos 3 parámetros.

luego en la hoja 2 va acumulando las consultas asi

y esta es la macro 

Sub sumar()
Set DATOS = Range("B2").CurrentRegion
Set H2 = Worksheets("HOJA2")
With DATOS
    columnas = .Columns.Count
    NP = InputBox("INGRESA NUMERO DE PARTE", "AVISO")
    If NP = Empty Then End
    fila = WorksheetFunction.Match(NP, .Columns(1), 0)
    Set partes = .Rows(fila).Resize(1, columnas)
    With partes
        Set partes = .Columns(2).Resize(1, columnas - 1)
        INICIO = Val(InputBox("INGRESA SEMANA INICIAL", "AVISO"))
        Final = Val(InputBox("INGRESA SEMANA FINAL", "AVISO"))
        If INICIO = Empty Or Final = Empty Then End
        Set AREA = .Columns(INICIO).Resize(.Rows.Count, Final - INICIO + 1)
        AREA.Select
        SUMA = WorksheetFunction.Sum(AREA)
    End With
End With
With H2
    Set DESTINO = .Range("B2").CurrentRegion
    With DESTINO
        FILAS = .Rows.Count: COLUMNASD = .Columns.Count
        If FILAS = 1 And COLUMNASD = 1 Then
            Set DESTINO = .Resize(1, 4)
        Else
            Set DESTINO = .Rows(FILAS + 1).Resize(1, 4)
        End If
        .Cells(1, 1) = NP:        .Cells(1, 2) = INICIO
        .Cells(1, 3) = Final:     .Cells(1, 4) = SUMA
    End With
End With
End Sub

recuerda no olvidar evaluar mi respuesta

De nuevo cambia solo tienes que cambiar el range("b2") y la hoja2 por el rango y la hoja que estés usando, las líneas terminadas en .select las puedes borrar, solo son para resaltar las líneas seleccionadas.

Esto facilito meses de trabajo y es perfecto y exactamente lo que buscaba mi cabeza voló con esto, muchísimas gracias! Esperaría que hubiera una forma de retribuirle 

Solo encontré una desventaja, sobre la macro, hay más de un número de parte idéntico en la lista , puesto que se usa la misma en distintos productos me explico, la lista es

tyc-001 taquete de puerta

Tyc-001taquete de ventana

Tyc-002 tornillo 

Tyc-002 mismo tornillo en ventana

Tyv-002 tornillo en puerta

Con esta macro me calcula solo la primera,

Sé que es abusar de el favor más grande pero hay manera de que sumen todos del mismo tambien si no, no hay problema mi calificación sigue 10/10 y estrellita para usted.

La macro efectivamente no esta diseñada para tratar con numero de partes duplicados, le hice unos cuantos cambios y ahora si los considera, solo que para que funcione esta es la estructura que debe tener tu información.

y el resultado una vez que corras la macro es el siguiente:

y este el codigo de la macro que ocupas 

Sub sumar()
Set DATOS = Range("B2").CurrentRegion
Set H2 = Worksheets("HOJA2")
With DATOS
    columnas = .Columns.Count
    NP = InputBox("INGRESA NUMERO DE PARTE", "AVISO")
    If NP = Empty Then End
    fila = WorksheetFunction.Match(NP, .Columns(1), 0)
    CUENTA = WorksheetFunction.CountIf(.Columns(1), NP)
    Set partes = .Rows(fila).Resize(CUENTA, columnas)
    With partes
        Set partes = .Columns(3).Resize(CUENTA, columnas - 2)
        INICIO = Val(InputBox("INGRESA SEMANA INICIAL", "AVISO"))
        Final = Val(InputBox("INGRESA SEMANA FINAL", "AVISO"))
        If INICIO = Empty Or Final = Empty Then End
        Set DESTINO = H2.Range("B2").CurrentRegion
        With DESTINO
            FILAS2 = .Rows.Count: COLUMNAS2 = .Columns.Count
            If FILAS2 = 1 And COLUMNAS2 = 1 Then
                Set DESTINO = .Resize(1, 4)
            Else
                Set DESTINO = .Rows(FILAS2 + 1).Resize(1, 4)
            End If
        End With
        Set SEMANAS = .Columns(INICIO).Resize(.Rows.Count, Final - INICIO + 1)
        For J = 1 To .Rows.Count
            DESTINO.Cells(J, 1).Value = .Cells(J, -1).Value
            DESTINO.Cells(J, 2).Value = .Cells(J, 0).Value
            DESTINO.Cells(J, 3).Value = INICIO
            DESTINO.Cells(J, 4).Value = Final
            DESTINO.Cells(J, 5).Value = WorksheetFunction.Sum(SEMANAS.Rows(J))
        Next J
        DESTINO.EntireColumn.AutoFit
    End With
End With
End Sub
Respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas