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

Tensor-Produkt-Anwend'Bsp (3/4-Tensor - 5.Forts.)

Tensor-Produkt-Anwend'Bsp (3/4-Tensor - 5.Forts.)
18.05.2018 04:26:26
Luc:-?
Morrn, Fml-Cracks;
für diejenigen, die das Thema interessiert und bisher (in meiner Beitragsreihe) eine (normal-)praktische Anwen­dung vermisst haben, reiche ich hiermit ein etwas komplexeres TabellenBsp nach. Die konstruierte Aufgabe desselben besteht darin, vor­kal­ku­lierte Preise bestimmter Produkt­gruppen mit einer Gruppe vor­be­stimm­ter Fak­toren so zu multi­pli­zieren, dass sich ein optimaler Preis ergibt, der im Gruppen­Durch­schnitt unter dem Gruppen­Durch­schnitt vglbarer Markt­Preise liegt. Um zu erreichen, dass der größere Teil dieser Preise unter dem Vgls­Preis liegt, wurde noch ein weiteres Krite­rium ein­ge­führt, das den vor­be­stimm­ten opti­malen Faktor so ver­ändert, dass dieses Ziel möglichst vor­teil­haft erreicht wird.
Es gibt sicher andere und bessere Ver­fahren, um so etwas zu erreichen, aber mir ging's hier­bei in 1.Linie um die Demon­stration einer speziellen Fktions­weise der Xl-Fkt INDEX in einer pluralen Matrix­Fml, die darauf hinaus­läuft, dass Xl, in welcher Form auch immer, einen 4dimen­siona­len Tensor bildet, der aller­dings so nicht voll­ständig auf einen Zell­Bereich abge­bildet wdn kann (was hier auch nicht erfor­der­lich ist). Dazu wird die 1.Matrix per INDEX in Einzel­werte [Skalare = Tenso­ren(0,0)] zer­legt, denen in der Multi­pli­kation jeweils eine Kopie der 2.Matrix ggüber­gestellt wird. In dieser Form wird die plurale Matrix­Fml nur 1× durch­laufen und zeigt (und gibt weiter!) nur die 1.Werte jeder der ein­zelnen Ergebnis­Matrizen. Durch ein weiteres INDEX wird dieses Ergeb­nis erneut ver­viel­fältigt (der Ergeb­nis-Tensor quasi „ent­faltet“), so dass alle seine Werte an eine andere Fkt als Argu­ment weiter­gege­ben wdn können. Dies geschieht in einem Rechen­Durch­lauf pro Zelle, wobei von Xl auto­ma­tisch der jeweils pas­sende Teil des Ergeb­nis-Ten­sors (eine Sekun­där­Matrix, vgl vor­herige Bei­träge) aus­ge­wählt wird.
Derartige Wiederholungen realisiert INDEX über sein 4.Argument, wobei egal ist, ob das 1.Argu­ment ein Bereichs­Bezug oder ein Datenfeld ist. Es müssen nur soviel 1en in diesem Argu­ment ver­wendet (bzw erzeugt) wdn, wie Wieder­holun­gen erfor­der­lich sind, also für jeden Ergeb­nis­wert eine. Die Posi­tio­nierung der Ergeb­nis­werte folgt dabei der 1.Matrix.
In diesem Zusammenhang muss darauf hingewiesen wdn, dass diese Berechnungen nicht auf eine andere Kal­kula­tions­Software übertragen wdn können. Deren FmlText-Inter­preter arbeiten idR anders als der von Xl und auch einige Fktt (auch gleich­namige!) wie bspw INDEX und MTRANS arbei­ten anders und können des­halb hier andere Ergeb­nisse liefern. Das trifft ins­beson­dere auf alles zu, was irgend­wie mit Matrix­Fmln (und Matrix­Kon­stan­ten erst recht!) zu tun hat.
Gleichzeitig wird mit dem nachfolgenden Bsp gezeigt, wie man Leerzellen aus der Berechnung aus­schalten, und dass man erfor­der­liche Hilfs­zellen (INDEX in dieser Form benötigt sie unbe­dingt!) uU sinn­voll in die Gesamt­Dar­stel­lung inte­grieren kann, was einem Ver­stecken der­selben in Aus­blen­dungen allemal vor­zu­ziehen wäre:
 ABCDEFGHIJ
1
Faktor-primär angenommene Multiplikationsfaktoren ZellFormeln: *GruppeFaktor1Faktor2Faktor3Faktor4 C9:F11,C12:F14: {=RUNDEN(MITTELWERT(INDEX(WENNFEHLER(INDEX(B3:E5;ZEILE(1:3);FGruppe185%90%95%100%                                 SPALTE(A:D))*INDEX((1/C28:E32)^-1;;;1^B3:E5);"");;;1^B3:E5));2)}FGruppe2102%105%107%110% G9:J11,G12:J14: {=SUMME(INDEX(--(INDEX(B3:E5;ZEILE(1:3);SPALTE(A:D))*INDEXFGruppe3112%114%117%120%                                 (C28:E32;;;1^B3:E5)>C18);;;1^B3:E5))}     * Formel des jeweils 2. genannten Zielbereichs in Analogie zur gezeigten des 1. gebildet.Produkt-Faktor-Mittelwert faktorierter ProduktpreiseAnzahl faktorierter Produktpreise > VglswertGruppeGruppeFaktor1Faktor2Faktor3Faktor4Faktor1Faktor2Faktor3Faktor4X1FGruppe190,4695,79101,11106,430000X1FGruppe2108,56111,75113,88117,070124X1FGruppe3119,20121,33124,52127,71671011X2FGruppe1197,34208,95220,56232,170014X2FGruppe2236,81243,78248,42255,384555X2FGruppe3260,03264,67271,64278,605566     C19,D19: {=MAX(C9:F11*(C9:F11<C18))}Vergleichswert u. Faktorermittlung C20,D20:=SUMMENPRODUKT(--(C9:F11=C19);B3:E5)ProduktgruppeX1X2 C21,D21: {=SUMMENPRODUKT(--(G9:J11=MAX(WENNFEHLER(1/G9:J11;-1))^-1);C9:F11)} Ø Markt-Bruttopreise122,54232,66 C22,D22: {=SUMMENPRODUKT(--(G9:J11=MAX(WENNFEHLER(1/G9:J11;-1))^-1);B3:E5)} maxkritischer Ø-Preis121,33232,17 C23,D23:=(C20-C22)*RECHTS(B23;3)+C22 maxkritischer Faktor114%100% C24,D24:=MITTELWERT(F28:H32) minkritischer Ø-Preis111,75220,56 I24,J24:=ZÄHLENWENN(F28:H32;"<"&C18)&" : "&ZÄHLENWENN(F28:H32;"≥"&C18) minkritischer Faktor105%95% F28:H32,F33:H35: {=WENNFEHLER(RUNDEN((1/(C28:E32*C23))^-1;2);"")} opt FaktorΔ 65%110,9%98,3%  Anzahlrelation kleinerer zu größeren X1X2 Ø optim B-ProdPreise117,98228,11  optimierten Brutto-Produktpreisen9 : 53 : 3          Produkt-Produktkalkulierte Produktpreiseoptimierte Brutto-Produktpreise  GruppeBezeichnProdVar1ProdVar2ProdVar3ProdVar1ProdVar2ProdVar3  X1Alpha1069791117,50107,52100,87  X1Beta117113112129,69125,26124,15  X1Gamma109116 120,83128,59   X1Delta105110104116,39121,94115,28  X1Epsilon92107111101,98118,61123,04  X2Vau227238245223,03233,84240,71  X2Zeta235244 230,89239,73   X2Eta204  200,43    
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Die Tabelle kann ohne oberen und linken Rand kopiert wdn, sollte dann aber auch an dem­entsprd Stelle in ein leeres Blatt eingefügt wdn!
Quasi als Nachtrag zur 4.Fortsetzung dieses Themas stelle ich nachfolgend die neue Version1.1 der UDF TensorProd zV. Die vor­he­rige hat nur Ganz­zahlen berück­sich­tigt. Aller­dings wird sie für das TabBsp nicht benötigt, würde die Lösung gar erschweren. Aber, wer gern alle Werte des gebildeten 4Tensors in der üblichen Form als größere Matrix anzei­gen möchte, kann sie dafür mit folgder plu­ralen Matrix­Fml nutzen: {=TensEx(TensorProd(B3:E5;C28:E32;2))}
Ihre 180 Ergebniswerte benötigen 5×3 Zeilen und 3×4 Spalten. Die hier­bei auch _ erfor­der­liche UDF TensEx ist eben­falls in zurück­lie­genden Bei­trägen zu finden: Rem Ermittelt Kronecker-Tensor-Produkt von 2 Matrizen als 2/2d-Array, ' was einem 4-Tensor gleichkommt; Arg1-2: jedes Element v.Arg1 wird ' mit allen Elementen von Arg2 multipliziert u.die Ergebnismatrizen ' in einer Matrix gleicher Größe wie Arg1 elementweise gespeichert; ' Arg3: fehlt/0 Ausgabe der 1.Subebene (xlSimulation) um F-Werte zu ' vmeiden, ±1/2 Rückgabe aller Werte als Texte in Matrixkonstanten- ' form (Sekundärmatrizen), ±2 erzeugt US-Notation, die v.UDF TensEx ' benötigt wird (m. dieser können die Texte zu 2d-Matrizen üblicher ' Form expandiert bzw auf d.Subebenen d. 4d-Modells extendiert wdn. ' Vs1.1 - LSr:CyWorXxl -cd:20180414 -1pub:20180414h -lupd:20180511t Function TensorProd(ByVal Matrix1, ByVal Matrix2, Optional ByVal alsMxKText _ As VbTriState) Dim cx1 As Long, cx2 As Long, ix As Long, rx1 As Long, rx2 As Long, _ zlErg() As String, el, erg, it, zwErg As Variant, _ MxCSep, MxDSep, MxRSep, txMxForm As Variant On Error GoTo fx With Application MxDSep = Array(".", .International(xlDecimalSeparator)) MxCSep = Array(",", .International(xlColumnSeparator)) MxRSep = Array(";", .International(xlRowSeparator)) txMxForm = Array("{#}", .International(xlLeftBrace) & "#" & _ .International(xlRightBrace)) End With alsMxKText = -Abs(alsMxKText): erg = Matrix1: zwErg = Matrix2 Matrix1 = erg: Matrix2 = zwErg ReDim erg(UBound(erg, 1) - LBound(erg, 1), UBound(erg, 2) - LBound(erg, 2)) ReDim zwErg(UBound(zwErg, 1) - LBound(zwErg, 1), UBound(zwErg, 2) - _ LBound(zwErg, 2)) For Each el In Matrix1 For Each it In Matrix2 If alsMxKText = vbUseDefault Then zwErg(rx2, cx2) = Replace(CStr(el * it), MxDSep(1), MxDSep(0)) Else: zwErg(rx2, cx2) = el * it End If rx2 = (rx2 + 1) Mod (UBound(zwErg, 1) + 1) cx2 = (cx2 - CInt(rx2 = 0)) Mod (UBound(zwErg, 2) + 1) Next it If CBool(alsMxKText) Then ReDim zlErg(LBound(zwErg, 1) To UBound(zwErg, 1)) For ix = LBound(zwErg, 1) To UBound(zwErg, 1) zlErg(ix) = Join(WorksheetFunction.Index(zwErg, ix + 1, 0), _ MxCSep(alsMxKText + 2)) Next ix erg(rx1, cx1) = Replace(txMxForm(alsMxKText + 2), "#", _ Join(zlErg, MxRSep(alsMxKText + 2))) Else: erg(rx1, cx1) = zwErg End If rx1 = (rx1 + 1) Mod (UBound(erg, 1) + 1) cx1 = (cx1 - CInt(rx1 = 0)) Mod (UBound(erg, 2) + 1) Next el If alsMxKText = vbFalse Then With Application.Caller 'Simulation der Xl-Ausgabe m.INDEX Debug.Print .Rows.Count - 1; .Columns.Count - 1 ReDim zwErg(.Rows.Count - 1, .Columns.Count - 1) For rx1 = 0 To .Rows.Count - 1 For cx1 = 0 To .Columns.Count - 1 zwErg(rx1, cx1) = erg(rx1, cx1)(0, 0) Next cx1 Next rx1 End With TensorProd = zwErg Else: TensorProd = erg End If fx: If CBool(Err.Number) Then TensorProd = CVErr(Err.Number) End Function Sachlich-fachliche Kommentare und Anmerkungen zur vorgestellten Arbeit sind durchaus erwünscht; es können auch alternative Lösungen vorgestellt wdn.
Ansonsten wünsche ich allen das übliche FroPf, obwohl wir es hier bei uns wohl wetter­mäßig mit am besten getroffen zu haben scheinen…
Gruß, Luc :-?

28
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tensor-Produkt-Anwend'Bsp (3/4-Tensor - 5.Forts.)
18.05.2018 09:29:21
Hajo_Zi
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Schau mal hier
Eine hochgeladene Arbeitsmappe erhöht die Wahrscheinlichkeit, dass Du eine Lösung für Dein Problem erhältst.
Erstelle folglich bitte eine Demomappe, aus der deine Aufgabenstellung klar erkennbar ist und lade diese hoch.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, solltest du diese Daten anonymisieren bzw. pseudonymisieren.
Falls Du den Download des Forums nicht benutzen möchtest beachte bitte: von unsicheren Servern file-upload lade ich keine Datei herunter (lt. Einschätzung meines Virenprogramms)

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Anzeige
Thema sowieso zu hoch für Dich !
18.05.2018 09:35:21
robert
Huch, Hajo hat einen Beitrag von mir angesehen, …
18.05.2018 18:24:09
mir
…robert,
allerdings nur, um seinen dümmlichen und hier völlig unangebrachten Spruch einzusetzen. Eigentlich hätte er ja bemerken können, dass das eine kopierbare HTML-Tabelle ist, steht ja sogar drunter… :->
Gruß & FroPf, Luc :-?
AW: zunächst nur ein paar Anmerkungen vorab ...
18.05.2018 10:54:59
neopa
Hallo Luc,
... Du hast zwar kein Bild eingestellt, wie Hajo schrieb, aber es wäre wohl günstiger gewesen, Du hättest (D)eine Arbeitsmappe hierzu auch eingestellt.
Ich hab nämlich jetzt fast eine Stunde gebraucht, um zunächst die dargestellte Tabelle erst einmal nachzustellen. Unglücklicherweise hatte ich Deine Daten zuerst mit Format übernommen. Nach geraumer Zeit hab ich dies verwerfen müssen. Ich hab dann neu begonnen und nur die Datenwerte geholt.
Zusätzlich müssen Deine Formelangaben für die Produktgruppe X2 aus der nur für die X1 geltenden Formeln noch angepasst werden. Und das Zeichen ≥ in einer Excelformel (I24) wird von Excel auch nicht verstanden.
Mit dem fachlichen Inhalt Deiner Darstellung konnte ich mich somit noch gar nicht auseinandersetzen und komme womöglich erst in den nächsten Tagen dazu.
Dir und allen anderen auch schöne Pfingsten.
Gruß Werner
.. , - ...
Anzeige
2 Anm
18.05.2018 10:58:59
lupo1
1) Hajo liest Luc ja doch. :-)
2) Mit einem Konstruktionsmakro können jegliche Rückverfolgungsängste, falls vorhanden, ad acta liegen.
1) Fiel mir auch gerade auf, ...
18.05.2018 18:42:52
Luc:-?
…Lupo;
hatte ich eigentlich nicht mit gerechnet. Aber liest ist wohl etwas übertrieben… ;-)
2) Was meinst Du mit Rückverfolgungsängsten? Ich kann mich nicht erinnern, darüber geschrieben zu haben. Fakt ist allerdings, dass diese Berechnungen nur in Xl fktionieren, nicht in LO/OOcalc und höchstwahrscheinlich auch in anderen Calc-Pgmm nicht (LO/OOcalc bewahrt nur den Wert, solange nicht völlig neu berechnet wird). Daran dürfte auch ein Konstruktionsmakro nichts ändern können, außer das Original zu bewahren. Aber das macht HTML ja auch. Ein Konstruktionsmakro ist aber dort hilfreich, wo originäres HTML nicht ver­wen­det wdn kann.
Ich hoffe mal, dass ich damit einen von Dir hier ausgesprochenen Wunsch erfüllt habe…
Gruß & FroPf, Luc :-?
Anzeige
Ein Konstruktionsmakro...
19.05.2018 12:42:09
lupo1
...
1) ist minimal klein, um Information zu verbreiten, da es nicht den Overhead von 8 oder 14 KB bei Exceldateien benötigt, oder den html-Overhead von Bamberg/Jeanie/Ziplies
2) erlaubt die Verwendung des Mediums "Forumtext" an sich (also ohne Anhang mit den verbundenen Problemen)
3) erlaubt dem Ersteller, 100% sicher anonym zu bleiben und 100% Kontrolle über die (weil fehlende und erst zu erstellende) Datei zu haben. Stichwort 25.5.2018.
4) erlaubt auch nicht angemeldeten Forumslesern die volle Verwendung
5) ermöglicht das Speichern in verschiedenen Formaten, oft auch .ods (wenn auch im Falle Tensoren nicht)
Mindestens eines verbindet uns beide, Luc: Uns wird beiden in dem Innovativen, was wir propagieren, nur eher zögerlich gefolgt ;) Zugegeben: Beide Innovationen sind erst mal nicht sonderlich bequem in der Klicki-Bunti-Welt.
Anzeige
Ja, da dürftest Du recht haben, ...
19.05.2018 16:20:33
Luc:-?
…Lupo,
nur dass ich es gern auch etwas „bunter“ habe und deshalb schon vor 17 Jahren versucht hatte, ganze TabellenKomplexe mittels VBA zu erzeugen (inkl automatischer VorspaltenText-Kürzung in Abhängigkeit vom zV stehenden Platz - Druck!), was damals schon keine Wür­di­gung durch den Veranlasser fand.
Spätere fortgeschrittene HTML-Tab-Perfektionen (auf Xl9-Basis) sind leider verloren gegangen, wes­halb ich weiter mit der etwas erwei­terten alten Fassung arbeite, die übrigens wesentlich schneller ist, als es die verlorene neue war. Aber man kann ja auch einkopieren und nachträglich anpassen, die neuere hatte das automatisch, für Xl und jedermann, (nur per IE und außerhalb eines Forums!) gemacht. Nur die Erzeugung bedurfte des VBA-Pgms.
Aha, das „Forums-9/11“ (15/5) war gemeint! ;-] Naja, diese WebSites gehen ja inhaltlich nur zT verloren - dank WebArchives.
Wenn eine Software anders rechnet als Xl, fktioniert so etwas auch nur in Xl und das betrifft nicht nur meine „Xl-Tensor-Entdeckung“, sondern eben auch große Teile der MatrixFml-Problematik und einzelne Fktt, zumindest deren Arbeit in diesem Zusammenhang.
Übrigens habe ich ja auch noch einen ganz anderen Fml-NotationsAnsatz nebst Interpretation entwickelt, der kein Problem mit „Klicki-Bunti“ hat, aber auch gewöhnungsbedürftig wäre und entwicklungsseitig zudem sehr zeitaufwendig ist, besonders, wenn man alle Erkenntnisse der letzten Jahre adäquat berücksichtigen wollte.
Luc :-?
Anzeige
Wenn Du etwas bunt haben willst, Luc, dann ...
22.05.2018 07:56:11
lupo1
... hast Du auch den Grund dafür.
Denn Deine Darstellungen sind komplex, wofür illustrative Farben das Verstehen erleichtern.
Das spreche ich jedoch den meisten anderen ab. Beispielsweise, wenn Farben oder Formate in Tabellenkalkulation direkt ausgewertet werden sollen (weil man gepinselt hat, statt Häkchen gesetzt), statt dass beide (und deren Auswertung) Ableitungen von Inhalten sind.
Das ist schön, dass Du das tust, ...
23.05.2018 01:50:45
Luc:-?
…Lupo,
denn es ist ja auch ein Unterschied, ob etwas für DemoZwecke (mit HTML) dargestellt wird, oder eine seriöse, druckfertige Tabelle sein soll. Für einen Einsatzplan hatte ich allerdings mal mit Farben gearbeitet, weil das dort (und wohl vielerorts) so üblich ist. Nur Abwesen­heits­gründe lagen zeichen­codiert vor, die Anwesenheit farbig, Grün für möglich und Rot für Überschneidungen (zeitweise - als Pla­nungs­hilfe). BedingtFormatierung wäre wg der komplexen Zusammenhänge wohl zu kompli­ziert geworden. Die Signierkästchen (1 Zelle pro Tag) konnten auch halbtäglich gefüllt wdn, was für die Meister sinnvoll war, die auch halbtägliche Einsätze hatten (vm hier, nm dort).
Und das Ganze konnte auch täglich zusammengefasst wdn. Es gibt also durchaus auch sinnvolle Ansätze für so etwas… ;-)
Morrn, Luc :-?
Anzeige
Ja, Werner, ...
18.05.2018 19:10:46
Luc:-?
…das tut mir natürlich leid, und ich hatte auch lange überlegt, ob ich das noch vor Pfingsten einstellen sollte, denn irgendwie ist es immer zu spät geworden, einen umfangreichen Text aus dem Stegreif zu schreiben. Die HTML-Tab war schon eher fertig, wobei ich leider vergessen hatte, das ≥ durch >= zu ersetzen (mein HTML-Pgm ersetzt diese Zeichen generell durch die korrekten mathe­ma­tischen, was für Xl-Fmln natürlich kontraproduktiv ist → muss ich mal ausnehmen).
Desweiteren hatte ich bei der PlatzBedarfsAngabe für die Darstellung aller Werte mittels UDF-Fml vergessen zu erwähnen, dass sich die Angabe nur auf X1 bezieht. Für X2 ist er etwas geringer, aber leicht aus der Angabe für X1 ableitbar.
Und dann habe ich noch vergessen, explizit darauf hinzuweisen, dass man die Durchschnittswerte für den primären Vgl auch anders ermitteln kann, weil das schon normale Mathematik hergibt (hatte selbst eine dementsprd Fml entwickelt). Deshalb habe ich ja auch das 2.Kriterium hinzugefügt, in der Hoffnung, dass das Ganze so etwas anspruchsvoller wird.
Aber wie gesagt, das Ganze soll nur zeigen, wie so etwas fktionieren kann, ohne dass man alle Werte auch sichtbar ermitteln muss. Und dabei wollte ich keine 2 unterschiedlichen Berechnungsarten anwenden.
Wer gern meine Bemerkung über die Durchläufe der pluralen MxFml pro Zelle nachprüfen möchte, kann dafür die UDF RmdAll (mit per Argument aktivierter Protokollierung) verwenden. Wie man das macht, hatte ich hier erläutert.
Gruß & ebenfalls FroPf, Luc :-?
Anzeige
AW: erkenne momentan den Nutzwert noch nicht ...
19.05.2018 12:46:39
neopa
Hallo Luc,
... hab mich allerding nur mit Deinem aktuellen Beitrag auseinandergesetzt, ohne jetzt Deine vorangegengenen Beitragsreihe noch zu studieren.
Du bezeichnest das von Dir dargestellte Beispiel, als eine "konstruierte (normal-)praktische Anwen­dung" In diesem nimmst Du Bezug auf eine Wertetabelle "Anzahl faktorierter Produktpreise größer Vglswert" in G9:J14. Mir ist nicht klar, wie Du auf diese gekommen bist. Ich vermute das es sich um einen Schritt einer iterativer Anwendungslöung handelt und Du die Werte in G9:J14 hier nur fix gesetzt hast. Oder?
Deine Feststellung der speziellen Fktions­weise der Xl-Fkt INDEX() in einer pluralen Matrix­Fml, wie Du diese in Deiner Formeln für C9 und C12 aufzeigst, ist sicherlich interessant. Aber momentan sehe zumindest ich in diesem noch keinen wirklichen praktischen Nutzwert. Ein Grund ist, dass diese sehr schwer verständlich und deshlab wohl noch schwerer anderen vermittelbar. Außerdem gibt es einfachere Formelalternativen. Auch für dieses Beispiel. Hier ist untenstehende Formel in B9. Diese wie alle nachfolgende (singulären) Formeln berücksichtigen im Beispiel außerdem auch gleich die verschiedenen Pruduktgruppen und können somit alle nach rechts und Formel C9 sowie F28 zusätzlich nach unten kopiert werden.
 ABCDEFGHIJ
1Faktor-
Gruppe
primär angenommene Multiplikationsfaktoren     
2Faktor1Faktor2Faktor3Faktor4     
3FGruppe185%90%95%100%     
4FGruppe2102%105%107%110%     
5FGruppe3112%114%117%120%     
6          
7Produkt-
Gruppe
Faktor-Mittelwert faktorierter ProduktpreiseAnzahl faktorierter Produktpreise > Vglswert
8GruppeFaktor1Faktor2Faktor3Faktor4Faktor1Faktor2Faktor3Faktor4
9X1FGruppe190,4695,79101,11106,430000
10X1FGruppe2108,56111,75113,88117,070124
11X1FGruppe3119,20121,33124,52127,71671011
12X2FGruppe1197,34208,95220,56232,1703 : 314
13X2FGruppe2236,81243,78248,42255,384555
14X2FGruppe3260,03264,67271,64278,605566
15          
16Vergleichswert u. Faktorermittlung      
17ProduktgruppeX1X2      
18 Ø Markt-Bruttopreise122,54232,66      
19 maxkritischer Ø-Preis121,33232,17      
20 maxkritischer Faktor114%100%      
21 minkritischer Ø-Preis111,75220,56      
22 minkritischer Faktor105%95%      
23 opt Faktor? 65%110,9%98,3%      
24 Ø optim B-ProdPreise117,98228,10      
25          
26Produkt-
Gruppe
Produktkalkulierte Produktpreiseoptimierte Brutto-Produktpreise  
27BezeichnProdVar1ProdVar2ProdVar3ProdVar1ProdVar2ProdVar3  
28X1Alpha1069791117,50107,52100,87  
29X1Beta117113112129,69125,26124,15  
30X1Gamma109116 120,83128,59   
31X1Delta105110104116,39121,94115,28  
32X1Epsilon92107111101,98118,61123,04  
33X2Vau227238245223,03233,84240,71  
34X2Zeta235244 230,89239,73   
35X2Eta204  200,43    

Formeln der Tabelle
ZelleFormel
C9{=RUNDEN(MITTELWERT(WENN(($A$28:$A$35=$A9)*$C$28:$E$35;$C$28:$E$35))*INDEX($B:$E;REST(ZEILE(A3); 3)+3;SPALTE(A1)); 2)}
C19=MAX(INDEX($C9:$F14*($C9:$F14<C18)*($A9:$A14=C17); ))
C20=SUMME(INDEX((INDEX($C:$C;VERGLEICH(C17;$A:$A;0)):INDEX($F:$F;VERGLEICH(C17;$A:$A;0)+2)=C19)*$B3:$E5;))
C21=AGGREGAT(15;6;$C9:$F14/($G9:$J14>0)/($A9:$A14=C17); 1)
C22=SUMME(INDEX((INDEX($C:$C;VERGLEICH(C17;$A:$A;0)):INDEX($F:$F;VERGLEICH(C17;$A:$A;0)+2)=C21)*$B3:$E5;))
C23=(C20-C22)*RECHTS($B23;3)+C22
C24=MITTELWERT(INDEX($F:$F;VERGLEICH(C17;$A28:$A99;0)+27):INDEX($H:$H;VERGLEICH(C17;$A28:$A99;0)+ZÄHLENWENN($A28:$A99;C17)-1+27))
F28=WENN(C28="";"";C28*(($A28=$C$17)*$C$23+($A28=$D$17)*$D$23))
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...
Anzeige
Nun, der Nutzwert hängt ja davon ab, ...
20.05.2018 02:15:20
ab,
…welcherart Berechnungen man durchführen will, Werner,
weshalb das hier ja auch nur ein konstruiertes Bsp ist, was diese interessante Wirkung von INDEX mit 4.Argument - auch für Datenfelder, was nach landläufigem Verständnis (vgl PHs Ol-Xl-Tutorial; die Xl-Hilfe ist auch nicht vollständiger!) eigentlich unlogisch wäre und in LO/OOcalc auch nicht fktioniert - nur etwas wirtschafts­praxis­näher demon­strieren soll.
Den 1.Teil, ich erwähnte es bereits, könnte man auch anders erledigen; so wie Du oder ebenfalls mit singularen bzw pluralen MxFmln, auch ganz ohne die Extra-(Hilfs-)Tabellen in Zeilen 16:24, weil das ja schon die MITTELWERT-Mathematik hergibt, bspw also auch so:
C19,D19:{=MAX(MITTELWERT(C28:E32)*B3:E5*(MITTELWERT(C28:E32)*B3:E5<C18))}
C20,D20:=SUMMENPRODUKT(--(MITTELWERT(C28:E32)*B3:E5=MAX(MITTELWERT(C28:E32)*B3:E5*(MITTELWERT(C28:E32)*B3:E5<C18)));B3:E5)
F28:H32,F33:H35:{=C28:E32*SUMMENPRODUKT(--(MITTELWERT(C28:E32)*B3:E5=MAX(MITTELWERT(C28:E32)*B3:E5*(MITTELWERT(C28:E32)*B3:E5<C18)));B3:E5)}

Das hast Du dann ja auch erwartungsgemäß mit Bravour gemeistert. ;-)
Damit das nicht so einfach ist, hatte ich aber auch noch diese OptimierungsKorrektur hinzugefügt, und deren Grundlage in G9:J11 bzw G12:J14 wird ebenfalls berechnet - auch unter Nutzung des 4Tensor-Effekts. Die Fml dafür ist unter der für den 1.Teil ganz oben angegeben. Die musst Du übersehen haben.
Und natürlich ist klar, dass jemand, der schon die Fktionsweise von MxFmln nicht versteht, das hier erst recht nicht verstehen wird, auch, wenn ich meine, es nachvollziehbar erklärt zu haben. Aber es soll ja auch Xl-Experimentatoren und -Profis geben (anders wären ja wohl auch die 3 besonderen Xl-Bücher von WF&Co nicht zustande gekommen)… ;-]
Morrn, Luc :-?
PS: Bin frühestens gg Abend wieder vor Ort.
Anzeige
AW: ... sehe ich prinzipiell auch so ...
20.05.2018 10:45:49
neopa
Hallo Luc,
... aber solange ich etwas zumindest mir gegenüber nicht 100% verständlich und nachvollziehbar erklären kann, ziehe ich einfachere erklärbare Lösungsformeln vor. Dies zumal ich mit meinen alternativen Lösungsformeln auch für Dein Beispieldatei mE wirklich etwas leichter nachvollziehbare Formeln aufstellen konnte. Untenstehend nun nachträglich auch für G9(:J14; ich hatte gestern offensichtlich einen Tag, wo ich ich einiges übersehen habe, so u.a. auch Deine Formelangabe für G9:J11).
Es ist auch nicht so, dass ich die Lösungsmethode nicht prinzipiell verstehe, aber wie bereits geschrieben, erkenne ich noch nicht den wirklichen Vorteil gegenüber den einfacher erklärbaren Alternativen. Aber natürlich erkenne ich Deine Leistung an der Entdeckung dieser neuen Möglichkeit an, zumal ich mir eine (auch derartige) Erweiterung der Auswertungsmöglichkeiten von INDEX() schon lange gewünscht hatte und mich zeitweise auch daran versucht hatte.
(M)eine "Erklärung" für die momentan noch schwer erklärliche dieser "neuen" Funktionsweise, liegt wohl u.a. darin, dass man mit dem klassischen [F9] die Formel nicht wirklich nachvollziehbar analyseren kann. Somit ist man angewiesen auf die Excelfunktion: Formelauswertung. Diese empfinde ich jedoch als noch nicht nutzerfreundlich genug, ohne allerdings klar definieren zu können, wie diese besser gestaltet werden könnte.
Abschließend zusammenstellend meine sämtlichen alternativen Formeln für Dein konstruiertes praktisches Anwendungsbeispiel mit der Formel G9, die ebenfals nach rechts und unten kopierbar ist. (Mit Ausnahme von C9 kommen alle ohne {} aus. Ich hab bewusst darauf verzichtet auch die Alternativformel C9 noch von {} zu "befreien", denn hier dürfte die aufgezeigte Matrixformel die günstigere Alternative sein.)
 ABCDEFGHIJ
1Faktor-
Gruppe
primär angenommene Multiplikationsfaktoren     
2Faktor1Faktor2Faktor3Faktor4     
3FGruppe185%90%95%100%     
4FGruppe2102%105%107%110%     
5FGruppe3112%114%117%120%     
6          
7Produkt-
Gruppe
Faktor-Mittelwert faktorierter ProduktpreiseAnzahl faktorierter Produktpreise > Vglswert
8GruppeFaktor1Faktor2Faktor3Faktor4Faktor1Faktor2Faktor3Faktor4
9X1FGruppe190,4695,79101,11106,430000
10X1FGruppe2108,56111,75113,88117,070124
11X1FGruppe3119,20121,33124,52127,71671011
12X2FGruppe1197,34208,95220,56232,170014
13X2FGruppe2236,81243,78248,42255,384555
14X2FGruppe3260,03264,67271,64278,605566
15          
16Vergleichswert u. Faktorermittlung      
17ProduktgruppeX1X2      
18 Ø Markt-Bruttopreise122,54232,66      
19 maxkritischer Ø-Preis121,33232,17      
20 maxkritischer Faktor114%100%      
21 minkritischer Ø-Preis111,75220,56      
22 minkritischer Faktor105%95%      
23 opt Faktor? 65%110,9%98,3%  Anz.Relat. kleineren zu größerenX1X2
24 Ø optim B-ProdPreise117,98228,10  optim. Brutto-Produktpreise9 : 53 : 3
25          
26Produkt-
Gruppe
Produktkalkulierte Produktpreiseoptimierte Brutto-Produktpreise  
27BezeichnProdVar1ProdVar2ProdVar3ProdVar1ProdVar2ProdVar3  
28X1Alpha1069791117,50107,52100,87  
29X1Beta117113112129,69125,26124,15  
30X1Gamma109116 120,83128,59   
31X1Delta105110104116,39121,94115,28  
32X1Epsilon92107111101,98118,61123,04  
33X2Vau227238245223,03233,84240,71  
34X2Zeta235244 230,89239,73   
35X2Eta204  200,43    
36          

Formeln der Tabelle
ZelleFormel
C9{=RUNDEN(MITTELWERT(WENN(($A$28:$A$35=$A9)*$C$28:$E$35;$C$28:$E$35))*INDEX($B:$E;REST(ZEILE(A3); 3)+3;SPALTE(A1)); 2)}
G9=SUMME(INDEX(N(INDEX(B:B;REST(ZEILE(A3); 3)+3)*($C$28:$E$35*($A$28:$A$35=$A9))>WVERWEIS($A9;$C$17:$D$18;2;0)); ))
C19=MAX(INDEX($C9:$F14*($C9:$F14<C18)*($A9:$A14=C17); ))
C20=SUMME(INDEX((INDEX($C:$C;VERGLEICH(C17;$A:$A;0)):INDEX($F:$F;VERGLEICH(C17;$A:$A;0)+2)=C19)*$B3:$E5;))
C21=AGGREGAT(15;6;$C9:$F14/($G9:$J14>0)/($A9:$A14=C17); 1)
C22=SUMME(INDEX((INDEX($C:$C;VERGLEICH(C17;$A:$A;0)):INDEX($F:$F;VERGLEICH(C17;$A:$A;0)+2)=C21)*$B3:$E5;))
C23=(C20-C22)*RECHTS($B23;3)+C22
C24=MITTELWERT(INDEX($F:$F;VERGLEICH(C17;$A28:$A99;0)+27):INDEX($H:$H;VERGLEICH(C17;$A28:$A99;0)+ZÄHLENWENN($A28:$A99;C17)-1+27))
I24=ZÄHLENWENN(INDEX($F:$F;VERGLEICH(C17;$A28:$A99;0)+27):INDEX($H:$H;VERGLEICH(C17;$A28:$A99;0)+ZÄHLENWENN($A28:$A99;C17)-1+27); "<"&C18)&" : "&ZÄHLENWENN(INDEX($F:$F;VERGLEICH(C17;$A28:$A99;0)+27):INDEX($H:$H;VERGLEICH(C17;$A28:$A99;0)+ZÄHLENWENN($A28:$A99;C17)-1+27); ">="&C18)
F28=WENN(C28="";"";C28*(($A28=$C$17)*$C$23+($A28=$D$17)*$D$23))
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...
Gratulation und Zustimmung
21.05.2018 03:45:01
Luc:-?
Morrn, Werner,
damit hast Du erfolgreich eine komplette alternative Lösung für die spezielle Zielstellung dieses Bsps geliefert, die wohl nahezu die einzige mit Normal- bzw singularen MxFmln bleiben wird, weil sich bisher anscheinend keiner der anderen Fml-Cracks damit befasst hat. ;-)
Gleichzeitig kann man erkennen, dass in einigen Fällen der Fml-Aufwand dafür relativ größer ist und auch nicht jedem leichter ver­ständlich sein mag, denn je mehr Fktt in die Fml eingehen desto größere VerständnisSchwierigkeiten dürfte die Mehrzahl haben. Demjenigen, der MxFmln beherrscht und die geschilderten Hintergründe und Abläufe nachvollziehen kann, wird mit meiner Methode ein idR schlankeres FmlKonzept zur Lösung nicht ganz trivialer Aufgaben gezeigt, zumal diese Xl-INDEX-Möglichkeit weder von MS noch (mit hoher Wahrscheinlichkeit) von irgendeinem anderen Kompendium oder Tutorium erwähnt wird, was auch nicht ver­wun­dern darf, denn jede nur hinreichend komplexe Pgmmierung wird Nebeneffekte generieren, an die niemand zuvor gedacht hatte. Davon zehren nicht zuletzt ja auch Fml-Spezialisten.
Ähnlich wie Du, der sich nach eigenem Bekunden und auch nachweislich intensiv mit der Xl-Fkt INDEX beschäftigt hat, hatte ich das ebenfalls getan und dabei auch alles versucht, was von MS in der Xl-Hilfe angegeben wird. Darüber hinaus hatte ich ja versucht, einiges per VBA in einer UDF nachzubilden, aber das ist sehr kompliziert und wohl auch nicht zufriedenstellend lösbar, zumal hierbei auch fktsexterne Xl-Einflüsse (wie die Variation skalarer Argumente) hinzukommen. Um so etwas festzustellen, ist der Fkts-/Fml-Assi hilfreicher als [F9], obwohl der auch seine Grenzen hat, was seiner Pgmmierung geschuldet ist (auch Xl-Abstürze sind dort eher möglich!).
Mit dieser Thema-Reihe wollte ich ab der 3.Fortsetzung wissen, …
1. ob Xl eine spezielle MatrizenMultiplikation wie die Bildung des Kronecker-Produkts mit seinen eigenen Mitteln bewältigen kann;
2. wie man das mit naheliegend erforderlichem INDEX-Einsatz erreichen kann; und …
3. was dabei eigentlich abläuft.
Es sieht zwar nicht so aus, als ob Xl einen echten 4dimensionalen Tensor (als 4d-VBA- bzw 2×2-Variant-Array) im virtuellen Rechen­raum bildet (zumindest kann ich das primär nicht direkt nachweisen) - mit VBA lässt sich das nicht adäquat nachbilden (die genann­ten Arrays verhalten sich dabei nicht genauso), aber sekundär wird per Wiederholung eine ganze Schar von Matrizen erzeugt, die von anderen Xl-Fktt (und entsprd UDFs) positionsgenau ausgewertet wdn kann, was mit der Primär­Darstellung nicht möglich wäre.
In Bezug auf die Vor- und Nachteile pluraler MxFmln muss hier allerdings festgestellt wdn, dass der Vorteil der 1maligen Berech­nung einer ganzen Matrix von Werten nur für die PrimärFml (1.INDEX) gilt. Sobald die Werte (in der Ausgabe­Matrix) weiter­ver­ar­bei­tet wdn sollen (man kann so auch eine ganze Schar von Teil­Summen erzeugen), kommt hier das 2.INDEX ins Spiel, was diesen Vor­teil wieder aufhebt. Das könnte für größere Datenmengen ggf genauso ungünstig sein, wie es wohl das x-malige Berechnen ein­und­der­selben Matrix, um letztlich nur jeweils einen ihrer Werte zurückzugeben, ist.
Gruß, Luc :-?
AW: Zustimmung doch nur teilweise, denn ...
21.05.2018 11:34:10
neopa
Hallo Luc,
... da ich mit meinen alternativen Formellösungen die Anzahl an verschiedenen Formeln auf die Hälfte gegenüber Deinen reduziert habe, sind meine Formeln natürlich bzgl. Anzahl an benutzen Funktionen je Formel teilweise etwas aufwendiger, aber dadurch auch etwas flexibler.
Zugebenermaßen dürften auch meine Formeln nicht für jeden User verständlich sein. Aber man kann, wenn man möchte, diese noch mit der klassischen [F9]-Methodik analysieren.
Mal sehen, wie sich die Anwendung der von Dir gefundenen spez. INDEX()-Auswertungstechnik in der Praxis durchsetzen wird. Auch ich werde in Zukunft nach geieigneten weiteren praktischen Anwendungsfällen "Ausschau halten"
Gruß Werner
.. , - ...
An ein 'Durchsetzen' glaube ich eher nicht, ...
21.05.2018 14:30:21
Luc:-?
…Werner,
denn es wird ja nirgends - außer hier (die Wenigsten wdn es gelesen haben) - erwähnt, dass das 4.Argu­ment von INDEX so und auch bei Daten­fel­dern als 1.Argument eingesetzt wdn kann.
Außerdem muss ich nochmals betonen, dass das Kronecker-Produkt 2er Matrizen zwar eigentlich einen 4Tensor liefert, der aber lt mathe­matischer Definition als größere Matrix (2Tensor) dargestellt wird, was es letztlich interessant für rationellere Berechnungen und Daten­Speicherungen macht. Folglich habe ich nicht das (abbildungsmäßig definierte) Kronecker-Produkt verwendet, sondern die Form, die mit normalen, wenn in dieser Ausführung auch unbekannten) Xl-Mitteln erreichbar ist, eben einen Quasi-4-Tensor, der von Xl dann erstaunlicherweise (im Ggsatz zu seinen VBA-Pendants), wenn auch nur rudimentär, abgebildet, aber in Gänze weiterbenutzt wdn kann (nur nicht in nur einer Zelle, was der von dieser INDEX-Nutzung zwingend erforderlichen pluralen MatrixFml-Form geschuldet ist). Darauf kann man dann mit UDFs aufbauen und somit alle Werte in der üblichen Form auch abbilden (TensEx auf Hilfszellen mit VJoin/Vs1.6* oder - mit TensorProd kombiniert - gleich in Totale, wobei Letztere quasi das Hilfszellen­Konstrukt oder die rudimentäre Ausgabe simuliert). Mit der bereits zuvor erwähnten UDF RmdAll (unter OL-Link) kann man dann auch die Abläufe pro­to­kol­lieren (die natürlich auch der Fkts-/Fml-Assistent nicht sichtbar wdn lässt, geschweige denn [F9]).
Ich hatte ja vor etlichen Jahren mal eine UDF geschrieben, mit der eine plurale MatrixFml ergebnisseitig auf den ganzen benötigten oder einen festgelegten Bereich (mit Hilfe einer EreignisProzedur) ausgedehnt wdn kann (Ersteres macht übrigens LO/OOcalc automatisch!). Damals hatte ich am Kronecker-Produkt getestet, ob seine übliche Darstellungsform auch auf diese Weise erreichbar wäre. Mit einer Mehrfach-Kombi der UDF ging das. Müsste ich mal am jetzigen Bsp ausprobieren, denn das wäre dann eine weitere Alternative, alle Werte darzustellen. Vielleicht schafft man das ja auch ohne die UDF, nur mit einer darauf reagierenden EreignisProzedur. Wäre Xl mathematisch (operatormäßig) Uptodate, wären wohl auch solche speziellen Operationen ganz ohne Fkt möglich…
* Deine Vs1.5 arbeitet bei Arg3=2 nicht zuverlässig mit Dezimalzahlen; habe ich inzwischen korrigiert.
Luc :-?
AW: nachgefragt ...
21.05.2018 16:43:59
neopa
Hallo Luc,
... hast Du mal mit Deiner LösungsMethodik versucht, z.B. Deine Formeln G9:G11 und G12:G14 in nur noch eine Formel G9:G14 zusammenzufassen?
Gruß Werner
.. , - ...
Nee, hatte ich absichtlich nicht versucht, ...
21.05.2018 20:40:37
Luc:-?
…Werner,
denn ursprünglich hatte ich an unterschiedliche FaktorenListen für X1 und X2 gedacht. Außerdem gibt's ja auch unterschiedliche Vglswerte. Aber möglich könnte es ggf sein…
Luc :-?
Könnte, aber ist es natürlich nicht, ...
22.05.2018 03:22:52
Luc:-?
…Werner,
zumindest nicht ohne wesentlich größeren Aufwand. Das von Xl primär abgebildete TensorProdukt zeichnet sich nämlich dadurch aus, dass es genau die Größe der 1.Matrix hat, also hier der mit den Faktoren, die per INDEX in Skalare zerlegt wird, die nach­ein­ander mit je einer Kopie der 2.Matrix multi­pli­ziert wdn. Man kann die 2.Matrix größer wählen, aber trotz­dem kommen hier nur 3 Zei­len und 4 Spal­ten heraus. Hinter jedem Wert dieser Ergeb­nis­Matrix steht aber eben­falls eine Matrix der jewei­ligen Produkte der 2.Matrix mit dem jewei­ligen Skalar. Diese muss man dann unmit­telbar mit dem Vgls­wert vgln, sonst erhält man kein sinn­volles Ergeb­nis. Da sich das nicht mehr im Xl-Index-Raum abspielt, hat man keine Chance, einen Teil dieser internen Matrizen anders vgln zu lassen, zumindest kann das nicht bemerkt wdn, da diese Werte nicht sichtbar wdn. Folglich wird die SUMME dann auch über alle Vgls­Ergeb­nisse einer solchen Matrix gebildet, wobei das 2.INDEX das ja erst ermög­licht - seine einzige Aufgabe.
Eine Überprüfung mit speziellen Mitteln, ob ggf mit dem anderen Wert vgln wurde, wäre also sinnlos, da jede vir­tu­elle (Vgls-)Matrix in Gänze summiert wird, was diese Aktion ohnehin obsolet machen würde.
Da im virtuellen Rechenraum nicht aus einer Fml heraus indiziert wdn kann, muss man froh sein, dass Xl das intern für jede Ele­ment­Matrix eines Blocks zuver­lässig schafft. Ein Austausch von Werten oder gar 2 separate Summa­tionen pro Element­Matrix sind nicht möglich → ich wüsste jedenfalls nicht wie. Mög­lich wäre allen­falls, alle Werte abzu­bilden und dabei oder darauf (per Aus­tausch) zu variieren. Aber das ginge über quasi-normales Xl hinaus. Es ist hier ja auch nicht zwin­gend erfor­derlich.
Übrigens, die zuvor erwähnte UDF FlexArr eignet sich auch nur bedingt hierfür. Primär macht sie das, was sie auch für jede normale plurale MxFml tun kann. Da die anderen bereits erwähnten (und publi­zierten!) UDFs die Trans­formation in eine normale Matrix ein­facher schaffen, könnte man sie mit denen kombi­nieren, falls man auch hierbei eine gewisse Tabel­len­Erstel­lungs­Auto­matik wünscht. Aber ich habe sie ja ohnehin nicht publi­ziert, weil sie stärker in ein AddIn eingebunden ist.
Morrn, Luc :-?
AW: genau, das hatte ich auch festgestellt ....
22.05.2018 10:46:16
neopa
Hallo Luc,
... als ich gestern versucht hatte dies zu realisieren. aus meiner Sicht wäre es aber wünschenswert, wenn es ohne VBA /UDF auch dafür eine Lösung gäbe. Vielleicht fällt Dir dazu ja noch etwas ein. Ich komme aktuell nicht dazu.
Gruß Werner
.. , - ...
Weitere INDEX-'Leckerlis' u.AGGREGAT-ÜList
23.05.2018 03:12:56
Luc:-?
Ich gehe davon aus, Werner,
dass ein solcher Versuch auf der Basis der Xl-Fml hoffnungslos wäre. Was möglich ist, machen ja bereits die erwähnten UDFs, die mehr­heitlich publiziert wurden. Xl weigert sich standhaft, das Ergebnis einer einen 3- oder 4-Tensor liefernden UDF wenigstens teilweise abzu­bilden und dann auch noch alle Werte an eine andere Fkt weiterzugeben.
Aber es gibt ja noch mehr Derartiges im Zusammenhang mit INDEX (in einer pluralen MxFml), was aber den Willen voraussetzt, ggf auch mit Hilfszellbereichen zu arbeiten, zB die Zusammenfassung der Werte dis­kon­ti­nu­ier­licher Bereiche, gar ihrer Bezüge, in einer kon­ti­nu­ier­li­chen Tabelle:
QuellDaten: A1:C2 (ZFrb=Gelb),K1:L3 (ZFrb=Rot): {1.2.3;4.5.6},{7.8;9.10;11.12}
1.Versuch: {1.2.3.#NV.#NV;4.5.6.#NV.#NV;#NV.#NV.#NV.#NV.#NV}:={=INDEX((A1:C2;K1:L3);;)}
2.Versuch: {1.1.1.7.7;1.1.1.7.7;1.1.1.7.7}:={=INDEX((A1:C2;K1:L3);;;{1.1.1.2.2})}
3.Versuch: {1.2.3.7.8;4.5.6.9.10;#BEZUG!.#BEZUG!.#BEZUG!.11.12}:={=INDEX((A1:C2;K1:L3);{1;2;3};{1.2.3.1.2};{1.1.1.2.2})}
4.Versuch: {1.2.3;4.5.6;7.8.#BEZUG!;9.10.#BEZUG!;11.12.#BEZUG!}:={=INDEX((A1:C2;K1:L3);{1;2;1;2;3};{1.2.3};{1.1.1;1.1.1;2.2.2;2.2.2;2.2.2})}
5.Versuch: {1.2.3;4.5.6;7.8.0;9.10.0;11.12.0}:={=WENNFEHLER(INDEX((A1:C2;K1:L3);{1;2;1;2;3};{1.2.3};{1.1.1;1.1.1;2.2.2;2.2.2;2.2.2});0)}
6.Versuch: {1.2.3.7.8;4.5.6.9.10;#BEZUG!.#BEZUG!.#BEZUG!.11.12}:={=AGGREGAT(4;6;INDEX((A1:C2;K1:L3);{1;2;3};{1.2.3.1.2};{1.1.1.2.2}))}
7.Versuch: {"Gelb"."Gelb"."Gelb"."Rot"."Rot";"Gelb"."Gelb"."Gelb"."Rot"."Rot";"Grau"."Grau"."Grau"."Rot"."Rot"}:={=WENNFEHLER(CellContIn(INDEX((A1:C2;K1:L3);{1;2;3};{1.2.3.1.2};{1.1.1.2.2});;;"icn");"Grau")}
An der (vorhandenen) UDF, die in einem 8.Versuch auch den 2.TeilBereich als MTRANS-Ergebnis potenziell unter oder neben den 1. stel­len kann, so dass eine geschlossene Matrix nur dieser Werte entsteht, muss ich noch (weitere) Änderungen vornehmen, denn bisher scheitert sie an diesem speziellen Fall, zumal hier offensichtlich auch 2 Durchläufe pro TeilBereich in willkürlicher Reihenfolge erfolgen — ein Problem bei Bildung einer einheitlichen GesamtMatrix mit an den Originalen orientierter Werte-Positionierung. Mit INDEX ist ja bekanntlich eine derartige Mischung nicht möglich.
Der 6.Versuch zeigt, wie man AGGREGAT hierbei überlisten kann, weil INDEX eben ZellBezüge zurück­gibt, was letztlich der 7.Versuch noch deutlicher beweist (auch, wenn hier eine unpublizierte UDF mit im Spiel ist, aber ohne die und echte Zellbezüge ginge das nunmal nicht).
Außerdem zeigt der 6.Versuch hier auch noch, dass in diesem Fall der FehlerFilter von AGGREGAT nicht wie gewohnt fktioniert, denn der ist offensichtlich nur fürs Weglassen solcher Werte, nicht ihren Ersatz durch andere (wie WENNFEHLER → 5.Versuch) geschaffen worden. Gleichzeitig beweist das, dass AGGREGAT jeden dieser Werte einzeln erhält und folglich behandelt, was auf die Anzahl der Durchläufe schließen lässt (mit Arg1=9 kommt dasselbe raus, mit 2 lauter 1en).
Du siehst also, dass es durchaus sinnvoll sein kann, sich intensiv mit MatrixFmln zu befassen, anstatt sich stets nur zu bemühen, sie mög­lichst zu vermeiden… ;-)
Morrn, Luc :-?
AW: die Var. 5 und 6 sind schon interessant ...
23.05.2018 15:13:53
neopa
Hallo Luc,
... allerdings kann man damit eben "nur" diskontunuierliche Datenwertkopieen zusammenführen und dabei erforderlichenfalls neu anordnen. Dies allerdings auf eine Art und Weise, wie standardmäßig wohl nur auf Umwegen realisierbar.
Aber einen wirklich praktischen Nutzwert erkenne ich leider bestenfalls in Ausnahmefällen.
Gruß Werner
.. , - ...
Auch hierbei kommt es ja letztlich darauf an, ...
23.05.2018 16:17:43
Luc:-?
…Werner,
was man machen will bzw muss. Aber das Ganze gibt eben auch deutliche Hinweise auf die Fktsweise von Xl im Zusammenspiel mit seinem FmlText-Interpreter. In Fällen, in denen das 4.INDEX-Argument angegeben wird, kann es (in pluralen MxFmln) zu mehreren Durchläufen der Fml-Berechnung kommen, auch wenn iterative Berechnung gar nicht eingestellt wurde. Xl zerlegt die Ergebnis­Ermitt­lung dann wohl positionsabhängig in Einzelrechnungen mit wechselnden Ausgangswerten, anstatt alle Werte auf einmal zu berechnen. Ein Grund, warum AGGREGAT hier immer nur einen Wert erhält, der, falls Fehlerwert, erhalten bleibt, während ansonsten die Berech­nung nur mit diesem einen ausgeführt wird.
Beide, AGGREGAT und WENNFEHLER, liefern keine ZellBezüge, sondern nur Werte zurück, denn auch das Austauschen von "Grau" gg eine ZellAdresse, an der dieser Text steht, erlaubt nicht die Notation von WENNFEHLER im 1.Argument der UDF, die allerdings keine diskontinuierlichen Bereiche positionsgenau verarbeiten kann.
Eigentlich fehlt jetzt ggf nur noch eine Methode, die eine solche Zusammenfassung auch in nur einer Zelle vornehmen kann, um damit letztlich weitere Berechnungen durchführen zu können. Mit INDEX allein, dürfte das kaum durchführbar sein, zumindest nicht mit singu­larer MxFml, also mindestens dual, was ja schon ein Fortschritt wäre, vermutlich aber auch nichts wird.
Luc :-?
AW: Ergebnismatrix-Zus.führung in ner Zelle? ...
23.05.2018 17:51:13
neopa
Hallo Luc,
... wäre evt. mit Hilfe der Funktion TEXTVERKETTEN() ab Excel 2016 zu realisieren. Allerdings halte ich diesen Weg als wenig erstrebenswert, weil diese Matrix ja weiter augewertet werden soll und es dafür mW auch noch keine geeigneten Standardauswertungsfunktionen gibt.
Es fehlt mE momentan einfach eine Funktion/Funktionalität, die eine (wie auch immer) generierte Datenmatrix, in eine Matrix wandelt, die man mit den vorhandenen Standardfunktionen auswerten kann.
Den Einsatz von puralen Matrixformeln, um eine (Zwischen-)Datenmatrix in Hilfszellen abzulegen, halte ich nach wie vor für ungünstig, weil solche ja nicht dynamisch generierbar sind. Dann doch lieber gleich die Hilfszellendaten mit einfachen flexibeleren Formeln generieren.
Mir schwebt momentan vor, dass eine Funktionalität zweckmäßig sein könnte, die der internen Funktionalität der sogenannten "intelligenten" Tabellen ähnelt. Nur dass die "gewünschte" Funktionalität eben auch intern Datenmatrix erzeugen und diese mit Standardfunktionen gleich ausgewertet werden kann. Aber das ist nur (m)eine völlig spontane "Vision" hierzu, die nur vielleicht am ehensten näherungsweise das wiedergibt, was ich mir so schemenhaft vorstelle.
Gruß Werner
.. , - ...
Ja, natürlich habe ich mir das umständlichere ...
24.05.2018 02:37:06
Luc:-?
in einzelliger Fml Dir ggüber ersparen wollen, Werner, ;-]
aber Du hast es ja schon richtig verstanden. In einfacheren Fällen können das Xl-Fktt durchaus, aber wenn erst eine brauchbare Matrix generiert wdn muss, wird's zumindest mit INDEX schwierig, weil es hierbei zu einem komplexen Zusammenwirken von MatrixFml-Form, Anzahl ausgewählter Zellen und Variation primär skalarer Argumente, gar ganzer Matrizen, kommt. Das lässt sich kaum mit nur einer ZellFml auf eine Zelle fixieren. Werden es ohnehin mehrere, könnte das eher klappen, hat dann aber andere Abhängigkeiten, die stören könnten (wie zuvor bei den unterschiedlichen Vgln). Es gibt ja zB auch keine Xl-Fkt, die blattübergreifend Daten nur darstellen kann. Entweder muss man direkt verlinken oder gleich eine weiterverarbeitende Fkt wählen. Auch INDIREKT ist kein echter Ggbeweis, weil derartige Fmln ebenfalls variieren, keine diskontinuierlichen Bereiche direkt verarbeiten und auch keine größere gemeinsame Matrix erzeugen können.
Allerdings wäre eine gemeinsame Matrix mit nur den in den beiden Bsp-TeilBereichen enthaltenen Daten möglich, wenn man Deine Eventual-Idee aufgreift und nicht TEXTVERKETTEN, dass das Ganze komplizieren würde, sondern die UDF VJoin einsetzt (geht in diesem Fall auch mit Deiner Vs1.5):
{1.2.3;4.5.6;7.9.11;8.10.12}:={=TxEval(WECHSELN(VJoin(A1:C2;"";2)&VJoin(MTRANS(K1:L3);"";2);"}{";";") )}
Für wohl alle nachvollziehbar geht's analog auch mit der UDF MxJoin, nur etwas umständli­cher (beide benötigte UDFs sind im Archiv enthalten):
{1.2.3;4.5.6;7.9.11;8.10.12}:={=TxEval("{"&MxJoin(A1:C2;",";-1)&";"&MxJoin(A1:C2;",";-2)&";"&MxJoin(K1:L3;",";1)&";"&MxJoin(K1:L3;",";2)&"}")}
Aber ich habe auch noch eine andere, kürzere und direktere Fml-Möglichkeit aus meinem UDF-Reper­toire, nur leider nicht all­ge­mein nach­zu­voll­ziehen, weil ebenfalls nicht oW publizierbar:
{1.4.7.8;2.5.9.10;3.6.11.12}:={=Couple(A1:C1;A2:C2;K1:K3;L1:L3)} oder andersherum …
{1.2.3;4.5.6;7.9.11;8.10.12}:={=MTRANS(Couple(A1:C1;A2:C2;K1:K3;L1:L3))}
Die ist aber etwas schreibaufwendig, weil sie beliebige (Ko-)Vektoren zu Matrizen (eigentlich ein Vektor mit Kovek­toren als Elemente) zusammenstellen soll und außerdem in der Argumente­Anzahl begrenzt ist. Das Gleiche gilt im Prinzip für die UDF DataSet aus dem Archiv, nur ist die hierfür gar nicht brauchbar. Also werde ich ggf doch die zuvor erwähnte UDF entsprd erweitern müssen (oder eine andere), obwohl sie nicht für so etwas gedacht war.
Deine Vision dürfte übrigens nur schwer von extern aus umsetzbar sein, weil man dann Zugriff auf Xl-Interna bräuchte. Da wäre ein neues alternatives Komplett-Konzept ggf leichter umzusetzen, aber nichtsdestotrotz ziemlich entwicklungsaufwendig…
Ich glaube auch nicht, dass MS dem folgen würde, denn es könnte für sie ebenfalls aufwendig wdn und der Markt verlangt eher nach besseren und schnelleren Visualisierungsverfahren, wie man auch entsprd Werbung anderer im INet entnehmen kann. Und das Bereit­stellen, Neuordnen und Präsentieren fertiger Daten im Rahmen ausgefeilter Pgm-Raffinessen befriedigt idR Pgmmierer mehr (sieht man ja auch hier) als irgend­welche komplexen Berech­nungs­Methoden zu pgmmieren und dabei womöglich noch in die Tiefen von Xl vor­dringen zu müssen. Das könnte sich nämlich als 2schneidiges Schwert erweisen…
Morrn, Luc :-?
AW: so ist es ...
24.05.2018 13:11:03
neopa
Hallo Luc,
... meine "Vision" sollte auch nur zur etwas besseren Verdeutlichng meiner Wunschvorstellungen Dir gegenüber dienen. Das diese nicht realisiert werden, war und ist mir auch schon klar, sind diese doch zu speziell und außerdem auch meineserachtens nicht wirklich notwendig.
Gruß Werner
.. , - ...
Na, dann sind wir uns ja weitgehend einig! ;-) owT
24.05.2018 22:47:57
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige