Ich versuche, einen gewichteten Durchschnitt für Tausende von Studenten zu berechnen.
Dies kann ich reihum für einzelne Lernende durchführen (SUMMENPRODUKTE).
Das Problem ist, dass ich nicht weiß, wie ich das für Tausende von Studenten gleichzeitig machen soll.
Jeder Schüler hat eine andere Anzahl an Noten und jede Note hat ein anderes Gewicht.
Ich habe nur herausgefunden, dass die Daten nach dem Studentencode sortiert sind. Und wenn ich versuche, die angegebene Formel für mich gültig zu machen, solange der Schlüssel derselbe ist, wiederholt sie sich.
Bitte helfen Sie mir, wie ich das machen kann
Antwort1
Es gibt MINDESTENS zwei einfache Möglichkeiten, dies zu tun. Beide „filtern“ nach den gewünschten Werten und führen dann die Berechnung durch.
Eine ist unkompliziert und verwendet das SUMPRODUCT()
Aussehen, mit dem Sie zufrieden sind, führt aber eine Filterung der Werteliste durch, um geeignete Elemente für die Bearbeitung auszuwählen. Sie verwendet , FILTER()
um die Zeilen auszuwählen, die sich qualifizieren, und verwendet dann FILTER()
erneut , um die Spalten aus den FILTER()
Ergebnissen von inner auszuwählen:
=SUMPRODUCT( FILTER( FILTER(B1:D12, B1:B12=I1), {0,1,0}), FILTER( FILTER(B1:D12, B1:B12=I1), {0,0,1}))
Die Formel geht in der dargestellten Form von einer Nachschlagezelle mit dem Wert I1 aus, in der der Student nachschlagen kann. Und natürlich wären die Bereiche für die Spalten Tausender, nicht 12.
Wenn Sie jedoch mit „TAUSENDE“ arbeiten, können Sie einfach so viel von Spalte I verwenden wie nötig, indem Sie die Adresse einfach in einen Bereich ändern. ODER, wenn Sie (wie es wahrscheinlich scheint) mit „Tausende“ auch „Alle“ meinen, können Sie UNIQUE()
mit dem dritten Parametersatz as verwenden, um FALSE
eine Liste einzelner Instanzen jedes Studentennamens zu extrahieren, der in diesen „Tausende“ vorkommt. Aber selbst wenn Sie dieses Array erstellen, können Sie anscheinend nicht einfach verwenden, I1#
um das gesamte Ergebnis zu erfassen. Ich glaube, das liegt an den unterschiedlichen Längen des Nachschlagebereichs und der kürzeren Ausgabe von UNIQUE()
.
FILTER()
erstellt tatsächlich eine Liste mit WAHR/FALSCH-Ergebnissen für die darin enthaltenen Zeilen. Der „Trick“ dabei ist, dass Sie die gewünschten Spalten erhalten, indem Sie diese Liste direkt eingeben (zum Beispiel: {0,1,0}, um die 2. Spalte auszuwählen). Ein Zeitpunkt, an dem Hardcoding tatsächlich nützlich ist, obwohl Sie diese Arrays definitiv so erstellen können, dass die Formel dynamisch ist. Das ist hier einfach nie nötig.
Bedenken Sie, dass man verwenden könnte, INDEX()
um die Spalten auszuwählen, die für SUMPRODUCT()
die Arrays verwendet werden sollen. Ich persönlich denke, das ist einfacher, aber es gibt keinen großen Unterschied.
So viel zum Thema Fantasie. Eine altmodischere Methode, die mit ziemlich alten Excel-Versionen funktioniert, besteht darin, einfach Bereichsvergleiche durchzuführen, um die Daten zu „filtern“ und sie anzuzeigen an SUMPRODUCT()
:
=SUMPRODUCT( IF(B1:B12=I1, C1:C12, 0), IF(B1:B12=I1, D1:D12, 0) )
Jedes Array in der Funktion wird durch IF()
's bereitgestellt, die einfach den Nachschlagebereich mit der Zelle in Spalte I für die Zeile vergleichen (ja, keiner der Ansätze verwendet SPILL
Formeln, Sie müssen also so weit nach unten kopieren, wie UNIQUE()
sich Spalte I erstreckt) und die Daten der beiden Spalten in die Parameter der Funktion zurückgeben.
Direkt, klar und einfach, leicht zu verstehen und über die Jahre hinweg zu pflegen. Sollte schnell sein, da es einfache WAHR/FALSCH-Tests verwendet, keine Funktionen. Keiner der Ansätze verwendet SPILL
Funktionen in seiner SUMPRODUCT()
Spalte, also gibt es keinen Vorteil für beide.
Dieses verwendet jedoch nur Funktionen, mit denen Sie eindeutig vertraut sind. Warum also nicht?
Und tatsächlich funktioniert der lästige Teil, nämlich das Erstellen einer Liste der einzelnen Studenten, SPILL
auch bei dieser Aufgabe gut.