Summe zu N höchstem Wert aus einer Reihe?

3

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.

ein CVn
quelle
Würde ein VBA-Makro für Sie funktionieren?
Brad Patton
@BradPatton Funktionieren VBA-Makros in LibreOffice Calc?
ein Lebenslauf vom
Ich weiß es nicht. Ich habe kein LibreOffice, deshalb habe ich Sie gefragt.
Brad Patton
@BradPatton Ich könnte wahrscheinlich ein Makro zusammenstellen, das in LOC funktioniert, aber wie ich in der Frage sagte, würde ich eine nicht-makrobasierte Lösung bevorzugen. Die Logik eines Makros wäre nicht sehr schwer zu verstehen, auch wenn der "triviale" Ansatz in Bezug auf die Leistung möglicherweise nicht perfekt ist (andererseits würde ich in einem Makro sowieso nichts Leistungskritisches tun).
ein Lebenslauf vom
Ich kenne keine Excel-Funktionen, die das, was Sie versuchen, direkt lösen würden. Ich könnte wahrscheinlich ein Makro schreiben, das es tun würde. Ich denke, das ist Ihre beste Wahl.
Brad Patton

Antworten:

3

Nutzen Sie die LARGEFunktion.

=LARGE(Range;1)+LARGE(Range;2)+…+LARGE(Range;N)

oder

=SUM(LARGE(Range;1); LARGE(Range;2); …; LARGE(Range;N))

Beachten Sie, dass in einigen Gebietsschemata Funktionsparameter durch Kommas und nicht durch Semikolons getrennt werden müssen.

Bart
quelle
Dies ist perfekt; fast genau das, was ich mir erhofft hatte! Der einzige Nachteil ist, dass es einen Fehler gibt, wenn es keinen N-ten größten Wert gibt, aber eine Reihe von IF () und COUNT () hat den Trick gemacht.
ein Lebenslauf
Dies ist umständlich, wenn N groß ist. Wenn N ein fester Wert ist (bekannt, wenn Sie die Tabelle erstellen), z. B. 5, kann das SUMFormular vereinfacht werden SUM(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.
Scott
1

OK, wenn Ihre numerischen Daten in Zeilen sind Sheet1, geben Sie Ihren N- Wert in ein Sheet2!N1und geben Sie ein

=SUM(LARGE(Sheet1!1:1, ROW(INDIRECT("1:"&MIN(COUNT(Sheet1!1:1),N$1)))))

in Sheet2!A1. (Wenn sich Ihre Daten nur in Spalten Gbis befinden Z, ändern Sie sie Sheet1!1:1in Sheet1!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, dass Sheet2!A17beispielsweise Sheet1!1:1in automatisch Sheet1!17:17die 17. Zeile von geändert wurde Sheet1, 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, Zeile  1, Zeile  17oder eine beliebige Zeile sein kann, auf die Sie schauen Sheet2). 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$1ist 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 von MIN(…)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ür 1Zeile umfasst 5, und
  • ROW()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.

Scott
quelle
0

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.

Tom Stratton
quelle
Dies fällt auseinander, weil jeder Teilnehmer bei jedem Event sehr unterschiedliche Punktzahlen haben kann und nicht alle Teilnehmer an jedem Event teilnehmen (in der Tat wäre ich überrascht, wenn einer von jedem Event eine Punktzahl hat!). Es ist schwierig, wirklich ausführlich zu erklären, ohne auf Einzelheiten einzugehen, die für die Frage nicht relevant sind, aber es gibt gute Gründe dafür. Ich muss den Wert von n jedoch in keiner Weise im laufenden Betrieb ändern .
ein CVn
dann scheint Ihre Frage ein wenig anders zu sein ... Wenn Sie dies spaltenweise tun möchten, können Sie die Pivot-Tabellen für jede Spalte verschieben. Egal, was Sie tun, es müssen viele zusätzliche Daten übertragen werden. Wenn jede Veranstaltung einen Konkurrenten und eine Punktzahl hatte - legen Sie jede auf ein separates Blatt, um es einfacher zu machen. Es gibt etwas zu gewinnen durch Filtern, aber es funktioniert nur pro Spalte - siehe wiki.openoffice.org/wiki/Documentation/How_Tos/… für einige Ideen
Tom Stratton
Haben Sie darüber nachgedacht, zu einer Datenbank zu wechseln?
Tom Stratton
"Haben Sie darüber nachgedacht, zu einer Datenbank zu wechseln?" Mit einer Datenbanklösung ein paar Spalten zusammenzufassen, scheint ein wenig übertrieben. Ja, das wäre relativ trivial sein mit SQL zu lösen, aber Mathe ist ziemlich viel , was Tabellen überhaupt geht, und sicherlich kann es nicht sein , dass ungewöhnlich die höchsten Zahlen in einer Reihe fassen zu wollen.
ein CVn