myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   VBA Array (https://mygully.com/showthread.php?t=2298279)

gymnozist 03.05.11 16:19

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

das_kindlein_schreit 03.05.11 16:28

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 und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Xalir 03.05.11 16:30

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.

das_kindlein_schreit 03.05.11 16:52

... äh ...

gymnozist 03.05.11 16:57

Alles klar. Besten dank. Diesen redim-Befehl kannt ich zwar, aber ohne das preserve brachte der mir nichts.
Jetzt sollte das klappen

sivro 03.05.11 17:09

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.