Ich habe eine Tabelle, in der jede Zeile eine Reihe numerischer Wettbewerbsergebnisse enthält. Jede Reihe kann im Gesamtwettbewerb als ein einziger Wettbewerber betrachtet werden, und jede Spalte ist ein Wettbewerbsereignis. Nichts wirklich ungewöhnliches.
Nun möchte ich die Summe der N höchsten Punktzahlen aus jeder Zeile nehmen, so dass:
- Wenn weniger als oder gleich N Punkte angegeben werden, summieren Sie alle aufgelisteten Punkte
- Wenn mehr als N Punkte angegeben werden, addieren Sie die N höchsten der Reihe
Wie geht das?
In meinem speziellen Fall ist N = 5, aber ich hoffe, dass es eine generische Lösung gibt.
Ich würde es vorziehen, kein Makro dafür zu verwenden, aber ich bin bereit, diese Möglichkeit zu erkunden, wenn dies nicht mit einer einfachen Formel möglich ist.
libreoffice-calc
ein CVn
quelle
quelle
Antworten:
Nutzen Sie die
LARGE
Funktion.oder
Beachten Sie, dass in einigen Gebietsschemata Funktionsparameter durch Kommas und nicht durch Semikolons getrennt werden müssen.
quelle
SUM
Formular vereinfacht werdenSUM(LARGE(Range;{1,2,3,4,5}))
. Drücken Sie (Strg) + (Umschalt) + (Eingabetaste), um eine Matrixformel zu erstellen. In beiden Fällen muss die Formel auch neu geschrieben werden, wenn sich N ändert.OK, wenn Ihre numerischen Daten in Zeilen sind
Sheet1
, geben Sie Ihren N- Wert in einSheet2!N1
und geben Sie einin
Sheet2!A1
. (Wenn sich Ihre Daten nur in SpaltenG
bis befindenZ
, ändern Sie sieSheet1!1:1
inSheet1!G1:Z1
.) Drücken Sie Ctrl+ Shift+ Enter, um eine Matrixformel zu erstellen. Ziehen Sie so viele Zeilen nach unten, wie Sie benötigen, und Sie sollten fertig sein. (Beachten Sie, dassSheet2!A17
beispielsweiseSheet1!1:1
in automatischSheet1!17:17
die 17. Zeile von geändert wurdeSheet1
, da die Zeilennummer relativ ist - ohne vorangestelltes$
.)Erläuterung:
COUNT(Sheet1!1:1)
ist die Anzahl der Zahlen (Punkte) in der referenzierten Zeile (die, wie oben angegeben, Zeile1
, Zeile17
oder eine beliebige Zeile sein kann, auf die Sie schauenSheet2
). Ich mache das, weil Sie gesagt haben: "Nicht alle Teilnehmer nehmen an jeder Veranstaltung teil." Ich gehe davon aus, dass die Nichtteilnahmen leer sind oder eine nicht numerische Zeichenfolge.N$1
ist Ihr spezifizierter N- Wert; Die Anzahl der Punkte, die Sie hinzufügen möchten.MIN()
ist natürlich das Minimum. Wenn N 5 ist und ein Teilnehmer nur an drei Veranstaltungen teilgenommen hat, möchten wir alle drei hinzufügen. Wenn ein Teilnehmer an sieben Wettbewerben teilgenommen hat, möchten wir die höchsten fünf summieren.&
ist der Operator für die Verkettung von Zeichenfolgen in Excel (und, wie ich gehört habe, ist Libre Office Calc Excel sehr ähnlich). Wenn also die Anzahl der vonMIN(…)
uns hinzugefügten Scores ( ) beispielsweise 5 beträgt,"1:"&MIN(…)
wird dies zu String-Wert"1:5"
.INDIRECT("1:5")
ist die Region, die Zeile für1
Zeile umfasst5
, undROW()
davon ist das Array{1,2,3,4,5}
.Dies ist ein Trick zum Erstellen eines Array-Werts, der durch Laufzeitdaten angegeben wird.
LARGE(Sheet1!1:1, {1,2,3,4,5})
ist das Array{ LARGE(Sheet1!1:1,1), LARGE(Sheet1!1:1,2), LARGE(Sheet1!1:1,3), LARGE(Sheet1!1:1,4), LARGE(Sheet1!1:1,5) }
, das die größte (höchste) Punktzahl im Bereich darstellt, das zweitgrößte, ... usw., bis zum fünften.Ich habe angenommen, dass Sie sich in einem Gebietsschema befinden, in dem Kommas als Trennzeichen verwendet werden. Wenn Sie sich im Land der Semikolons befinden, tun Sie das Gleiche wie bei den Semikolons.
quelle
Ich würde dies erreichen, indem ich die Punktzahlen als Tabelle aufbaue und die Tabelle dann nach der Punktzahl sortiert halte. Dann können Sie sich nur die ersten n Spalten ansehen ...
Wenn Sie n "on the fly" ändern müssen, können Sie eine indirekte Referenzierung der Zellen basierend auf einem von Ihnen festgelegten Wert durchführen.
quelle