Office: Benutzerdefinierte Matrixfunktion (function) mit integrierten Arrayfunktionen

Helfe beim Thema Benutzerdefinierte Matrixfunktion (function) mit integrierten Arrayfunktionen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo liebe Forumsmitglieder, nachdem ich nun schon einige Stunden nach einer Lösung im Netz und im Forum gesucht und selbst einiges probiert habe,... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Germanux, 6. Februar 2017.

  1. Benutzerdefinierte Matrixfunktion (function) mit integrierten Arrayfunktionen


    Hallo liebe Forumsmitglieder,

    nachdem ich nun schon einige Stunden nach einer Lösung im Netz und im Forum gesucht und selbst einiges probiert habe, wende ich mich nun mit folgender Frage an euch:

    Wie ist die Struktur einer VBA-Funktion, die in Excel als benutzerdefinierte Funktion (Function) zur Verfügung gestellt werden soll und vom Typ einer Matrixformel (Arrayformel) ist und sich zugleich Matrixfunktionen im Funktionsablauf bedient? Mein Ziel ist es, mit solchen Funktionen Vektoroperationen (Verktorrechnung) einfach und kurz umzusetzen.

    Im Grunde genommen geht es also um den Eigenbau einer Arrayfunktion wie MMult o.ä.. Ich suche hier nach einer Lösung, bei der kein "Sub" sondern eine "Function" verwendet wird. Mit der Anforderung, dass Matrixfunktionen im Funktionsablauf verwendbar sind, scheidet ebenso eine Lösung mit der Abarbeitung durch Schleifen aus, siehe http://www.*************************417558_0_0_asc.php und http://www.*************************512710_0_0_asc.php.

    Ist der Zielbereich eine einzelne Zelle (also ein Skalar=Array mit 1x1), so klappt die Ausgabe. Nachfolgend habe ich die Berechnung der euklidische Norm eines Verbindungsvektors umgesetzt. Bereich1 hat z.B. 3 Zellen, die den Ortsvektor zu Punkt1 darstellen und Bereich2 für Punkt2.

    Code:
    Sobald als Ergebnis allerdings nicht mehr nur eine Zelle zu füllen ist, komme ich nicht mehr weiter!

    Für das Verständnis des Aufbaus einer solchen Funktion soll als erstes einfach nur eine reine Werteübertragung ohne mathematische Rechenoperation erfolgen:
    der Inputbereich in Excel sei z.B. A1=1; A2=2; A3=3. Wie muss die Funktion aussehen, dass sie diese Werte in einen Ausgabebereich durchreicht?
    Achtung, diese Funktion soll ein Grundbeispiel sein, im nächsten Schritt sollen natürlich irgendwelche Operationen wie Vektoraddition, Skalarprodukt, Kreuzprodukt und Transformationen umsetzbar sein.

    Rein in Excel habe ich das Durchreichen via Matrix wie folgt hinbekommen:
    Excel-Schritt 1: händisch B1 bis B3 selektieren
    Excel-Schritt 2: in Zelle (also 'F2' drücken) den Operanden 'Gleich' also = einfügen
    Excel-Schritt 3: A1 bis A3 selektieren
    Excel-Schritt 4: "STRG+Gr+Enter" drücken

    Wie muss das Grundgerüst für VBA aussehen?

    Versuche mit "Evaluate" im Code haben mich nicht weiter gebracht, da bei diesem Ansatz dann die benutzerdefinierte (VBA-)Funktion nicht als "Blackbox" in Excel zur Verfügung steht, sondern nur Excel-Funktionen in die Zellen geschrieben werden (VBA übernimmt automatisiert Schreibarbeit). Ebenso wenig bin ich mit FormularArray weiter gekommen. Hier mein bisherigeres nicht funktionierendes Gerüst:

    Code:
    Vielen Dank für eure Tips

    :)
     
    Germanux, 6. Februar 2017
    #1
  2. Hallo ,

    neben der Frage, warum Du Dich mit diesen Randbedingungen vieler Möglichkeiten beraubst: Dir ist klar, dass UDFs, genauso wie normale Formeln, nur Ergebnisse in die Zellen ausgeben können, aus denen sie selbst aufgerufen werden? Eine UDF in A1 kann also kein Ergebnis in B1 ausgeben.

    Heißt: Ist der benötigte Ausgabebereich größer als eine Zelle, muss die UDF als Matrixfunkion aus einem Bereich passender Größe aufgerufen werden.

    Du musst zudem prüfen, wie der aufrufende Bereich (in dem die Formel steht) ausgerichtet ist und wie das Ergebnis Deiner Berechnung. Ggf. musst Du transponieren.

    Mach eine Mustermappe mit Beispieldaten, anzuwendender Excelformel und (ggf. händischer) Darstellung des Ergebnisses fertig. Ich mag mir nämlich keine Mathetheorie reinpfeifen, um ein an sich triviales Problem zu lösen.

    Da ich nicht sicher bin, ob ich den Sinn Deiner Worte richtig verstehe, sage ich nichts dazu, glaube aber, dass Du Dich irren könntest.

    Grüße
    EarlFred
     
    EarlFred, 7. Februar 2017
    #2
  3. 2 schnell getippte Functions anbei:

    GibBereichWider ist das gewünschte Beispiel,
    RechneWas eine weitere Anwendungsmöglichkeit mit Evaluate()

    Code:
    Beachte die Hinweise aus meinem ersten Beitrag:
    Formel für
    Code:
    Grüße
    EarlFred
     
    EarlFred, 7. Februar 2017
    #3
  4. Benutzerdefinierte Matrixfunktion (function) mit integrierten Arrayfunktionen

    Tomaten auf den Augen und dann noch 10x Copy&Paste des Tippfehlers: Wiedergeben schreibt sich selbstredend immer noch mit IE.
     
    EarlFred, 8. Februar 2017
    #4
  5. ..und was sonst noch an Fragen aufkommen kann (gilt für Rückgabewerte von Evaluate und manch andere Fälle, wenn auch nicht immer...Die Rückgabe kann je nach Art der verwendeten Methode und der Ergebnisform abweichen):

    Wird ein Array mit einer oder mehr Spalten ("senkrecht" bzw. "Bereich") zurückgegeben, so hat dies 2 Dimensionen (1. Dimension = Zeile, 2. Dimension = Spalte), wird ein Array mit einer Zeile ("waagerecht") zurückgegeben, so hat dies 1 Dimension (gilt z. B. nicht beim Abgreifen von Bereichswerten über Range.Value).
    Ist das Ergebnis ein einzelner Wert, ist die Rückgabe ein einfacher Wert, also kein Array.

    Entsprechendes musst Du in der Function prüfen, sofern die Form des zurückgegebenen Arrays nicht vorausgesetzt werden kann.
    Hilfreich dabei:
    - IsArray(Rückgabe)
    - Ubound(Rückgabe,2) mit Fehlerbehandlung ins Leere laufen lassen, da Anzahl der Dimensionen nicht anders feststellbar (oder mir nicht bekannt)

    Du kannst dann wahlweise verschieden auf die Ausgabe reagieren oder die Rückgabe in ein selbsdefiniertes 2D-Array passender Größe umlagern (mit von Dir unerwünschten Schleifen).

    Aber all das schaffst Du sicher alleine. Ist kein Hexenwerk.
     
    EarlFred, 8. Februar 2017
    #5
Thema:

Benutzerdefinierte Matrixfunktion (function) mit integrierten Arrayfunktionen

Die Seite wird geladen...
  1. Benutzerdefinierte Matrixfunktion (function) mit integrierten Arrayfunktionen - Similar Threads - Benutzerdefinierte Matrixfunktion function

  2. Benutzerdefinierte Spalte anhand von Bedingungen in Powerquery

    in Microsoft Excel Hilfe
    Benutzerdefinierte Spalte anhand von Bedingungen in Powerquery: Hallo zuammen, ich habe eine Beispieldatei angehängt. Ich habe Rohdaten mit mehreren Spalten. Spalte "Text" ist jedoch unvollständig. Die unvollständigen Zellen möchte ich via Powerquery...
  3. Benutzerdefiniertes Sortieren nach eigener Liste funktioniert nicht

    in Microsoft Excel Hilfe
    Benutzerdefiniertes Sortieren nach eigener Liste funktioniert nicht: Hallo zusammen, ich erstelle eine etymologische Datenbank zu einer Sprachgruppe in Nigeria. Die Spalte "SORTIEREN" soll dabei nach dem unten angegebenen Muster benutzerdefiniert sortiert werden....
  4. Text automatisch in benutzerdefinierte Zelle integrieren

    in Microsoft Excel Hilfe
    Text automatisch in benutzerdefinierte Zelle integrieren: Hallo zusammen, ich habe eine mehrseitiges Excel-Tabellenkalkulation zum Kalkulieren und zum Erstellen von Angeboten erstellt. Nun Möchte ich, dass der in einer Zelle im Tabellenblatt eingetragene...
  5. Pluszeichen bei pos. Werten mit benutzerdef. Formaten in markiertem Bereich voranstellen

    in Microsoft Excel Hilfe
    Pluszeichen bei pos. Werten mit benutzerdef. Formaten in markiertem Bereich voranstellen: Hallo zusammen, ich habe folgendes Problem: Ich möchte in hunderten Tabellen bzw. tausenden Zellen positiven Werten ein "+"-Zeichen voranstellen (also z.B. "+0,4" statt "0,4") und würde das...
  6. Benutzerdefinierte Symbolleiste aus alter Version(mdb) in neuer Version

    in Microsoft Access Hilfe
    Benutzerdefinierte Symbolleiste aus alter Version(mdb) in neuer Version: Hallo, ich habe eine benutzerdefinierte Symbolleiste aus einer alten AccessVersion(mdb) in einer neuen Verision, soweit, so gut. Habe mitlerweile raus, dass diese unter AddIn zu finden sind und...
  7. Einfärben, wenn Wert benutzerdef. formatiert und positiv

    in Microsoft Excel Hilfe
    Einfärben, wenn Wert benutzerdef. formatiert und positiv: Hallo zusammen, folgendes Problem: eine Zelle soll immer dann eingefärbt werden, wenn der Wert darin positiv ist UND GLEICHZEITIG eine bestimmte benutzerdefinierte Formatierung hat (und zwar das...
  8. Benutzerdefiniertes Format auslesen und in andere Spalte nutzen

    in Microsoft Excel Hilfe
    Benutzerdefiniertes Format auslesen und in andere Spalte nutzen: Moin allerseits, folgendes Szenario: In einem Workbook füge ich per VBA und Userform neue Tabellen ein, die sowohl den Code aus der Vorlage, aber auch die Formatierung der Spalten kopieren sollen....
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden