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

Zahl der Bedingungen für KKleinste() begrenzt?

Zahl der Bedingungen für KKleinste() begrenzt?
18.04.2019 12:34:25
Georg
Hallo zusammen,
ich scheitere gerade daran, eine KKLEINSTE()Funktion mit 4 Bedingungen per VBA zu schreiben.
Als Formel sieht es so aus und funzt:
=KKLEINSTE(
WENN(($D$24:$D$967=$D$5)+("*"=$D$5);
WENN(($E$24:$E$967=$E$5)+("*"=$E$5);
WENN(($F$24:$F$967=$F$5)+("*"=$F$5);
WENN(($G$24:$G$967=$G$5)+("*"=$G$5); $C$24:$C$967))));C24)
Zeichne ich die Eingabe per VBA Editor auf, so sieht es so aus:
Range("H24").Select
Selection.FormulaArray = _
"=SMALL(
IF((R24C4:R967C4=R5C4)+(""*""=R5C4)," & Chr(10) & "
IF((R24C5:R967C5=R5C5)+(""*""=R5C5)," & Chr(10) & "
IF((R24C6:R967C6=R5C6)+(""*""=R5C6)," & Chr(10) & "
IF((R24C7:R967C7=R5C7)+(""*""=R5C7),
R24C3:R967C3)))),RC[-5])"

Lass ich den Code dann unverändert laufen, so kommt die Fehlermeldung: "Laufzeitfehler 1004: die FormulaArray-Eigenschaft des Range-Objektes kann nicht festgelegt werden".
Mit drei Bedingungen ist es kein Problem. Da läuft es als direkte Formeleingabe oder in der VBA Version. Aber mit vieren eben nicht! Gibt es hier Beschränkungen oder bin ich beschränkt?
Danke für Eure Hilfe!!
Gruß Georg

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahl der Bedingungen für KKleinste() begrenzt?
18.04.2019 12:57:49
Daniel
Hi
die Länge der Formeln, welche du per VBA nach Excel übertragen kannst, ist stark limitiert und deutlich kleiner, als die zulässige Formellänge in Excel.
in Excel dürfen Formeln über 4000 Zeichen lang sein.
schreibst du die Formel jedoch per VBA, dann ist das Limit bei c.a. 1000 Zeichen für normale Formeln und 256 Zeichen für Arrayformeln.
der Workaround wäre hier, dass du die Formel von KKleinste auf Aggregat(15;6;...) umbaust.
Aggregat(15) entspricht KKleinste, hat aber den Vorteil, dass es Matrixberechnungen automatisch erkennt und somit als "normale" Formel in die Zelle geschrieben werden kann und somit dann das 1000-Zeichenlimit gilt
die Aggregat-Funktion baut man so auf, dass man im 3. Paramter die Werte bereit stellt.
hierzu erstellt man eine Division, der Dividend sind die zu verwenden werte, der Divisor muss ein Ausdruck sein, der 1 ergibt wenn der jeweilige Wert berücksichtigt werden soll und 0, wenn er nicht verwendet werden soll.
die Division durch 0 erzeugt einen Fehler, und durch den zweiten Parameter = 6 gibt man an, dass Fehler ignoriert werden.
Gruß Daniel
Anzeige
AW: Zahl der Bedingungen für KKleinste() begrenzt?
18.04.2019 13:06:34
Georg
Klasse, vielen Dank Daniel!!
Haa - das mit den Beschränkungen ist mir neu, hab ich aber vermutet.
An eine Aggregatsformel hab ich auch schon mal gedacht, aber es nicht geschafft, die Bedingungen dort sauber einzubauen. Und wenn ich ehrlich bin, hab ich deine Erklärung mir der Division auch nicht wirklich verstanden (schäm), noch dazu, dass ich als Parameter nicht nur bestimmte Werte, sondern auch die Option "alle" (das ist das mit dem * in der Formel) bereitstellen muss.... :-(
Vielleicht ist es einfacher, ich schreibe mir die Formel an einen versteckten Ort im Blatt und kopiere es von dort jeweils rein, oder?
Aber dennoch ganz herzliches Dankeschön!!
Gruß und schöne Ostern!
Georg
Anzeige
AW: Zahl der Bedingungen für KKleinste() begrenzt?
18.04.2019 13:27:38
Daniel
kannst du auch machen.
die Bedingung mit dem Stern ist ODER
und die Oder-Verknüpfung hast du ja in deiner Formel korrekt mit + dargestellt, das Prinzip kannst du hier auch übernehmen.
dh wenn du die Werte aus Spalte A verwendnen willst, bei denen in Spalte B der gleiche wert steht wie in C1 bzw alle, wenn in C1 der "*" steht dann geht das so:
=Aggregat(15;6;A1:A10/((B1:B10=C1)+(C1="*"));1)

wie gesagt, im Divisor muss ein Term stehten, der 1 ergibt wenn der Wert aus Spalte A übernommen werden soll und 0, falls nicht.
WAHR wird in Berechnungen wie 1 und FALSCH wie 0 gewertet.
theoretsich könnte hier im Divisor auch der Wert 2 entstehen, wenn in den Zellen der Spalte B ebenfalls der Stern vorkommt. Ist das möglich, würde die 2 dir das Ergebnsi verfälschen und du müsstest das dann so absichern:
=Aggregat(15;6;A1:A10/(((B1:B10=C1)+(C1="*"))>0);1)
durch das ">0" werden alle Werte größer 0 zu WAHR und damit zu 1 für die Berechnung.
Gruß Daniel
Anzeige
Spitze!!
18.04.2019 13:50:09
Georg
Wow - das ist cool. Danke Daniel!
Das werde ich mir genau anschauen und versuchen auf meine Daten anzuwenden. Echt klasse!
Noch ne Frage: ist so eine Aggregatsfunktion mit 4 Bedingungen eigentlich schneller bzw. weniger rechenintensiv als eine vergleichbare Matrix, oder ist das gleich?
AW: Spitze!!
18.04.2019 13:52:24
Daniel
Hi
müsstest du ausprobieren.
der rechenaufwand ist aber in etwa der gleiche.
Gruß Daniel
AW: Spitze!!
18.04.2019 13:53:48
Georg
ok, danke nochmal!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige