2017-10-26 1 views
-1

Wie summiere ich alle Produkte der Spalten in Tabelle mit einer anderen Tabelle?Summe Produkte von benannten Spalten

Um es klarer zu machen, sehen Sie sich das beigefügte Bild an. Ich möchte, dass die Spalte Cost der Tabelle TableA zu

=sum([A]*Lookup([[A];[#Headers]]; Parameters[What]; Parameters[Cost]); ....) 

Und so weiter für jede Spalte von TableA gleich sein.

Ich bin aber ziemlich zögern, es manuell zu tun und versuchen, mit Formel zu entwickeln, um es automatisch zu machen, also wenn ich eine weitere Spalte hinzufügen, ich muss die Formel in Spalte Cost

enter image description here

nicht ändern

EDIT

Was ich bisher gekommen ist ungefähr so:

=sum(
    [A]*Lookup([[A];[#Headers]]; Parameters[What]; Parameters[Cost]); 
    [B]*Lookup([[B];[#Headers]]; Parameters[What]; Parameters[Cost]); 
    [C]*Lookup([[C];[#Headers]]; Parameters[What]; Parameters[Cost]) 
) 

Ich möchte eine Formel haben, die neue Spalte abdecken wird, wenn ich eine hinzufüge. Also, lassen Sie uns sagen, ich habe eine Spalte hinzugefügt NEW benannt, so dass die Formel sollte es automatisch abholen und effektiv wie diese Arbeit:

=sum(
    [A]*Lookup([[A];[#Headers]]; Parameters[What]; Parameters[Cost]); 
    [B]*Lookup([[B];[#Headers]]; Parameters[What]; Parameters[Cost]); 
    [C]*Lookup([[C];[#Headers]]; Parameters[What]; Parameters[Cost]); 
    [NEW]*Lookup([[NEW];[#Headers]]; Parameters[What]; Parameters[Cost]) 
) 

Die Parameters Tabelle wird natürlich gehören eine Zeile mit dem Wert NEW

+0

Können Sie ein Beispiel für die Kosten für diese beiden Elemente in Ihrem Bild geben. Ich denke, item1 muss (50 * 4 + 5 * 100 + 1 * 150) richtig sein? –

+0

Stimmen die Spalten in TableA immer mit den Zeilen in den Parametern überein? – JohnRC

+0

Ihre Frage ist nicht sehr klar, weil Sie sich die Syntax vorstellen, die Sie haben möchten. Es wäre hilfreich, eine echte Excel-Formel zur Verfügung zu stellen, die Sie im Schnittpunkt von Cost und item1 fest codiert haben. –

Antwort

0

wenn Sie es (50 * 4 + 5 * 100 + 1 * 150) für die Position sein wollen 1, dann können Sie diese Formeln in Zelle B3 unter der Annahme gelten, dass das Wort „Kosten in Zelle B2 ist

INDEX($B$7:$B$9,MATCH($C$2,$A$7:$A$9,0))*$C3+INDEX($B$7:$B$9,MATCH($D$2,$A$7:$A$9,0))*$D3+INDEX($B$7:$B$9,MATCH($E$2,$A$7:$A$9,0))*$E3 
+0

Ich möchte die korrekten Produktwerte nach Spaltennamen suchen – SOReader

+0

Noch nicht klar. Wie ich im Kommentar zu Ihrer Frage erwähnt habe. Geben Sie ein Beispiel für die Werte an, die Sie erwarten. –

0

wenn die Parameter in den Tabellen TableA und Parameters sind in der gleichen Reihenfolge, dann kann man die folgende Cost in Spalte verwenden:

=SUMPRODUCT(TRANSPOSE(TableA[@[A]:[C]])*Parameters[Cost]) 

als Matrixformel eingegeben (d.h. Geben Sie die Formel dann statt die Eingabetaste drücken, drücken Sie Strg + Umschalt + Enter)

enter image description here

EDIT:

Wenn die Spalten in TableA nicht bestellt werden, aber die in Parameter sind, dann können Sie verwenden die folgenden (ich bin nicht 100% sicher, dass es immer funktioniert, aber ich habe ein wenig getestet und es scheint gut zu funktionieren):

=SUMPRODUCT(TableA[@[A]:[C]]*LOOKUP(TableA[[#Headers],[A]:[C]],Parameters[What],Parameters[Cost])) 

muss nicht als Matrixformel eingegeben werden.

+0

Die Reihenfolge der Spalten aus 'TableA' stimmt nicht mit der Reihenfolge der Zeilen aus' Params' überein. Was Sie annehmen können ist, dass 'Params' in aufsteigender Reihenfolge ist - das ist der Grund für' Lookup' Funktion – SOReader

+0

@SOReader Dann bezweifle ich, dass es eine kürzere Methode gibt. Mein Vorschlag in diesem Fall wäre entweder sicherzustellen, dass TableA und Parameter die gleiche Reihenfolge der Parameter haben, oder eine zweite Tabelle als intermediär zu verwenden: https://i.stack.imgur.com/7Gwr6.png – Jerry

+0

@SOReader Edited in eine andere Formel, von der ich glaube, dass sie das Problem löst. – Jerry

0

Diese Antwort wurde geändert, um Ihrer Aussage Rechnung zu tragen, dass die Spalten von TableA nicht unbedingt mit den Einträgen in den Zeilen der Parameter-Tabelle übereinstimmen.

Wenn Sie nicht mit Makrocode dagegen haben, könnten Sie Ihre eigene Funktion zu tun, um die Arbeit definieren:

Option Explicit 

Public Function TotalCost(rItemCodes As Range, rCostTable As Range, rItemCounts As Range) As Double 
    '// this function returns the total cost of an item using 
    '// a lookup into a table of costs from a code, multiplying 
    '// the item count by the corresponding cost 

    Dim rItemCount As Range 
    Dim rCost As Range 
    Dim rCode As Range 
    Dim rMatchingCode As Range 

    '// Define the code list as the first column of the cost table 
    Dim rCodeList As Range 
    Set rCodeList = rCostTable.Columns(1) 

    TotalCost = 0 

    Dim ix As Integer 

    '// Loop through every item code 
    For ix = 1 To rItemCodes.Columns.Count 
     Set rItemCount = rItemCounts.Cells(1, ix) 
     Set rCode = rItemCodes.Cells(1, ix) 
     Set rMatchingCode = Nothing 

     On Error Resume Next 

      '// Find the item that matches in the cost list 
      Set rMatchingCode = rCodeList.Find(rCode.Value, LookAt:=xlWhole) 

      '// Check it was found, and calculate the additional cost 
      If Not rMatchingCode Is Nothing Then 
       Set rCost = rMatchingCode.Cells(1, 2) 
       TotalCost = TotalCost + rItemCount.Value * rCost.Value 
      End If 

     On Error GoTo 0 
    Next ix 


End Function 

Wenn Sie die Tabelle der Kosten in der Parameter-Tabelle genannt, sagen wir, CostTable (Bereich A8 : B10 in Ihrem Beispiel), und die Kopfzeile von Tabelle A, sagen wir, CodeList (Bereich C1: E1 in Ihrem Beispiel), dann wäre die Formel in B2 =TotalCost(CodeList,CostTable,C2:E2).

+0

Ich würde lieber nicht Makros verwenden, bis es absolut notwendig ist. – SOReader

+0

Gut genug, aber Makros, die sorgfältig verwendet werden, können Formeln in Zellen drastisch vereinfachen und die Wartung Ihrer Tabelle erleichtern. – JohnRC