Controllare se il valore della cella esiste nel foglio excel, quindi get i valori delle celle inferiori e aggiungerlo

Ho una categoria diversa definita (colonna A) in un foglio e queste categorie sono distribuite su tutta la scheda di dati (F3: I14).

Voglio aggiungere valore per each categoria (a, b, c, d, e, f) dalla cella F3: I14 che viene scritta sotto di essa nella colonna Assegnata (colonna C).

Ad esempio: Per la categoria a, aggiungere tutti i numbers dalla cella F3: I14 che viene scritta sotto una cella C2.

immettere qui la descrizione dell'immagine

Ho provato la formula VLOOKUP ma non funzionava.

Per una risposta di formula utilizzare questa formula di arrays:

=SUM(IF($F$3:$I$14=A2,$F$4:$I$15)) 

Essere una formula di matrix deve essere confermata con Ctrl-Shift-Enter invece di Enter quando esce dalla modalità di modifica. Se fatta correttamente, allora excel mette {} intorno alla formula.

immettere qui la descrizione dell'immagine

Ho superato la risposta di Scott Craner come penso che sia la soluzione migliore e più pulita. Ma mentre hai tagliato questa domanda con 'VBA', ho pensato di dare una soluzione di programmazione pura con VBA. Se non altro, illustra come una formula buona come una Scott è davvero potente!

 Sub SumCategories() Const startColumn As Integer = 6 'F Const endColumn As Integer = 9 'I Const startRow As Integer = 3 Const endRow As Integer = 14 Const categoryColumn As Integer = 1 'A Const assignedColumn As Integer = 3 'C Dim categoryRow As Integer categoryRow = 2 Dim categoryTotalAssigned As Integer categoryTotalAssigned = 0 Dim currentCategory As String currentCategory = ActiveSheet.Cells(categoryRow, categoryColumn) While Not currentCategory = "" 'Loop through all data to sum totals For c = startColumn To endColumn For r = startRow To endRow Step 2 'Look in every other row If ActiveSheet.Cells(r, c) = currentCategory Then categoryTotalAssigned = categoryTotalAssigned + ActiveSheet.Cells(r + 1, c) End If Next r Next c 'Write total for category ActiveSheet.Cells(categoryRow, assignedColumn) = categoryTotalAssigned 'Move to next row categoryRow = categoryRow + 1 'Reset total for next category categoryTotalAssigned = 0 'Get next category currentCategory = ActiveSheet.Cells(categoryRow, categoryColumn) Wend End Sub Avanti c Sub SumCategories() Const startColumn As Integer = 6 'F Const endColumn As Integer = 9 'I Const startRow As Integer = 3 Const endRow As Integer = 14 Const categoryColumn As Integer = 1 'A Const assignedColumn As Integer = 3 'C Dim categoryRow As Integer categoryRow = 2 Dim categoryTotalAssigned As Integer categoryTotalAssigned = 0 Dim currentCategory As String currentCategory = ActiveSheet.Cells(categoryRow, categoryColumn) While Not currentCategory = "" 'Loop through all data to sum totals For c = startColumn To endColumn For r = startRow To endRow Step 2 'Look in every other row If ActiveSheet.Cells(r, c) = currentCategory Then categoryTotalAssigned = categoryTotalAssigned + ActiveSheet.Cells(r + 1, c) End If Next r Next c 'Write total for category ActiveSheet.Cells(categoryRow, assignedColumn) = categoryTotalAssigned 'Move to next row categoryRow = categoryRow + 1 'Reset total for next category categoryTotalAssigned = 0 'Get next category currentCategory = ActiveSheet.Cells(categoryRow, categoryColumn) Wend End Sub 

Risultato dello script VBA