Frage stellen
0

Calc: Für jede Zeile die Spalte mit dem größtem Wert herausfinden

gefragt 2018-08-01 18:57:21 +0100

rummster Gravatar-Bild

updated 2018-08-01 19:13:14 +0100

Ich habe einen Datensatz mit Kraftwerke. Die Kapazitätsangaben befinden sich je nach Typ in verschiedenen Spalten, z.B. "Flywheels", "Geothermal" oder "Landfill Gas".

Ich suche

  1. die Anzahl von Spalten mit Werten > 0 – das kann ich mit COUNTIFS
  2. den Spaltennamen des größten Wertes und den des zweitgrößten – hier habe ich keinen Ansatz

Wenn ein Kraftwerk z.B. den höchsten Wert bei "Hydroelectric" hat, dann hätte ich gerne den Spaltennamen als Ergebnis.

Meine Testdatei (zip) gibt es hier: Link auf github

Vielen Dank im voraus!

Bearbeiten Tags ändern Melden schließen vereinen löschen

Kommentare

ungezippt wäre besser

stromo Gravatar-Bildstromo ( 2018-08-01 19:26:12 +0100 )Bearbeiten

Gute Idee, englische Funktionsnamen zu verwenden!
Am besten nimmt man auch gleich eine englischsprachige Benutzeroberfläche, stellt aber als Parametertrenner das Semikolon ein. (Auch das Komma als Trenner in konstanten Arrays passt nicht wirklich.)

Lupp Gravatar-BildLupp ( 2018-08-02 00:35:07 +0100 )Bearbeiten

2 Antworten

0

geantwortet 2018-08-02 00:31:29 +0100

Lupp Gravatar-Bild

updated 2018-08-02 21:35:29 +0100

Ob das den Aufwand lohnt? Eine Funktion, die ich in der Demo verwendet habe, arbeitet erst ab Version LibO V5.4 verlässlich. (In AOO gibt es sie nicht.)

Editing:
Die Formeln in meiner Lösung arbeiteten nicht unter allen Bedingungen korrekt. Ich habe mir die Sache nochmals durch den Kopf gehen lassen, und bin jetzt überzeugt, dass eine Lösung mit mindestens act Helferspalten, aber mit viel einfacheren (und pflegeleichten) Formeln, wesentlich empfehlenswertetr ist.

Meine Frage nach der zu erwartenden Höchstzahl von Datenreihen wurde nicht beantwortet. Falls es aber "sehr viele" (etliche tausend z.B.) sind, wird die formelbasierte Löung weniger effectiv sein, und eine große Datei efordern. Jede Zelle, die eine Formel enthält, erzeugz halt auch Speicherbedarf.

Eine Lösung mit Hilfe eines Benutzerprogramms ("Makro") braucht nur Platz für die eingegebenen Daten. Den Platzbedarf des Programms kann man getrost ignorieren.

Ich habe in diese neue Demo deshalb auch eine (recht roh geschnitzte) Lösung mit Benutzerprogramm eingebaut.
Dabei bin ich auf ein sehr seltsames Problem gestoßen, das mich gezwungen hat, die Bsic-Funktion IIf() zu verwenden.

Bearbeiten Melden löschen Link mehr

Kommentare

Hallo lupp, vielen Dank dafür. Weißt du, dass die komplizierte Formel für das zweitgrößte Kraftwerke völlig unnötig ist und auch die einfache Funktion für das größte Kraftwerk + IFERROR vorne vor funktioniert?

rummster Gravatar-Bildrummster ( 2018-08-02 14:50:27 +0100 )Bearbeiten

@rummster: "Weißt du, dass die komplizierte Formel für das zweitgrößte Kraftwerke völlig unnötig ist und auch die einfache Funktion für das größte Kraftwerk + IFERROR... "
Das stimmt natürlich nicht.
Es gibt zwei Fehlerquellen.
-1- Der Wert für den 2. Rang ist der gleiche wie für den ersten.
-2- Mehere "Kategorien" im 2. Rang sind gleichwertig.

Lupp Gravatar-BildLupp ( 2018-08-02 15:28:39 +0100 )Bearbeiten

Ich habe dfas mit dem "Phantasy Plant" in Reihe 20 demonstriert.
Meine Lösing ist natürlich noch insoweit mangelhaft, dass im Falle mehrerer gleichrangiger "Kategorien" mit der höchsten Kennzahl nur die am weitesten links stehende auf den ertsen Platz gesetzt wird, und die anderen unter Platz 2 erscheinen. Ich habe das "stillscheigend inkauf genommen".
Rechenblätter können solche Dinge einfach nicht gut.
Ein kleines Spezialprogramm, das die Daten seriell bearbeitet, hätte es leichter.

Lupp Gravatar-BildLupp ( 2018-08-02 15:33:53 +0100 )Bearbeiten
0

geantwortet 2018-08-01 20:37:42 +0100

RobertG Gravatar-Bild

updated 2018-08-01 21:57:37 +0100

Ich habe zumindest für den größten Wert eine Lösung:

=VERWEIS(MAX(I2:P2);I2:P2;I$1:P$1)

eingetragen in G2.

In H2 habe ich die folgende Formel versucht, komme damit aber selbst bei Zeilen mit einem eindeutig zweitgrößten Wert nicht auf die richtige Bezeichnung in der ersten Zeile:`

=VERWEIS( MAXWENNS(I2:P2;I2:P2;"<"&MAX(I2:P2));I2:P2;I$1:P$1)

Diese Formel ergibt mit MAXWENNS sehr wohl z.B. in Zeile 7 den Wert 50 als 2. Wert, aber sucht nicht dazu passend den Verweis raus, sondern landet grundsätzlich eine Spalte vor dem Wert, den die vorherige Formel auswirft. Das liegt wohl daran, dass für die Funktion VERWEIS die Daten sortiert vorliegen müssen. Deswegen jetzt dies Funktion - Calc-ExpertInnen können das sicher besser:

WENN(MAXWENNS(I2:P2;I2:P2;"<"&MAX(I2:P2)) > 0;VERSCHIEBUNG(H2;1-ZEILE();VERGLEICH(MAXWENNS(I2:P2;I2:P2;"<"&MAX(I2:P2)) ;I2:P2;0)) ;"")

Das müsste dann in H2 stehen und könnte runter gezogen werden. Ist natürlich deutlich länger, weil teilweise kein zweiter Wert auftaucht.

Bearbeiten Melden löschen Link mehr
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2018-08-01 18:57:21 +0100

Angesehen: 132 Mal

Aktualisiert: Aug 02 '18