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

VBA Matrix Function Ausgabe funktioniert nicht

VBA Matrix Function Ausgabe funktioniert nicht
gothino
Hallo zusammen,
habe eine Matrix-Funktion in VBA programmiert, also eine Funktion die ein Datenfeld ausgeben soll und daher mit Strg+Alt+Enter eingegeben wird.
Ausgegeben werden soll das Datenfeld Resultvector(1 to xn), ausgegeben wird aber immer nur genau der erste Wert Resultvector(1). Interessanterweise habe ich früher mal eine Matrixformel nach genau demselben Schema programmiert die auch funktioniert. Hier die wichtigsten Teile des Codes, hat jemand eine Ahnung wo das Problem liegt
Danke und lg
gothino

Function CubSplineInter(X_v As Object, Y_v As Range, X As Range)
xn = X.Rows.Count
Dim Resultvector
ReDim Resultvector(1 To xn)
for i = 1 to xn
Resultvector(i) = ...
next i
CubSplineInter = Resultvector
End Function

In welche Richtung wählst du denn den ...
22.10.2011 23:25:13
Luc:-?
…Bereich für den Vektor aus, Gothino?
Versuch doch einfach mal die andere… ;-)
Gruß+schöSo, Luc :-?
AW: In welche Richtung wählst du denn den ...
23.10.2011 14:01:41
gothino
Hallo Luc,
wenn du damit den Bereich in der Excel-Tabelle meinst, es ist ganz egal ob ich von oben nach unten, unten nach oben, links nach rechts oder rechts nach links befülle, Ergebnis ist immer nur eine Zahl
lg
gothino
vergiss den Quatsch mit der Richtung,
23.10.2011 19:56:56
Tino
Hallo,
die Rückgabe ist doch nur ein eindimensionales Array.
Als Rückgabe bekommst Du doch ein eindimensionales Array (Resultvector),
wobei ich der Meinung bin Resultvector müsste als Array deklariert werden und
nicht nur als Variant, also Dim Resultvector().
Nun weil Du ja schon ein Array zurückbekommst,
braucht es ja nicht nochmal mit Strg+Shift+Enter abgeschlossen werden,
wie z. Bsp. bei SUMMENPRODUKT ist ja schon eine Matrix- Formel.
Ich meine Du müsstest diese Rückgabe in einer Formel verwenden
die mit einer Matrix umgehen kann, z.Bsp. Index.
=Index(CubSplineInter(?,?,?);1)
=Index(CubSplineInter(?;?;?);2)
usw.…

Die ? stehen für die Daten die Du an die Function CubSplineInter übergibst.
Gruß Tino
Anzeige
Selten so'nen Quatsch gelesen!
24.10.2011 01:55:47
Luc:-?
Hi, Gothino,
lass dir von Tino nichts weismachen, denn …
1. die Rückgabe ist doch nur ein eindimensionales Array
Wieso?

ReDim Resultvector(1 To xn)
For i = 1 To xn
Resultvector(i) = …
Next i
CubSplineInter = Resultvector
…ist doch eindeutig ein Datenfeld, dass in dieser Form als 1dimensionaler horizontaler Vektor daherkommt, weshalb ich nach der Auswahlrichtung fragte. Es gibt nebenbei noch eine Variante als 1zeiliger, aber trotzdem 2dimensionaler HorizontalVektor (Range). Außerdem sind alle VertikalVektoren in Xl/VBA stets 2dimensional.
2. wobei ich der Meinung bin Resultvector müsste als Array deklariert werden und nicht nur als Variant, also Dim Resultvector()
Kann man machen, ist aber nicht unbedingt erforderlich.
3. weil Du ja schon ein Array zurückbekommst, braucht es ja nicht nochmal mit Strg+Shift+Enter abgeschlossen werden, wie z. Bsp. bei SUMMENPRODUKT ist ja schon eine Matrix- Formel
Ganz, ganz falsch! Gerade deshalb muss es als Matrixfml abgeschlossen wdn! Der Vgl mit SUMMENPRODUKT hinkt außerordentlich, denn das soll ja nur einen Wert liefern und ist dementsprechend programmiert.
4. =Index(CubSplineInter(?,?,?);1) → Was soll denn dabei rauskommen? Mit Sicherheit nur ein Wert und das ist ja wohl gar nicht gewollt! Und jede Zelle einzeln mit dieser Fml bei flfd Zeilenindex zu füllen ist so was von umständlich und unelegant …
Fazit: An Tino: „Schuster bleib bei deinen Leisten!” Von udF-Programmierung scheinst du viel zu wenig Ahnung zu haben, deshalb hier mal zum Üben die abgespeckte Variante …

Function CubSplineInter(X As Range)
Dim Resultvector, xn As Long, i As Long
xn = X.Rows.Count
ReDim Resultvector(1 To xn)
For i = 1 To xn
Resultvector(i) = i
Next i
CubSplineInter = Resultvector
End Function
Da kannst du dann gerne auch noch 'nen Timer einbauen! :->>
Viel Erfolg, Gothino!
Gruß Luc :-?
Anzeige
nun ist er genau so weit wie zuvor oT.
24.10.2011 09:59:41
Tino
Na und! Mehr hast du nicht zu sagen! Wo...
24.10.2011 18:28:47
Luc:-?
…wird denn deiner Meinung nach der Fehler liegen, wenn er sonst alles so gemacht hat wie er selbst schreibt? Na! Ich sag's dir, genau da →…←! Wir können beide nichts dafür, wenn weder ordentlich deklariert noch getestet wird, indem bspw ein Haltepkt auf Next gesetzt wird, denn wahrscheinl wird der Außenzyklus nur 1x durchlaufen → ggf wg Fehlerabbruch oder er hat wirklich in Arg3 nur 1 einzige Zelle angegeben. Aber dann sollte ihm mein Übungsbsp schon weiterhelfen — ganz im Ggteil zu deinen dilettantischen Äußerungen… :->>
Luc :-?
AW: Na und! Mehr hast du nicht zu sagen! Wo...
24.10.2011 20:31:46
gothino
Hallo Tino,
Luc hat wohl recht, du liegt da ziemlich daneben, aber trotzdem danke für den Hilfsversuch.
@Luc: der Fehler liegt nicht im "....", ich habe natürlich Haltepunkte gesetzt und mir angeschaut wie die Datenfelder gefüllt werden.
In der letzten Zeile
CubSplineInter = Resultvector
ist Resultvector ein mit Zahlen befülltes Array der Dimension 1 bis xn,
dieses Array wird problemlos auf CubSplineInter übertragen, aber ausgegeben wird immer nur der erste Wert der sich im Array befindet, und zwar für alle Zellen für die ich die Funktion mit Strg+Alt+Enter anwende
lg
gothino
Anzeige
AW: Du hast den {}-Kram...
24.10.2011 20:53:20
Gerd
in der Tabelle aber schon von links nach rechts gezogen, Gothino?
AW: Du hast den {}-Kram...
24.10.2011 21:21:04
gothino
Hallo Gerd, hab deine Antwort gar nicht gesehen,
Jetzt funktionierts plötzlich wenn ichs von links nach rechts ziehe, danke. Ist zwar nicht so gedacht, aber dann muss ich entweder mit MTRANS() arbeiten oder ich versuch nochmal den Resultvektor als
REsultvector(1 to n, 1 to 1) zu definieren, glaube dann soltle es mit der vertikalen Ausgabe klappen
danke und lg
gothino
MTRANS kannst du auch innerhalb deiner UDF...
25.10.2011 00:15:43
Luc:-?
…anwenden (WorksheetFunction.Transpose), Gothino,
ich mache dass auch mitunter. Dabei frage ich aber vorher die Auswahlrichtung ab, um flexibel zu bleiben.
Gruß Luc :-?
Anzeige
AW: MTRANS kannst du auch innerhalb deiner UDF...
25.10.2011 19:54:16
gothino
Das ist natürlich noch besser, thx
Bitte sehr! ;-) Gruß owT
25.10.2011 22:44:44
Luc:-?
:-?
hier ein Beispiel
24.10.2011 21:30:46
Tino
Hallo,
ich weiß ja nicht was Du mit dieser Funktion machen willst.
Hier mal ein dummes Beispiel wie ich es gemeint habe.
https://www.herber.de/bbs/user/77162.xls
Gruß Tino
AW: VBA Matrix Function Ausgabe funktioniert nicht
24.10.2011 21:52:28
Gerd
Hallo!
Oder sowas in der Art? Man weis es (noch) nicht so genau.

Function CubSplineInter(X As Range)
Dim Resultvector, xn As Long, i As Long
xn = X.Rows.Count
ReDim Resultvector(1 To xn)
For i = 1 To xn
Resultvector(i) = i
Next i
CubSplineInter = WorksheetFunction.Index(WorksheetFunction.Transpose(Resultvector), 0)
End Function
Gruß Gerd
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige