Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
928to932
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
928to932
928to932
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA: zweidimensionale Variablen (Array)

VBA: zweidimensionale Variablen (Array)
02.12.2007 10:13:28
Dirk
Hallo,
ich verzweifle gerade an einem (eher leichten) VBA-Problem:
irgendwas stimmt an der unteren Schleife nicht(relevanter Code-Ausschnitt); VBA kompiliert zwar, aber die Berechnung im Excel-Sheet funktioniert nicht: #WERT!)
Ich erläre kurz, was ich mit dieser Schleife bezwecken will. zz soll eine zweidimensionale Variable sein:
zz (i, j). Dieser Variablen sollen in zwei verschachtelten Schleifen (äußere Schleife i, innere Schleife j) die jeweiligen Werte zugewiesen und erst mal dort (bei zz(i, j) ) abgelegt werden . Diese berechneten Werte heißen zi (1. Dimension) bzw. zj (2. Dimension). Diese wurden zuvor jeweils aus ui bzw uj berechnet ("InvNorm" ist eine zuvor definierte benutzerdef. Funktion). kn und ks snd eigtl. nur Konstanten. Das Besondere ist eben nur, dass ui und damit auch zi von i bzw. number_of_paths abhängt und uj bzw. zj von j bzw. steps_per_path. Wenn ui und uj von einer einheitlichen Größe abhängen würde (z.B. von number_of_paths) , wäre es leicht. Hoffentlich kann mir jemand helfen.
ReDim zz(1 To number_of_paths, 1 To steps_per_path)
ui = 0
uj = 0
For i = 1 To number_of_paths
ui = (i - 1 + kn) / number_of_paths
zi = InvNorm(ui)
For j = 1 To steps_per_path
uj = (j - 1 + ks) / steps_per_path
zj = InvNorm(uj)
zz(zi, zj) = Array(zi, zj)
Next j
Next i
Vielen Dank vorab!!!!
Dirk

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: zweidimensionale Variablen (Array)
02.12.2007 14:42:56
Daniel
Hi
woher nimmst du die gewissheit,daß der Fehler in diesem Abschnitt des Codes liegt?
was machst du im Anschluss mit der Array-Variable ZZ ?
bei der Weiterverarbeitung solltest du ggf bedenken, daß jeder Einzelwert von ZZ kein Wert, sondern selbst wieder ein eindimensionales Array-Feld mit 2 Werten ist.
Sollte die Zeile, in der die Werte zugewiesen werden, nicht besser so aussehen:

zz(i, j) = Array(zi, zj)


Gruß, Daniel

AW: VBA: zweidimensionale Variablen (Array)
02.12.2007 14:48:00
Harry
Hallo Dirk,
ich weiß nicht, ob ich dein Problem richtig verstanden habe bzw. ich verstehe die dahinterstehende Aufgabenstellung nicht. Die Syntax ist prinzipiell richtig, aber:
1. Du arbeitest nicht mit einem 2-dimensionalen Array, sondern mit einem 3-dimensionalen
Du definierst zwar zz(1 to.., 1 to..) grundsätzlich 2-dimensional, aber durch die Zuweisung

zz(zi, zj) = Array(zi, zj)


wird jedem dieser Felder statt eines Wertes ein Array zugeweisen.
2. Ist dies so dein Wunsch? Wenn ja, was ist dein Problem? Der Zugriff auf ein einzelnes Element
Falsch sind


Dim a as integer
a=zz(1,2) 'Falsch, da hier ein ganzes Array zugewiesen würde
oder
Range("A1")=z(3,4) 'Falsch, da hier ein ganzes Array zugewiesen würde 


Korrekt wäre


Dim a as integer
a=zz(1,2)(0) 'zi-Wert des Feldes deines 2-dim. Array's
oder
Range("A1")=z(3,4) 'zj-Wert des Feldes deines 2-dim. Array's


Ich lass mal offen, falls ich dich mißverstanden habe.
Gruß
Harry

Anzeige
AW: VBA: zweidimensionale Variablen (Array)
02.12.2007 16:13:00
Dirk
Hallo zusammen,
ich wollte eigentlich nur die jeweiligen zi's der ersten Schleife als erste Dimension und die zj's der zweiten inneren Schleife als zweite Dimension in der zz-Variablen ablegen. Das war's schon. Aber wie geht das?
Bsp.: i = 1 to 2; die daraus resultierenden zi-Werte lauten 5 (für i=1) und 8 (für i=2).
Für die zi's gibt's eine Formel (vgl. Code).
j = 1 to 3; die daraus resultierenden zj-Werte lauten z.B. 3 (für j=1), 6 (für j=2) und 11 (für j=3).
Für die zj's gibt's eine Formel (vgl. Code).
So, und jetzt hätte ich gerne 2 x 3 = insges. 6 zz-Werte (und zwar als Array-Variable):
1) zz(1,1) = (5,3)
2) zz (1,2) = (5,6)
3) zz(1,3) = (5,11)
4) zz(2,1) = (8,3)
5) zz(2,2) = (8,6)
6) zz(2,3) = (8,11).
Nicht mehr und nicht weniger!
Wie bekomme ich nun diese zweidimensionale Variable (wie oben dargestellt) in meinem Original-Beispiel-Code gefüttert?
PLEASE HELP ME!!!
Gruß
Dirk

Anzeige
AW: VBA: zweidimensionale Variablen (Array)
02.12.2007 16:17:00
Dirk
Sorry, die Frage ist natürlich noch offen!

AW: VBA: zweidimensionale Variablen (Array)
02.12.2007 16:20:00
Daniel
Hi
dimensionier ZZ als das was es ist, ein 3-dimensionales Array-Feld und bau den Code so um:
ReDim zz(1 To number_of_paths, 1 To steps_per_path, 1 to 2)
ui = 0
uj = 0
For i = 1 To number_of_paths
ui = (i - 1 + kn) / number_of_paths
zi = InvNorm(ui)
For j = 1 To steps_per_path
uj = (j - 1 + ks) / steps_per_path
zj = InvNorm(uj)
zz(i, j, 1) = zi
zz(i, j, 2) = zj
Gruß, Daniel

AW: VBA: zweidimensionale Variablen (Array)
02.12.2007 16:32:00
Dirk
Hallo Daniel,
danke für deinen Vorschlag. Aber wenn du dir mein Beispiel von vorhin anschaust, dann sind es doch eigentlich nur 2 Dimensionen (i und j). Als solche soll sie im weiteren Verlauf dann auch nochmals verwendet werden , da gibt's dann nochmals eine j-Schleife und eine äußere i-Schleife.
Wieso muss ich denn hier eine (fiktive) dritte Dimension verwenden? Diese kommt doch im Beispiel auch nicht vor. Oder geht das wirklich nicht anders?
DANKE!
Gruß
Dirk

Anzeige
AW: VBA: zweidimensionale Variablen (Array)
02.12.2007 16:34:06
Dirk
Frage ist noch offen.

AW: VBA: zweidimensionale Variablen (Array)
02.12.2007 16:36:28
Daniel
Hi
es kommt darauf an, was du haben willst.
soll die Einzelvariable ZZ(x,y) ein normaler Zahlenwert sein oder ein Array-Feld mit 2 Werten?
in deinem Eingangsbeispiel weist du ja den ZZ(x,y)-Werten ein Array-Feld zu, dadurch bringst du die 3. Dimension rein
Gruß, Daniel

AW: VBA: zweidimensionale Variablen (Array)
02.12.2007 16:47:00
Harry
Hallo Dirk,
Daniel hat im Parallelthread recht, vielleicht nur als Hinweis von mir

So, und jetzt hätte ich gerne 2 x 3 = insges. 6 zz-Werte (und zwar als Array-Variable):
1) zz(1,1) = (5,3)
2) zz (1,2) = (5,6)
3) zz(1,3) = (5,11)
4) zz(2,1) = (8,3)
5) zz(2,2) = (8,6)
6) zz(2,3) = (8,11).


Falsch, du hast hier nicht 6 zz-Werte, sondern 6 Wertpaare (UNTERSCHIED)
D.h. entweder du verhältst dich so, wie von mir oder Daniel vorgeschlagen, oder du kriegst nix vom Nikolaus.
Aber Alternative: Du hast keine 6 Werte, sondern im Beispiel nur 5, nämlich für zi nur 5 und 8 und für zj nur 3,6,11 und daraus resultieren 6 eindeutige Wertkombinationen.
Nimm also zwei 1-dimensionale Array's und fülle sie so


ReDim zzi(1 To number_of_paths)
ReDim zzj(, 1 To steps_per_path)
ui = 0
uj = 0
For i = 1 To number_of_paths
ui = (i - 1 + kn) / number_of_paths
zi = InvNorm(ui)
zzi(i)=zi
Next i
For j = 1 To steps_per_path
uj = (j - 1 + ks) / steps_per_path
zj = InvNorm(uj)
zzj(i)=zj
Next j

Dann kannst du alle Wertpaare über die Kombination zzi(x), zzj(y) abgreifen.
Dies entspricht inhaltlich dem bereits genannten zz(x,y)(0 oder 1).
Gruß
Harry

Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige