Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1352to1356
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

Vektor aus einer Matrix komplett übergeben

Vektor aus einer Matrix komplett übergeben
14.03.2014 13:59:43
Frank
Hallo an Alle,
ich habe ein 2 spaltiges Array xyTestarray(1 to 2000, 1 to 2). Nun rufe ich innerhalb meines Codes eine Funktion auf und möchte den Vektor 1 (Spalte 1 des Arrays) und den Vektor 2 (Spalte 2 des Arrays) an die Funktion übergeben
Testfunktion (x, y)
ich weiß gerade nicht wie die Syntax für die komplette Spalte 1 ist?
Könnte mir da bitte jemand kurz auf die Sprünge helfen?
Vielen Dank und viele Grüße
Frank

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
WorksheetFunction.Index(Testarray, 0, 1)
14.03.2014 14:06:11
ransi
Hallo
Entweder du schaufelst um in ein anderes Array oder du machst es so:
Option Explicit

Sub machs()
    Dim Testarray As Variant
    Testarray = Range("A1:B2000")
    MsgBox Testfunction(WorksheetFunction.Index(Testarray, 0, 1), WorksheetFunction.Index(Testarray, 0, 2))
End Sub


Function Testfunction(x, y)
    Testfunction = True
End Function



Etwas anderes kenne ich nicht.
ransi

Anzeige
AW: WorksheetFunction.Index(Testarray, 0, 1)
14.03.2014 14:20:05
Frank
Hallo Ransi :o),
das funktioniert - super vielen Dank. Könnte ich das auch verwenden wenn ich einen Vektor in eine Matrix übergeben möchte? Zur Zeit mache ich das über eine For Next Schleife und zwar so.
For i = 1 To xAnz
Matrix(i, 1) = x(i)
Matrix(i, 2) = y(i)
Next

Das ist eben die ganze Eselei, stets und ...
14.03.2014 14:43:42
Luc:-?
…ständig n-dimensionale VBA-Arrays anstelle eines Variants mit Arrays zu verwenden, Frank;
n-dimensionale Arrays kann man nur mit wf.Index oder Umschaufeln splicen — wie es Ransi gezeigt bzw angedeutet hat. Also ist es auch sehr unpraktisch, andersherum eine n-dimensionale Matrix aus VektorElementen aufzubauen. Bau' sie doch gleich aus Vektoren auf, dann kannst du die nachher auch wieder ganz einfach isolieren. Lasse also die Elemente eines 1dimensionalen(!) HptVektors durchlaufen und füge in jedes dieser Elemente einen 1dimensionalen Vektor ein. Man erhält dadurch die allgemeine 2× 1dimensionale Matrix X[x(0)(0)…x(m)(n)], wobei x(i) einen Vektor, x(i)(j) sein Element repräsentiert. So etwas kann auch in Xl abgebildet wdn, wenn die 1Dimensionalität aller beteiligten Vektoren garantiert ist. Das wäre sie nicht bei Spaltenvektoren, denn die sind auch in VBA stets 2dimensional. Der HptVektor wird unter diesen Voraussetzungen übrigens automatisch vertikal orientiert, was letztlich auch die einzige Möglichkeit wäre, in VBA einen vertikalen 1dimensionalen Vektor zu erzeugen. Der wäre es dann allerdings 2×, also eigentlich auch eine Matrix X[x(0)(0)…x(m)(0)].
Darüber haben Andere und ich übrigens schon des öfteren hier und anderswo geschrieben. Viell solltest du auch mal das Archiv bemühen, mögliche Stichworte Variant mit Array, Arrays in Arrays.
Gruß Luc :-?

Anzeige
AW: Das ist eben die ganze Eselei, stets und ...
14.03.2014 15:06:31
Frank
Hallo Luc,
auch heute wieder ein großes Danke schön für deine umfangreiche Antwort. Ich habe die Suche verwendet, allerdings andere Stichworte verwendet als du vorgeschlagen hast.
Ich verstehe nicht was du damit meinst anstelle eines Variants mit Arrays zu verwenden?
Und mir ist auch nicht klar, wenn man so viel mit Arrays arbeitet oder anscheinend nicht arbeiten soll, wieso es solche Funktionen zum Übergeben von Vektoren etc. in VBA bereit gestellt werden. Ich fand so ein Array eigentlich immer eine tolle Sache.
Schließe ich richtig aus deinen Worten, dass der "echte" 1-dimensionale Vektor horizontal verläuft?
Wenn ich eingebe Dim a(1 to 20) dann sieht das für mich auch wie ein 1-dimensionaler vertikaler Vektor aus oder nicht.

Anzeige
Nee, in VBA kann ein 1dimensionaler Vektor ...
14.03.2014 15:23:50
Luc:-?
…stets nur horizontal sein (unechte Ausnahme hatte ich erwähnt), Frank,
das hast du richtig herausgelesen. Wie sollte VBA sonst zwischen vertikal und horizontal unterscheiden können? Diese Unterscheidung ist aber für bestimmte Berechnungen wichtig! Xl basiert hingegen grundsätzlich auf Matrizen, deshalb ist jeder Vektor dort 2dimensional. ZeilenVektoren wdn aber idR in VBA automatisch an 1Dimensionalität angepasst, zumindest dann, wenn man (2×) wf.Transpose einsetzt.
Das mit der „Eselei“ hast du falsch verstanden. Es geht nicht darum, Arrays nicht einzusetzen, sondern um die Verwendung des für den jeweiligen Verwendungszweck geeigneteren Typs, denn es gibt 2. Bekannt ist idR aber nur der, den du auch verwendest. Wie der andere (der dem in den meisten PgmierSprachen verwendeten Array-Objekt am ehesten entspricht) aussieht, hatte ich dir beschrieben.
Luc :-?

Anzeige
AW: Nee, in VBA kann ein 1dimensionaler Vektor ...
14.03.2014 15:52:10
Frank
Luc, Besten Dank... Ich verstehe und versuche alles umzusetzen bzw. deine/eure Worte zu berücksichtigen.
Als letztes für heute... Ich habe dennoch gerade den Befehl von Ransi zu verwenden, sprich einen Vekor ohne eine Schleife an ein Array zu übergeben, aber das funzt so anscheinend nicht.
Matrix(i, 1) = WorksheetFunction.Index(x, 0, 1)
Ist das weil i sozusagen Zeilenweise ist und x ein vertikaler Vektor? Oder verdrehe ich da gerade wieder was?

Das willst du doch nicht wirklich, ...
14.03.2014 17:46:09
Luc:-?
…Frank! ;-]
Matrix(i, 1) = WorksheetFunction.Index(x, 0, 1) bewirkt, dass jedem Element z(i) der 1.Spalte von Matrix alle Zeilen der 1.Spalte der Matrix x übergeben wdn. Da Matrix aber kein 1dimensionaler Vektor ist, kann dieses, nebenbei, sinnlose Ergebnis zwar mit VBA ausgewertet, aber nicht auf einen Xl-ZellBereich abgebildet wdn. (Ransi hatte da auch etwas Anderes geschrieben!)
Was soll denn genau dabei rauskommen? Davon hängt schließlich ab, was getan wdn kann. Bisher ging ich davon aus, dass 2 Vektoren zu einer (neuen) Matrix vereinigt wdn sollen. Das ginge dann für 2 Spalten einer Matrix x zB so:
Dim Matrix As Variant, wf As WorksheetFunction
Set wf = WorksheetFunction: ReDim Matrix(1)
For i = 0 To 1
Matrix(i) = wf.Transpose(wf.Index(x, 0, i + 1))
Next i
Oder für 2 Zeilen …
For i = 0 To 1
Matrix(i) = wf.Index(x, i + 1, 0)
Next i
Man könnte hier aber auch …

Matrix(0) = wf.Transpose(wf.Index(x, 0, 1))
Matrix(1) = wf.Transpose(wf.Index(x, 0, 2))
   bzw …
Matrix(0) = wf.Index(x, 1, 0)
Matrix(1) = wf.Index(x, 2, 0)


…schreiben, wobei es natürlich auch noch ganz darauf ankommt, welche Zeilen bzw Spalten von x ausgewählt wdn sollen. Das muss bei i (bzw seinem Vielfachen) natürlich auch berücksichtigt wdn.
Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige