myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

VBA Array

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 03.05.11, 16:19   #1
gymnozist
Anfänger
 
Registriert seit: Jan 2010
Beiträge: 6
Bedankt: 0
gymnozist ist noch neu hier! | 0 Respekt Punkte
Standard 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
gymnozist ist offline   Mit Zitat antworten
Ungelesen 03.05.11, 16:28   #2
das_kindlein_schreit
Newbie
 
Registriert seit: Mar 2011
Beiträge: 62
Bedankt: 12
das_kindlein_schreit ist noch neu hier! | 0 Respekt Punkte
Standard

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 ]
das_kindlein_schreit ist offline   Mit Zitat antworten
Ungelesen 03.05.11, 16:30   #3
Xalir
Erfahrener Newbie
 
Registriert seit: Mar 2009
Beiträge: 154
Bedankt: 56
Xalir ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Xalir ist offline   Mit Zitat antworten
Ungelesen 03.05.11, 16:52   #4
das_kindlein_schreit
Newbie
 
Registriert seit: Mar 2011
Beiträge: 62
Bedankt: 12
das_kindlein_schreit ist noch neu hier! | 0 Respekt Punkte
Standard

... äh ...
das_kindlein_schreit ist offline   Mit Zitat antworten
Ungelesen 03.05.11, 16:57   #5
gymnozist
Anfänger
 
Registriert seit: Jan 2010
Beiträge: 6
Bedankt: 0
gymnozist ist noch neu hier! | 0 Respekt Punkte
Standard

Alles klar. Besten dank. Diesen redim-Befehl kannt ich zwar, aber ohne das preserve brachte der mir nichts.
Jetzt sollte das klappen
gymnozist ist offline   Mit Zitat antworten
Ungelesen 03.05.11, 17:09   #6
sivro
VB - VBA - Python
 
Benutzerbild von sivro
 
Registriert seit: Feb 2010
Beiträge: 29
Bedankt: 11
sivro ist noch neu hier! | 0 Respekt Punkte
Standard

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
sivro ist offline   Mit Zitat antworten
Antwort


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

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


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


Sitemap

().