Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1824to1828
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

Dynamische Liste 2 Kriterien

Dynamische Liste 2 Kriterien
22.04.2021 15:26:57
Chris
Hallo Zusammen,
ich habe eine Frage zu der Datei im Anhang:
https://www.herber.de/bbs/user/145726.xlsx
Ziel ist es eine Liste aus einer Datenquelle zu erstellen für die beide Kriterien (Zelle G7 und G8) wahr sind, wenn diese Kriterien erfüllt sind soll jeweils der Name und der Prozentsatz angezeigt werden (in gelb makiert). Geht das mit der Aggregat funktion oder braucht man da Index?
Danke für eure Hilfe und viele Grüße
Chris

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dynamische Liste 2 Kriterien
22.04.2021 15:30:11
SF
Hola,
dafür brauchst du beides, Index(...Aggregat(....
Gruß,
steve1da
AW: mit INDEX() und AGGREGAT() ...
22.04.2021 15:34:22
neopa
Hallo Chris,
... in F12: =WENNFEHLER(INDEX(B:B;AGGREGAT(15;6;ZEILE(A$8:A$99)/($A$8:$A$99=$G$7)/($C$8:$C$99&gt$G$8);ZEILE(A1)));"")

und Formel nach unten und rechts kopieren.
Gruß Werner
.. , - ...
mit INDEX/KKLEINSTE + INDEX/VERGLEICH
22.04.2021 16:24:43
WF
Hi,
in F12 die Arrayformel:
{=WENNFEHLER(INDEX(B:B;KKLEINSTE(WENN((A$1:A$99=G$7)*(C$1:C$99>=G$8);ZEILE(X$1:X$99));ZEILE(X1))); "") }
in G12 die Standardformel:
=WENNFEHLER(INDEX(C:C;VERGLEICH(F12;B$1:B$99;0));"")
beide runterkopieren
WF
AW: die "Standardformel " reicht nur bedingt, ...
22.04.2021 17:09:04
neopa
Hallo WF,
... denn es ist wohl nicht auszuschließen, dass in der Originalliste eine Person zu einem anderem Datum mehr als nur einmal in der Datenliste mit einem anderen Datum und Parameter vor dem mit zutreffenden Parameter stehen kann. Wenn die Namen aber eineindeutig sein sollten, dann würde auch einfach SVERWEIS() reichen. In Deiner Formel F12 hat sich ein Gleichheitszeichen zu viel eingeschmuggelt, denn gemäß Vorgabe in F8 sind ja nur Daten mit Werten größer als G8 gesucht.
Gruß Werner
.. , - ...
Anzeige
wenn schon Haarspalterei
22.04.2021 17:43:48
WF
Bei Dir müssen die gewünschten Daten in 2 nebeneinanderliegenden Spalten liegen.
Das ist nicht der Normalfall - Formel also nicht kopieren sondern anpassen.
WF
Einschätzung für beide (Varianten)
23.04.2021 03:35:48
Luc:-?
Mir stellt sich die Frage, warum Streit um Kaisers Bart, Werner & Walter?
Mich stört eher, dass beide Lösungen wieder mal auf einer EinzelZellenLösung verharren, wobei bei Walters hinzukommt, dass dafür auch eine singulare MatrixFml verwendet wird. Wenn schon MatrixFml, dann doch bitte für gleich alle Werte, zumal es doch schon Xl-Versionen gibt, die einfachere plurale MatrixFmln automatisch auf den erforderlichen Bereich ausdehnen. Wer solche SingulärMatrixFml-Lösungen dann für größere DatenMengen übernimmt, muss sich nicht wundern, wenn die Berechnungszeiten ggf immer länger wdn. Ansonsten schreibt man Fmln gewöhnlich für den augenblicklichen Bedarf, sofern nicht größerer Bedarf schon ersichtlich ist. Eine Anpassung an die realen und spätere Verhältnisse ist und muss Sache des Fragestellers bleiben, der deshalb die angebotene Fml auch verstehen sollte. Ihn ggf dazu zu befähigen ist wichtiger als eine Fml quasi auf Vorrat zu dimensionieren¹.
Werners Lösung hat ein Fktsaufruf-zu-Fml-Länge-Verhältnis von 5:103. Walters Fmln im Durchschnitt (da 2 unterschiedliche Fmln für 2 Zellen) eines von 4,5:76,5. Hier ist aber nur der Durchschnitt der Fktsaufrufe relevant, denn der einzig sinnvolle Grund für die Ermittlung der Fml-Länge (ZeichenAnzahl) ist der mit ihrer Notation verbundene SchreibAufwand (weshalb auch die äußeren {} nicht mitgezählt wurden, obwohl man das wohl könnte, weil dafür 2 Tasten mehr gedrückt und gehalten wdn müssen). Folglich wäre hier eher die Summe der Längen aus dem GesamtVerhältnis 9:153 anzusetzen.
Mit INDEX und AGGREGAT ist aber auch eine kürzere plurale MatrixFml möglich (mit o.g.Verhältnis von 4:81):
{=INDEX(B8:C13;AGGREGAT(14;6;ZEILE(1:6)/(A8:A13=G7)/(C8:C13>G8);ZEILE(1:6));{1.2})}
Diese entspricht quasi Werners Lösung, berechnet aber alle Werte auf 1×. Dass Xl Fmln in willkürlicher Reihenfolge² berechnet, spielt hierbei keine Rolle, denn das Ganze gilt als nur eine Fml im GgSatz zu ihrer Vereinzelung in lauter EinzellFmln. Das bemerkt man sehr schön, wenn darin zB ein AdressBezug geändert wdn muss.
Eine mögliche UDF-haltige Fml hätte ein ähnliches Verhältnis (4:86):
{=TxEval(WECHSELN(VJoin(WENN((A8:A13=G7)*(C8:C13>G8);B8:C13;"");"";2);";"""",""""";""))}
Eine andere (nur mit UDFs) wäre zwar länger, hätte aber weniger Fktsaufrufe (3:99):
{=DataSet(NoErrRange(B8:B13;;(A8:A13=G7)*(C8:C13>G8));NoErrRange(C8:C13;;(A8:A13=G7)*(C8:C13> G8));2) }
Anmerkung: Die UDF-Standorte im Archiv wurden schon so oft von mir verlinkt, dass sie b.Bed leicht zu finden sein müssten (idR neueste im Archiv vorhandene Version verwenden!).
—————————————————
¹ Anders sieht es bei UDFs aus, die gern auch so konstruiert wdn dürfen, dass sie ähnlich wie viele Xl-Fktt möglichst alle Situationen, die im Rahmen ihrer ZweckBestimmung auftreten können, meistern sollten.
² Selbst die von mir entdeckten quasi-pluralen MatrixFmln, deren angezeigte Werte tatsächlich einzeln berechnet wdn, stört die auch bei ihnen erfolgende willkürliche Berechnungsreihenfolge nicht.

Morhn, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Anzeige
AW: hierzu ...
23.04.2021 11:25:10
neopa
Hallo Luc,
... da hast Du etwas anders interpretiert, als ich mit meinem Beitrag beabsichtigt hatte. Zumindest mir ging es hier nicht um den Vorteil einer AGGREGAT() - gegenüber einer {KKLEINSTE ()}-Formel und erst Recht nicht um die Formellänge. Sondern ich wollte lediglich auf eine vorhandene und eine wahrscheinliche Ungenauigkeit in den beiden von WF nachgereichten Formeln aufmerksam machen.
Wenn Chris als vorhandene Excelversion Office365 angegeben hätte, hätte ich ihn wohl allgemein auf den Einsatz de FILTER()-Funktion verwiesen, da diese wohl einen substantiellen Vorteil bietet. Da ich aber lediglich XL2010 und XL2016 im Einsatz habe, werde ich auch nur Formeln aufzeigen, die in meinen XL-Versionen, so auch Chris als Fragesteller prüfen kann.
Meine Meinung zu pluralen Formeln kennst Du ja schon. Die Vorteile deren wiegen zumindest für mich in vielen Fällen nicht deren Nachteile (für mich) auf.
Die stärkere Fokussierung von Excel seit XL2007 auf formatierte Tabellen und deren wohl dem angelehnten Fortsetzung in den neuen Standardfunktionsmöglichkeiten in O365 (die ich bisher jedoch nur aus entsprechenden Forensbeiträgen erlesen habe) und auch PQ sagt mir einfach mehr zu.
Gruß Werner
.. , - ...
Anzeige
AW: Hierzu demnächst mehr, ...
27.04.2021 16:07:29
Luc:-?
…Werner! ;-)
Hatte zuletzt intensiv an einer besonderen Neuentwicklung gearbeitet, bei der ich zuletzt auch dieses Bsp (modifiziert) verwendet habe. Dabei fiel dann nebenbei auch eine einfache Filter-UDF* an (mit NoErrRange existiert ja bereits eine universellere, die wg ihres Union-Charakters allerdings anderen Fktt als Ausdruck-Argument übergeben wdn muss). Das hat mich von einer zeitnahen AW abgehalten.
Um den eigentlichen Gegenstand eures „Streits“ ging's mir weniger, sondern eher um die beschriebene Problematik.
* Vorgestellt nachher unter dem OT-Beitrag, später dann in separatem Beitrag auch eine Bsp-Datei zu meiner Universal-Idee (VBA in Fmln).
Gruß, Luc :-?
Anzeige
Off topic, da aktuelles Excel
23.04.2021 05:46:07
RPP63
Moin!
In Excel 365 oder Excel Online ist es eine einzige Formelzelle in F12:
=FILTER(B8:C13;(A8:A13=G7)*(C8:C13>0,5))
Gruß Ralf
Nicht Off Topic, da in jedem vbExcel möglich, ...
27.04.2021 23:51:44
Luc:-?
…per UDF, Ralf;
eine mögliche ist oben schon erwähnt …
• NoErrRange (Vs1.3) ⇒ https://www.herber.de/forum/archiv/1508to1512/1508209_Auflistung_aus_01_Matrix.html#1508215
Die liefert ggf einen diskontinuierlichen Bereich, also ZellBezüge, weshalb ihr Ergebnis nicht direkt, ohne INDEX, abgebildet, aber durchaus weiterverwendet wdn kann, was ja sowohl INDEX als auch das obige Fml-Bsp beweist.
• Eine einfachere, die ich im Rahmen einer anderen Entwicklung testweise entwickelt habe, folgt hier. Die (plurale Matrix-)Fml würde damit so lauten:
{=VFilter(B8:C13;(A8:A13=G7)*(C8:C13>G2))}
Dazu folgendes UDF-Pgm:

Rem Bereich zeilenweise nach Kriterien filtern
'   Ergebnisrückgabe: nur Werte d.FilterQuelle
'   Vs1.1 -LSr:CyWorXxl -cd:20210423 -1pub:20210427h -lupd:20210425t
Function VFilter(ByVal Ref As Range, ByVal Crit)
Dim isArCrit As Boolean, i As LongPtr, j As LongPtr, erg, x
On Error GoTo fx
isArCrit = IsArray(Crit): ReDim erg(0)
If isArCrit Then
If TypeOf Crit Is Range Then Crit = Crit.Value
If IsError(UBound(Crit, 2)) Then
ReDim Preserve Crit(UBound(Crit) - LBound(Crit))
ElseIf UBound(Crit, 2) = 1 Then
Crit = WorksheetFunction.Transpose(Crit)
ReDim Preserve Crit(UBound(Crit) - LBound(Crit))
Else: Err.Raise xlErrRef
End If
End If
For Each x In Ref.Rows
If isArCrit Then
ReDim Preserve erg(j)
If CBool(Crit(i)) Then erg(j) = x: j = j + 1
ElseIf CBool(Crit) Then
ReDim Preserve erg(j): erg(j) = x: j = j + 1
End If
i = i + 1
Next x
VFilter = erg
fx: If CBool(Err.Number) Then VFilter = CVErr(Err.Number)
End Function
Die UDF kann man auch in VBA-Pgmm einbinden oder bei Standort in einem KlassenModul im Ausführungstext von Get- und Set-UDFs aufführen. Dazu demnächst in einem separaten Beitrag mehr.
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Anzeige
KorrekturNachtrag
28.04.2021 23:41:32
Luc:-?
Der Abschnitt …

If isArCrit Then
ReDim Preserve erg(j)
If CBool(Crit(i)) Then erg(j) = x: j = j + 1
…muss richtig so lauten:

If isArCrit Then
If CBool(Crit(i)) Then _
ReDim Preserve erg(j): erg(j) = x: j = j + 1
Luc :-?
AW: Dynamische Liste 2 Kriterien
23.04.2021 09:07:09
Daniel
Hi
wenn die Tabelle größer ist (mehr Zeilen, mehr Spalten) würde ich hier mit einer Hilfsspalte arbeiten:
1. in E12 und darunterliegende zunächst die Zeilennummern der zutreffenden Ergebnisse ausgeben:

=AGGREGAT(15;6;ZEILE($A$8:$A$13)/($A$8:$A$13=$G$7)/($C$8:$C$13>$G$8);ZEILE(A1))
2. in F12 und darunter bzw daneben liegende dann die Ergebnisausgabe mit:

=Wenn(IstZahl($E12);Index(B:B;$E12);"")
wenn in der Ausgangstabelle die auszugebenden Spalten nebeneinander liegen, kannst du sie einfach nach rechts ziehen, falls nicht musst du die Spalte im Index anpassen).
die Hilfspalte hat hier den Vorteil, dass die Zeilennummer der Ergebnisse pro Zeile nur einmal berechnet werden muss.
ohne Hilfsspalte müsste sie pro Ausgabespalte wiederholt berechnet werden und da das finden der betroffenen Zeile das Zeitaufwendige ist, spart hier die Hilfsspalte Rechenzeit.
Gruß Daniel
Anzeige
AW: Dynamische Liste 2 Kriterien
23.04.2021 09:56:26
Chris
Hallo an Alle,
Vielen Dank für die zahlreichen Beiträge und Möglichkeiten das Problem zu lösen.
Werners Ansatz mit Index+Aggregat erfüllt für meine Anforderungen den Job am besten.
Viele Grüße
Chris
AW: bitteschön owT
23.04.2021 11:25:31
neopa
Gruß Werner
.. , - ...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige