Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1852to1856
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

Formelmonster verbessern

Formelmonster verbessern
08.11.2021 08:34:54
erichm
Hallo,
für eine Auswertung eines Rabattsystems für Kunden konnte ich eine Formel entwickeln, die aber sehr umfangreich ist. Vielleicht finde ich hier eine Hilfe für eine Optimierung. Hier die Musterdatei und die Beschreibung nachstehend:
https://www.herber.de/bbs/user/148996.xlsx
Tabelle Kunden: Es werden für tägliche Bestellungen pro Kunde 0 bis 4 Punkte vergeben (Spalten AV bis JF). Diese werden aufsummiert (Spalte U). Je nach Punktezahl erfolgt eine Einteilung in eine Kategorie (Spalte X). Soweit sind das einfache Formeln. In Spalte QK muss jetzt ermittelt werden, welches Rabattsystem für den Kunden je nach Kategorie (= Punktezahl) greift. Dabei werden unterschiedlich nach Kategorie, die letzten 2 bis 6 Tage der Bestellungen herangezogen.
Ich habe das so gelöst (und funktioniert auch), dass ich ab den Spalten JW die Tage rückwärts aufliste und dann in der Spalte QK das Rabattmerkmal setzen kann. Jedoch ist das eine „unübersichtliche Formel“ geworden:
=WENN($X2="KatA";XVERWEIS($JW2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)&XVERWEIS($JX2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40);WENN($X2="KatB";XVERWEIS($JW2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)&XVERWEIS($JX2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)&XVERWEIS($JY2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40);WENN($X2="KatC";XVERWEIS($JW2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)&XVERWEIS($JX2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)&XVERWEIS($JY2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40);WENN($X2="KatD";XVERWEIS($JW2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)&XVERWEIS($JX2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)&XVERWEIS($JY2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)&XVERWEIS($JZ2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40);WENN($X2="KatE";XVERWEIS($JW2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40) &XVERWEIS($JX2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)&XVERWEIS($JY2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)&XVERWEIS($JZ2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)&XVERWEIS($KA2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40);WENN($X2="KatF";XVERWEIS($JW2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)&XVERWEIS($JX2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)&XVERWEIS($JY2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)&XVERWEIS($JZ2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)&XVERWEIS($KA2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)&XVERWEIS($KB2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40);""))))))
Vielleicht kann man das verbessern? Hier jedoch kein VBA.
Vielen Dank!
mfg

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formelmonster verbessern
08.11.2021 09:35:21
Yal
Hallo Erich,
ein Bischen Gehirn-Aufwärmen am Montag morgen :-)
Wenn Du die Formel im Notepad leicht umkrämpelt, ist es leichter zu erfassen:

=WENN($X2="KatA";
XVERWEIS($JW2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($JX2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40);
WENN($X2="KatB";
XVERWEIS($JW2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)
&XVERWEIS($JX2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($JY2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40);
WENN($X2="KatC";
XVERWEIS($JW2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)
&XVERWEIS($JX2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($JY2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40);
WENN($X2="KatD";
XVERWEIS($JW2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)
&XVERWEIS($JX2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($JY2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($JZ2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40);
WENN($X2="KatE";
XVERWEIS($JW2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($JX2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($JY2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)
&XVERWEIS($JZ2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($KA2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40);
WENN($X2="KatF";
XVERWEIS($JW2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)
&XVERWEIS($JX2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($JY2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($JZ2;hochzählen!$D$36:$D$40; hochzählen!$E$36:$E$40)
&XVERWEIS($KA2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
&XVERWEIS($KB2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
;""))))))
Dann siehst Du, dass JW und JX überall dabei sind, und dass bei jedem neuen Fall etwas dazu kommt. Ausser B und C, die gleich sind (?)
Da deine Prüfwert eine alphabetische Reihenfolge haben, kannst Du mit "grösser als" arbeiten (Notfalls isoliere Rechts( $X2;1) und vergleiche mit A,B,C,...)
Ich komme auf folgende Vereinfachung:

= XVERWEIS($JW2;hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
& XVERWEIS($JX2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
& WENN ($X2>="KatB";XVERWEIS($JY2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
& WENN ($X2>="KatD";XVERWEIS($JZ2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
& WENN ($X2>="KatE";XVERWEIS($KA2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
& WENN ($X2>="KatF";XVERWEIS($KB2; hochzählen!$D$36:$D$40;hochzählen!$E$36:$E$40)
VG
Yal
Anzeige
AW: mit VERWEIS() auch ohne XL365 möglich ...
08.11.2021 13:29:24
neopa
Hallo Erich,
... mich haben aber Deine Problemstellungen schon immer interessiert (wobei ich Dich lange hier nicht gelesen habe), Da ich aber kein Office365 habe, musste ich mir etwas anderes einfallen lassen. Deine Vorgabe (wobei mir unklar ist, warum bei Dir KatB wie KatC gleich behandelt wird) kann ich mit folgender Formel ganz ohne WENN() kürzen:
In QK2 folgende Formel:
=LINKS(VERWEIS(Kunden!JW2;_HZW)&VERWEIS(JX2;_HZW)&VERWEIS(JY2;_HZW)&VERWEIS(JZ2;_HZW)&VERWEIS(KA2;_HZW)&VERWEIS(KB2;_HZW);SUCHEN(WECHSELN(RECHTS(X2;1);"B";"C");{" ACDE"})*(B2&gt0))
und diese nach unten kopieren
Darin ist _HZW eine benannte Formel, die ich wie folgt definiert habe: =hochzählen!$D$36:$E$40
In Deiner Version müsstest Du das auch direkt mit LET() realisieren können.
Mit der in Deiner Funktion TEXTVERKETTEN() kann man evtl. meine Formel möglicherweise noch weiter kürzen. Aber das überblicke ich ohne es selbst testen zu können nicht.
Gruß Werner
.. , - ...
Anzeige
AW: zu Deinen Hilfsspalten JW:KM ...
08.11.2021 13:55:46
neopa
Hallo,
... könntest Du wie auch Deine Hilfszeile in hochzählen!3:3 einsparen. Der jeweilige Suchwert für meine VERWEIS()-Formel könntest Du z.B. wie folgt ermitteln:
Für den maßgeblichen letzten Wert in Zeile 2 so: =VERWEIS(9;1/(AV2:JV299);AV2:JV2) für den zweitletzten so: =VERWEIS(9;1/(AW2:JV299);AV2:JV2) ... für den 4.letzten so: =VERWEIS(9;1/(AY2:JV299);AV2:JV2) ...
Gruß Werner
.. , - ...
AW: da fehlte noch ein "F" im "Suchtext" ...
08.11.2021 14:15:59
neopa
Hallo Erich,
... in meiner Formel wollte ich zunächst anstelle mit SUCHEN() mit VERGLEICH() arbeiten, was ich aber wegen der nichtlinearen Zunahme der Ergebniszeichen verwerfen musste, was meine {}-Klammerung überflüssig macht. Und für U-Werte kleiner 70 ergibt sich aber noch eine Kategorie F, für die auch auszuwerten ist.
Deshalb ersetze den Formelteil ...;{" ACDE"})*... durch ... ;" ACDEF")*...
In dem Zusammenhang ist mir aufgefallen, dass Deine Formel in Spalte X auch gekürzt werden kann und zwar in X2 zu:
=WENN(U2="";"";SVERWEIS(U2;TICK!CI:CK;3)) und nach unten kopieren.
Gruß Werner
.. , - ...
Anzeige
AW: da fehlte noch ein "F" im "Suchtext" ...
09.11.2021 10:51:18
erichm
Hallo Werner,
vielen Dank für die Lösung sowie die Tipps! Die Formel für QK2 habe ich grundsätzlich verstanden und ich konnte bereits ein zusätzliches Rabattmodell mit einem weiteren Tag anlegen.
Was ich noch nicht verstanden habe: Warum stehen denn B C (beide betreffen jeweils 3 Tage) gesondert in der Formel vor den geschweiften Klammern?
Ansonsten hat sich mittlerweile "unsere Projektgruppe" (von der hatte ich mal berichtet) leider komplett aufgelöst. Da ich aber unverändert davon überzeugt bin, dass ich den EXCEL-Fundus aus dem Projekt "irgendwann / irgendwie" sinnvoll verwenden kann, war ich eine Weile damit beschäftigt, eine Ordnung bzw. Struktur reinzubringen - war nicht einfach.
Aus dem Projekt heraus gab es aber einige nette Kontakte, mit denen ich jetzt in loser Form kommuniziere / diskutiere. Da werden sich in absehbarer Zeit wieder einige knifflige EXCEL-Anfragen ergeben. Macht halt einfach Spass!!
Vielen Dank für eine kurze Erläuterung.
mfg
Anzeige
AW: bitteschön, und ...
09.11.2021 12:13:33
neopa
Hallo Erich,
... den Formelteil mit der geschweiften Klammer hab ich ja ersetzt durch den Textwert " ACDEF", der ja offensichtlich 6 Zeichen beinhaltet deren Position darin vom 1 (das Leerzeichen) bis zum 6. (dem "F") geht und diese Position wird mit SUCHEN() gefunden und der Auswertungsformel übergeben. Da Du aber für KatB und KatC ein gleiches Ergebnis (3) anstrebst, hab ich dies eben mit dem ausWECHSELN() des Buchstabens gelöst.
Gruß Werner
.. , - ...
OK, verstanden Danke! mfg - owT
12.11.2021 19:30:21
erichm
.....
AW: gerne owT
12.11.2021 19:57:13
neopa
Gruß Werner
.. , - ...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige