He estado buscando en todas partes cómo hacer esto, probé vlookup y puedo fusionar manualmente los datos, sin embargo, lo que estoy tratando de hacer es tomar un montón de nombres de sabores que están alineados verticalmente en varias hojas y en un hoja final toma todos esos sabores, combínalos y dame la cantidad total de sabor requerida. También estoy tratando de que esto se actualice automáticamente a medida que actualizo la cantidad que necesito para hacer cualquier cantidad de jugo que esté haciendo.

Intentaré hacer un ejemplo porque no puedo cargar la hoja aquí.

Una hoja puede verse así

French Vanilla  20
Pineapple       16
Sweet Cream     10
Mango           8
Coconut         4
                0
Strawberry      30
NY Cheesecake   20
                0
                0
                0
                0

La segunda hoja puede verse así

Passion Fruit    20
Mango            10
Coconut          10
Koolada          2
                 0
                 0

Blueberry Candy  10
Banana Split     6
Strawberry       12
Mango            12
                 0
                 0

Lo que estoy tratando de hacer es obtener la última hoja para extraer todos estos nombres y números, poner los nombres que coinciden y sumar los números de los nombres coincidentes. No necesito necesariamente que esté alfabetizado, solo necesito que se actualice automáticamente ya que ingreso diferentes cantidades en las primeras hojas.

-2
liftedplane 26 ene. 2016 a las 14:57

2 respuestas

La mejor respuesta

Agregué esto como una respuesta separada, ya que es completamente diferente de mi primera respuesta.

En algún lugar de su libro de trabajo, cree una lista de nombres de hojas. p.ej. en A1 ponga 'Norse Temple 30ML', en A2 ponga 'Norse Temple 15ML', etc. Nombre este rango - lo he llamado SheetList en mi ejemplo.

Crea esta fórmula: =SUMPRODUCT(SUMIF(INDIRECT("'" & SheetList & "'!B:B"),"Nicotine 100mg",INDIRECT("'" & SheetList & "'!C:C")))

'Nicotina 100 mg' se puede reemplazar por una referencia de celda para que pueda arrastrar hacia abajo.

Este método requerirá que cree manualmente una lista de ingredientes en la página de su informe, pero la suma se hará por usted. También se actualizará a medida que actualice las cifras; el método VBA requeriría ejecutar manualmente el código.

Si desea una solución VBA, puedo crear una, aunque solo necesito encontrar el tiempo.

Enlace al lugar donde encontré la solución: http: // www .mrexcel.com / forum / excel-questions / 119020-sumif-multiple-sheets.html

0
Darren Bartrup-Cook 27 ene. 2016 a las 11:06

No ha dicho si hay otras hojas sin datos, o en qué columnas aparecen los datos. He supuesto que los datos siempre están en las columnas A: B y no hay nada más en el libro de trabajo excepto esas hojas.
Este código creará una nueva hoja de informe cada vez - ejecútelo dos veces y se bloqueará, ya que intentará crear una segunda hoja llamada 'Informe' (así que elimine la hoja de informe cada vez). Puede haber mejores formas de hacerlo, y este código definitivamente podría mejorarse para satisfacer sus necesidades.

Public Sub Report()

    Dim wrkSht As Worksheet
    Dim wrkSht_rpt As Worksheet
    Dim lLastRow As Long
    Dim lLastRow_rpt As Long

    'Create a new sheet to put the report on.
    Set wrkSht_rpt = Worksheets.Add
    wrkSht_rpt.Name = "Report"

    'Get the data from each sheet and paste into columns A:B on the report sheet.
    For Each wrkSht In ThisWorkbook.Worksheets
        lLastRow = 0
        With wrkSht
            If .Name <> wrkSht_rpt.Name Then

                'If there's no data in column A this will throw an error.
                On Error Resume Next
                lLastRow_rpt = wrkSht_rpt.Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
                lLastRow = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
                On Error GoTo 0

                If lLastRow > 0 Then
                    'There's data on the sheet, so copy it to the report sheet.
                    .Range(.Cells(1, 1), .Cells(lLastRow, 2)).Copy _
                        Destination:=wrkSht_rpt.Cells(lLastRow_rpt + 1, 1)
                End If
            End If
        End With
    Next wrkSht

    lLastRow = 0
    lLastRow_rpt = 0

    With wrkSht_rpt
        'Find last row in column A on report.
        lLastRow_rpt = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row

        'Copy all flavours to column D.
        .Range(.Cells(1, 1), .Cells(lLastRow_rpt, 1)).Copy _
            Destination:=.Cells(1, 4)

        'Sort the column, this will place all blanks at the bottom.
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range(.Cells(1, 4), .Cells(lLastRow_rpt, 4)), Order:=xlAscending
        .Sort.SetRange .Range(.Cells(1, 4), .Cells(lLastRow_rpt, 4))
        .Sort.Header = xlNo
        .Sort.SortMethod = xlPinYin
        .Sort.Apply

        'Remove duplicates and find new last row in column D.
        'The new last row is stored in a separate variable as we need to original to use
        'within the SUMIF formula.
        .Range(.Cells(1, 4), .Cells(lLastRow_rpt, 4)).RemoveDuplicates 1, xlNo
        lLastRow = .Columns(4).Find("*", , , , xlByColumns, xlPrevious).Row

        'Add a formula to add everything up, then copy paste values.
        With .Range(.Cells(1, 5), .Cells(lLastRow, 5))
            .FormulaR1C1 = _
                "=SUMIF(R1C1:R" & lLastRow_rpt & "C1,RC4,R1C2:R" & lLastRow_rpt & "C2)"
            .Copy
            .PasteSpecial xlPasteValues
        End With

        .Range("A1:C1").EntireColumn.Delete
        .Columns(1).AutoFit

    End With

End Sub
0
Darren Bartrup-Cook 26 ene. 2016 a las 13:26