Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Arrayfunktion gibt immer nur den ersten Wert aus

Forumthread: Arrayfunktion gibt immer nur den ersten Wert aus

Arrayfunktion gibt immer nur den ersten Wert aus
09.03.2014 20:18:38
Frank
Hallo und guten Abend an Alle,
ich habe diesen Code für die Bestimmung von Polynomkoeffizienten gefunden. Wenn mann diese Fuction laufen lässt, dann ergeben sich im Debugmodus auch die richtigen Polynomkoeffizienten. Die Formel wird mit Strg+Shift+Enter abgeschlossen. Leider gibt die Arrayfunktion immer nur den ersten Wert aus. Kann mir jemand sagen wieso das so ist F29:F32?
https://www.herber.de/bbs/user/89601.zip
Vielen Dank und viele Grüße
Frank

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Arrayfunktion gibt immer nur den ersten Wert aus
09.03.2014 20:47:34
Uduuh
Hallo,
die Function kannst du nicht als Arrayformel eingeben. Du musst sie mit Index() auslesen.
F29: =Index(Polynomregrel(.....);Zeile(a1)) und runter kopieren.
Gruß aus’m Pott
Udo

AW: Arrayfunktion gibt immer nur den ersten Wert aus
09.03.2014 21:10:50
Frank
Hallo Udo,
vielen Dank für deine Hilfe. Besteht denn keine Möglichkeit den Code so zu ändern dass sie als Arrayformel verwendet werden kann, ohne das ich Index verwenden muss?
Vielen Dank und viele Grüße
Frank

Anzeige
AW: Arrayfunktion gibt immer nur den ersten Wert aus
09.03.2014 21:18:05
Frank
Der Autor selbst schreibt,
Die Funktion PolynomRegRel ist eine sog. Arrayfunktion .
Der Wert der ersten Resultatzelle kann direkt mit dem Funktionassistenten oder per Handeingabe
erfolgen. Die Eingabe wird normal abgeschlossen und wir erhalten in der Zelle den Koeffizienten  _
a0.
Nun wird das Feld für die Koeffizienten a0,..,an durch Selektieren der nachfolgenden Zellen  _
aufgezogen.
Dann wird die Eingabezeile mit der Formel oberhalb des Arbeitsblattes angeklickt und die Zeile  _
mit
 abgeschlossen. Die restlichen Koeffizienten werden jetzt in die markierten  _
Felder
übertragen. Die Formel im Zellenblock wird nachher in geschweiften Klammern dargestellt. Dies  _
zeigt an,
dass eine Arrayfunktion die Zellinhalte definiert. Ein Editieren im zellenblock ist noch mö _
glich,
jedoch muss die Eingabe immer mit CTL> in der Editorzeile unterhalb des Menüs  _
abgeschlossen
werden. Erfolgt das CTL> in der Zelle selbst, werden die restlichen Koeffizienten  _
nicht
angezeigt oder es wird ein Fehler ausgegeben.
Also bin ich davon ausgegangen, dass das möglich ist...

Anzeige
Das ist auch so, ...
09.03.2014 23:16:23
Luc:-?
…Frank! ;-]
Wie kommt ihr beide nur auf die Idee, dass ein Ergebnis aus mehreren Werten mittels einer MatrixFml zwingend einen vertikalen Vektor darstellt? ;->
Merke: Das normale 1dimensionale Vektor-Array ist in VBA stets horizontal orientiert - EinzelElement x(i)! Ein senkrecht orientiertes wäre entweder 2dimensional oder bestünde selbst aus 1elementigen Arrays. Nur Letztere sind auch 1dimensional möglich. Allerdings müsste ein einzelnes Element dann mit x(i)(j) statt x(i,j) - für j=0 - angesprochen wdn. Xl wäre das egal, es kann beide abbilden.
Wenn du also die Ergebnisse senkrecht untereinander ausgeben willst, musst du zusätzlich noch MTRANS einsetzen → etwas, auf das man binnen Sekunden kommen kann, wenn man nur über etwas Erfahrung mit MxFmln verfügt. So aber wird stets nur der 1.Wert wiederholt, was ein übliches Verhalten von Xl ist.
Übrigens, wenn sich die Ergebnisse einer Fkt mit INDEX auslesen lassen, können sie auch zusammen­hängend mittels MxFml dargestellt wdn, denn dafür ist die schließlich da. Einzige Ausnahme: Die Fkt gibt Bezüge auf unzusammenhängende ZellBereiche zurück. So etwas kann Xl nicht abbilden, aber weiterverarbeiten (direkt als Argument einer Fkt, die dazu imstande ist → alle xlFktt, die auch reine Daten-Arrays akzeptieren). INDEX müsste dann mit 4.Argument eingesetzt wdn, um diese Daten Areas-weise auszulesen. Ansonsten kann Xl nur rechteckige Matrizen direkt abbilden (Vektoren fallen für Xl auch darunter!).
Gruß Luc :-?

Anzeige
AW: Das ist auch so, ...
10.03.2014 21:50:08
Frank
Guten Abend Luc,
allerbesten Dank für deine ausführliche Erläuterung zu meinem Problem, das hat mir sehr weitergeholfen. Ich war heute leider den ganzen Tag unterwegs und komme erst jetzt dazu dir zu antworten. Ja, wie bin ich nur darauf gekommen bzw. nicht darauf gekommen das mal horizontal zu versuchen. Ich fand das vertikal halt irgendwie logisch und habe keinen Gedanken daran verschwendet es anders zu versuchen. Ich bastle jetzt in die Funktion die Transpose Funktion und dann sollte alles klappen.
Vielen Dank nochmal für deine Worte.
Viele Grüße
Frank

Anzeige
Die Funktion direkt zu verändern, ...
11.03.2014 04:01:07
Luc:-?
…Frank,
finde ich gar nicht gut. Sie erzeugt ja nur an einer Stelle einen Vektor, sonst an 2 Stellen Matrizen, bei denen es egal ist. Ich habe so etwas zwar auch manchmal in UDFs eingebaut, es dann aber von der Zellauswahlrichtung (nur bei Vektoren!) abhängig gemacht. Dazu muss man zuerst den Application.Caller feststellen (→abfragbarer Fehler, falls kein Objekt, hier also Zelle), dann nach .HasArray fragen und schließlich noch feststellen, ob seine Zeilen- oder Spaltenzahl =1 ist. Aber das ist auch nicht sonderlich zu empfehlen, wenn man unbedingt Zirkelbezüge vermeiden will bzw muss. Xl reagiert auf .Caller-Abfragen gern mit der entsprd Fehlermeldung.
Morrn, Luc :-?

Anzeige
AW: Die Funktion direkt zu verändern, ...
11.03.2014 14:58:18
Frank
Hallo Luc,
vielen Dank für deine erneute Antwort. Nun bin ich etwas verunsichert. Wenn ich eine andere Arrayfunktion verwende, dann liegt es in meinem Verantwortungsbereich ob ich einen Zellbereich überschreibe, so auch bei dieser Funktion. Oder habe ich dich falsch verstanden? Ich transponiere das einfach und gut ;o). Oder meinst du nicht?
Vielen Dank nochmal an dich.
Frank

Anzeige
Ja, in diesem Fall mit MTRANS in der Fml, ...
11.03.2014 15:24:23
Luc:-?
…Frank,
nicht aber direkt im PgmCode der UDF, worauf die Verwendung des OriginalFktsnamens (Transpose) durch dich schließen ließ. Der UDF-Autor hat sich ja auch was dabei gedacht.
Nebenbei, UDFs können normalerweise genauso wie StandardFktt in Zell- u.a. Fmln verwendet wdn (ggf auch als Argument einer geeigneten StandardFkt). Wobei und mit welchen Modalitäten hängt ganz allein von ihrer Pgmierung ab.
Gruß Luc :-?
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Problemlösungen für Arrayfunktionen in Excel


Schritt-für-Schritt-Anleitung

  1. Arrayfunktion eingeben: Verwende die Formel in der gewünschten Zelle. Stelle sicher, dass du die Eingabe mit Strg + Shift + Enter abschließt, um eine Arrayformel zu erstellen.

  2. Werte auslesen: Wenn du mehrere Werte aus einer Arrayfunktion benötigst, kannst du die INDEX-Funktion verwenden. Beispiel:

    =INDEX(Polynomregrel(...); Zeile(A1))

    Kopiere die Formel nach unten, um mehrere Werte zu erhalten.

  3. Transponieren der Ergebnisse: Wenn du die Ergebnisse vertikal darstellen möchtest, nutze die TRANSPOSE-Funktion. Beispiel:

    =TRANSPOSE(Polynomregrel(...))

    Schließe diese Eingabe ebenfalls mit Strg + Shift + Enter ab.


Häufige Fehler und Lösungen

  • Kein Array-Wert gefunden: Wenn du nur den ersten Wert der Arrayfunktion erhältst, stelle sicher, dass du die Formel korrekt als Arrayformel eingegeben hast. Verwende Strg + Shift + Enter.

  • Immer Array: Wenn die Funktion nicht als Arrayfunktion behandelt wird, überprüfe, ob die Eingabezeile korrekt ist und alle notwendigen Argumente vorhanden sind.

  • Falsche Verwendung von INDEX: Achte darauf, dass du die INDEX-Funktion korrekt anwendest, um die gewünschten Werte aus dem Array auszulesen.


Alternative Methoden

  • Direkte Verwendung von MTRANS: Wenn du die Funktion so anpasst, dass sie MTRANS enthält, kannst du die Ausgabe direkt in die gewünschte Form bringen:

    =MTRANS(Polynomregrel(...))
  • Verwendung von VBA: Für komplexere Berechnungen kannst du eine benutzerdefinierte Funktion (UDF) in VBA erstellen, die die gewünschten Werte verarbeitet und als Array zurückgibt.


Praktische Beispiele

  • Beispiel für die Verwendung von INDEX: Angenommen, du hast die Koefizienten in den Zellen F29 bis F32. Deine INDEX-Formel könnte so aussehen:

    =INDEX(Polynomregrel(...); Zeile(A1))

    Ziehe die Formel nach unten, um alle Werte zu erhalten.

  • Beispiel für die Transposition: Um eine horizontale Anordnung der Ergebnisse zu erhalten, nutze:

    =TRANSPOSE(Polynomregrel(...))

    Stelle sicher, dass du das Ergebnis als Arrayformel eingibst.


Tipps für Profis

  • Verwende MTRANS: Wenn du mit Matrizen arbeitest, kann MTRANS helfen, die Daten in die gewünschte Richtung zu bringen, ohne die Funktionalität zu verlieren.

  • Debugging: Nutze den Debugmodus, um zu sehen, welche Werte die Funktion zurückgibt und ob die Eingabewerte korrekt sind. So kannst du sicherstellen, dass kein Array-Wert verloren geht.

  • Dokumentation lesen: Informiere dich über die spezifischen Funktionen und deren Eigenschaften in der offiziellen Excel-Dokumentation, um das volle Potenzial auszuschöpfen.


FAQ: Häufige Fragen

1. Warum gibt die Arrayfunktion immer nur den ersten Wert aus?
Das kann passieren, wenn die Eingabe nicht korrekt als Arrayformel abgeschlossen wurde. Stelle sicher, dass du Strg + Shift + Enter verwendest.

2. Kann ich die Arrayfunktion ohne INDEX verwenden?
Ja, du kannst die Werte direkt transponieren oder eine andere passende Methode verwenden, um die gewünschten Ergebnisse zu erzielen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige