Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

KGRÖSSTE/VERGLEICH/INDIREKT/SVERWEIS

KGRÖSSTE/VERGLEICH/INDIREKT/SVERWEIS
21.02.2022 14:57:57
parags
Hallo Experten,
ich habe eine (lange) Liste mit Vorgängen, wo in jeder Zeile jeweils ein Datensatz mit u.a. Person, Datum, Ort, Produkt und einigen Produkt-Parametern (Größe o.Ä.) sowie einem weiteren, daraus berechneten Parameter (P1*P2) steht.
Aus dieser Liste suche ich mir auf einem Auswertungsblatt die drei größten Werte des berechneten Parameters P1*P2 heraus (die Formeln sind größtenteils hier aus dem Forum abgekupfert und angepasst):

repräsentiert das gewünschte Produkt in der Auswertung
ist das Produkt in jedem einzelnen Vorgang
ist der berechnete Parameter P1*P2
Für diese Datensätze bestimme ich nun zunächst die Zeilennummer, z.B. in E1 auf dem Auswertungsblatt für den größten Wert:
Zeilennummer in E1:
Und dann stelle ich die einzelnen Felder dieser gefundenen Datensätze dar (wer, wann, wo, was usw.):
F1:
G1:
H1:
I1:
J1:
Das funktioniert zwar prinzipiell so, aber dazu habe ich ein paar Fragen:
1. Der VERGLEICH für die Zeilennummer (E1: ) führt zuverlässig immer in die Zeile *VOR* dem eigentlich korrekten Datensatz, d.h. ich muss den ermittelten Wert immer manuell noch um 1 erhöhen, um die richtige Zeilennummer zu erhalten. Das macht mich etwas unruhig, da ich an meiner Formel zweifle. Kann evtl. jemand dieses Phänomen erklären bzw. mir einen Tipp geben, wie ich diese Differenz von 1 vermeiden kann bzw. wie meine Formel richtig aussehen müsste?
2. Die gesamte Arbeitsmappe ist mit 28 einzelnen Arbeitsblättern etwas umfangreicher, daher nehmen alle diese Auswertungen auch etwas Zeit in Anspruch. Nun ist mir beim Suchen ein Beitrag aufgefallen, der ausdrücklich vor der der Verwendung von INDIREKT() warnt, da diese Funktion flüchtig ist und bei jedem wieder neu berechnet wird. Das ist recht lästig, und daher würde ich diese Funktion gerne ersetzen, z.B. durch SVERWEIS() o.Ä. Das würde aber bedeuten, dass ich statt einer recht knappen INDIREKT()-Anweisung jedesmal eine Such-Matrix "" angeben müsste. Da die bisherige Lösung mit INDIREKT() funktioniert, habe ich evtl. Alternativen noch nicht ausprobiert: Kann mir evtl. jemand einen Tipp geben, ob durch Verwendung von SVERWEIS() tatsächlich eine Performance-Verbesserung zu erwarten ist, d.h. die lästige ständige Neuberechnung entfällt, oder ob ich damit nur vom Regen in die Traufe komme? Für alternative Lösungsvorschläge bin ich natürlich jederzeit offen...
3. Außerdem habe ich auch noch keine konkrete Idee, wie ich das Suchkriterium für einen SVERWEIS() genau formulieren soll, denn das ergibt sich ja dynamisch aus der Matrix-Formel ... Hat evtl. jemand einen konkreten Vorschlag, wie ich das genau formulieren könnte / müsste?
4. In einem Test-Fall mit gleich großem berechneten Parameter P1*P2 bestimmt immer nur das erste der beiden gleichen Vorkommen. D.h. wenn z.B. der zweit- und dritt-größte Wert gleich sind, kommt dabei zweimal die Zeilennummer des zweit-größten Wertes heraus. Der Korrektur-Aufwand hält sich zwar in Grenzen, da ich ja nur manuell die in der Spalte nach dem nächsten Vorkommen dieses Wertes suchen muss und dann die anderen Felder dieses Datensatzes manuell übertragen kann, aber schön und elegant ist es nicht. Hat evtl. jemand eine Idee, wie ich für diese beiden gleichen Vorkommen eindeutige Zeilennummern / Datensätze ermitteln kann?
Vielen Dank schonmal im Voraus... parags

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
So viel Text...
21.02.2022 15:02:37
{Boris}
Hi,
...und so wenig Beispielmappe.
Zu 1.:
Du vergleichst mit dem Vergleichsparameter 1 (=WAHR) - das verlangt eine aufsteigend sortierte Liste und checkt nicht auf exakte Übereinstimmung.
Zu 2.:
Vielleicht mit INDEX o.ä. machbar
Zu 3.:
Siehe zu 2.
Zu 4.:
Siehe z.B.: https://www.herber.de/excelformeln/pages/Die_X_groessten_Werte_einer_Spalte_ohne_Wiederholungen_anzeigen.html
Aber noch besser: Lad mal ein abgespeckte Beispielmappe hoch.
VG, Boris
Anzeige
Korrigiere zu 1.: War natürlich Quatsch...
21.02.2022 15:04:46
{Boris}
...hab mich von ;1 bei KGRÖSSTE irritieren lassen.
VG, Boris
AW: KGRÖSSTE/VERGLEICH/INDIREKT/SVERWEIS
21.02.2022 18:38:58
parags
Hi Boris,
ich habe eine Beispiel-Mappe hochgeladen, welche die Symptome 1. + 4. zeigt.
Zu deinem Verweis bzgl. 4.:
In diesem Beispiel möchte ich schon die Form aus Spalte C sehen, also mit BEIDEN gleichen "größten", aber eben nicht zweimal mit Hinweis auf ein- und dieselbe Zeile, sondern eben auf den ersten und dann auf den anderen Datensatz (Zeilennummer) mit gleichem Kriterium - die restlichen Felder dieser beiden Datensätze können ja durchaus unterschiedlich sein und sollen auch individuell dargestellt werden - eben aus spezifischen Zeilennummern, und nicht immer wieder aus der Zeilennummer des ersten Vorkommens...
Für Spalte C gibt dein Verweis aber leider keine Formeln an, so dass ich schlecht überprüfen kann, ob für die beiden ersten "8"en in diesem Beispiel dieselbe oder unterschiedliche Zeilennummern referenziert werden...
Anzeige
Diverse Antworten auf alle 4 Fragen
22.02.2022 08:39:07
{Boris}
Hi,
nochmal zu 1.
Der VERGLEICH liefert die Position eines Elementes innerhalb einer Matrix. Das hat mit der Zeilennummer nix zu tun.
Steht in D4:D6:
x
y
z
Dann liefert =VERGLEICH("x";D4:D6;0) den Wert 1, da "x" das erste Element der Matrix ist. Da es in D4 steht, musst Du für die Zeilennummer natürlich noch 3 addieren.
Deine Matrix beginnt in Zeile 2 (Vorgänge!$G$2:$G$8000) - also musst Du folglich 1 addieren, um die Zeilennummer zu erhalten.
Zu 2. und 3.:
Nimm INDEX statt INDIREKT.
Z.B. Formel in F1. Nimm

=INDEX(Vorgänge!E:E;E1)
statt

=INDIREKT("Vorgänge!E"&E1)
Hat zudem den Vorteil, dass sie kopierbar ist - sich also auf Wunsch auch relativ verhält.
Zu 4.:
M1:

=AGGREGAT(15;6;ZEILE($2:$8000)/(Vorgänge!$G$2:$G$8000=$A1)/(Vorgänge!$I$2:$I$8000=L1); SUMMENPRODUKT((Vorgänge!$G$2:$G$8000=$A1)*(Vorgänge!$I$2:$I$8000=C1))) 
und Formel nach V1 kopieren.
Die Spalten N und W (in denen Du bisher immer um 1 hochzählst) kannst Du entfernen.
VG, Boris
Anzeige
Und hier noch die Datei...
22.02.2022 09:01:37
{Boris}
Hi,
...hab jetzt alles Überflüssige entfernt und alle Formeln - inkl. Fehlerbehandlung - eingefügt (teils auch etwas abgeändert).
Schau mal, ob Du damit zurecht kommst.
https://www.herber.de/bbs/user/151286.xlsx
VG, Boris
AW: Und hier noch die Datei...
22.02.2022 11:19:50
parags
Hi Boris,
Treffer, versenkt - vielen herzlichen Dank!!! Die Anregung mit dem AGGREGAT werde ich wohl zwecks Optimierung anderweitig auch noch nutzen...
VLG... parags :)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige