Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
03.05.11, 16:19
|
#1
|
Anfänger
Registriert seit: Jan 2010
Beiträge: 6
Bedankt: 0
|
VBA Array
Servus,
ich habe ein kleines Problem bei der vba-Programmierung mit excel.
Und zwar möchte ich Individuen in einer Population durch ein zweidimensionales Array darstellen.
In etwa so: Individuum(Anzahl-Individuen, Eigenschaften)
Mein Problem ist nun, dass zwar die Anzahl der Eigenschaften konstant vorgegeben ist, die Anzahl der Individuen allerdings variabel sein soll.
Wenn ich aber versuche Anzahl-Individuen mit etwas anderem als einer vorher als konstant festgelegten Zahl zu initialisieren sagt mir der debugger, dass ein konstanter Ausdruck erforderlich ist.
Kann man die Geschichte irgendwie lösen?
Besten Dank
|
|
|
03.05.11, 16:28
|
#2
|
Newbie
Registriert seit: Mar 2011
Beiträge: 62
Bedankt: 12
|
Zitat:
Code:
Dim Feld1() As Integer ' Dynamisches Datenfeld deklarieren.
Redim Feld1(5) ' 5 Elemente reservieren.
For I = 1 To 5 ' 5 Schleifendurchläufe.
Feld1(I) = I ' Datenfeld initialisieren.
Next I
Die nächste Anweisung ändert die Größe des Datenfeldes und löscht die Elemente.
Code:
Redim Feld1(10) ' Größe auf 10 Elemente ändern.
For I = 1 To 10 ' 10 Schleifendurchläufe.
Feld1(I) = I ' Datenfeld initialisieren.
Next I
Die nächste Anweisung ändert die Größe des Datenfeldes, löscht die Elemente jedoch nicht.
Code:
Redim Preserve Feld1(15) ' Größe auf 15 Elemente ändern.
|
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
|
|
|
03.05.11, 16:30
|
#3
|
Erfahrener Newbie
Registriert seit: Mar 2009
Beiträge: 154
Bedankt: 56
|
Ja, das kann man lösen. Dazu gibt es zwei Möglichkeiten.
Du dimensionierst Dein Array erstmal mit einer konstanten Größe und dann arbeitest Du mit ReDim Preserve, um das Array nachträglich zu ändern.
Oder Du nimmst eine Collection und fügst Deine Individuen dort hinzu. Ich weiß jetzt allerdings nicht genau, welche Collections von VBA direkt unterstützt werden.Google wird Dir dabei sicherlich helfen.
|
|
|
03.05.11, 16:52
|
#4
|
Newbie
Registriert seit: Mar 2011
Beiträge: 62
Bedankt: 12
|
... äh ...
|
|
|
03.05.11, 16:57
|
#5
|
Anfänger
Registriert seit: Jan 2010
Beiträge: 6
Bedankt: 0
|
Alles klar. Besten dank. Diesen redim-Befehl kannt ich zwar, aber ohne das preserve brachte der mir nichts.
Jetzt sollte das klappen
|
|
|
03.05.11, 17:09
|
#6
|
VB - VBA - Python
Registriert seit: Feb 2010
Beiträge: 29
Bedankt: 11
|
Also da er ein zweidimensionales Array möchte wäre das wohl die bessere Lösung:
Code:
Option Explicit
Option Base 1
Private Sub zweidimensionales_Array()
Dim astrNamen() As String
Dim lngZeile As Long, lngLZ As Long
Dim intSpalte As Integer
lngLZ = Cells(Rows.Count, 1).End(xlUp).Row
ReDim astrNamen(lngLZ, 2)
For lngZeile = 1 To lngLZ
For intSpalte = 1 To 2
astrNamen(lngZeile, intSpalte) = Cells(lngZeile, intSpalte)
Next intSpalte
Next lngZeile
For lngZeile = LBound(astrNamen) To UBound(astrNamen)
MsgBox astrNamen(lngZeile, 1) & " " & astrNamen(lngZeile, 2)
Next lngZeile
Erase astrNamen
End Sub
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 Uhr.
().
|