Array-Größe während der Laufzeit ändern

Bild

Betrifft: Array-Größe während der Laufzeit ändern
von: SteffenS
Geschrieben am: 07.05.2015 21:57:50

Hallo Zusammen,
ich definiere in einem Makro ein Array. Da ich nicht weiß wie groß das Array werden kann, möchte ich dieses während der Laufzeit gern anpassen:

Sub test()
ReDim aMaps(1, 1) As Variant
last_cell = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To last_cell
ReDim Preserve aMaps(i - 2, 1)
aMaps(i - 2, 1) = Cells(i, 1).Value
aMaps(i - 2, 2) = Cells(i, 2).Value
Next i
End Sub
Leider funktioniert dies nicht. Es erscheint der Fehler: Index außerhalb des gültigen Bereichs.
Da ich mit Arrays bisher nicht gearbeitet habe bräuchte ich hier mal Eure Hilfe.
Danke Euch schon mal.
VG Steffen Schmerler

Bild

Betrifft: AW: Array-Größe während der Laufzeit ändern
von: Nepumuk
Geschrieben am: 07.05.2015 22:18:29
Hallo,
mit Preserve kannst du nur die letzte Dimension eines Arrays ändern. Also kippe das Array.
Gruß
Nepumuk

Bild

Betrifft: Man kann das aber auch wie folgt machen, ...
von: Luc:-?
Geschrieben am: 08.05.2015 00:36:56
…Steffen,
da sich die Array-Größe hptsächlich an der ZeilenAnzahl bei ganzen 2 Spalten orientiert:

Rem Anlegen eines VertikalVektors mit Elementen aus HorizontalVektoren
'   (Variant m.Arrays -> Arrays in Array) m.3 ErgebnisAusgabeVarianten
Sub test()
    Const allErgBer$ = "I2:J4 K2:L4 M2:N4"  'nur f.Test; ggf anpassen!
    Dim i As Long, last_cell As Long, adErgBer$(), aMaps As Variant
    last_cell = Cells(Rows.Count, 1).End(xlUp).Row
    ReDim aMaps(1 To last_cell - 1): adErgBer = Split(allErgBer)
    For i = 2 To last_cell
        aMaps(i - 1) = Array(Cells(i, 1), Cells(i, 2))
    Next i
    Rem Ausgabe Var1
    Range(adErgBer(0)) = WorksheetFunction.Index(aMaps, 0, 0)
    Rem Ausgabe Var2
    With WorksheetFunction
        Range(adErgBer(1)) = .Transpose(.Transpose(aMaps))
    End With
    Rem Ausgabe Var3
    For i = 1 To UBound(aMaps)
        Range(adErgBer(2)).Rows(i) = aMaps(i)
    Next i
End Sub
Gruß, Luc :-?

Besser informiert mit …

Bild

Betrifft: AW: Man kann das aber auch wie folgt machen, ...
von: SteffenS
Geschrieben am: 08.05.2015 07:58:32
Hallo,
danke für die Antworten. Ich habe es jetzt so gelöst:
ReDim aMaps(2 To last_cell, 2) As Variant
aMaps(i, 1) = Cells(i, 1).Value
aMaps(i, 2) = Cells(i, 2).Value
Damit klappt es.
@Nepumuk
Deine Antwort habe ich leider nicht ganz verstanden.
Was meinst Du damit, dass es mit 'ReDim Preserve aMaps(i, 1) As Variant nicht funktioniert?
Da ich mich mit Arrays noch nicht weiter beschäftigt habe, muss ich nochmal nachfragen.
VG Steffen

Bild

Betrifft: AW: Array-Größe während der Laufzeit ändern
von: Beverly
Geschrieben am: 08.05.2015 08:31:25
Hi Steffen,

Sub test()
    ReDim aMaps(1, 1) As Variant
    last_cell = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To last_cell
        ReDim Preserve aMaps(1, i - 2)
        aMaps(0, i - 2) = Cells(i, 1).Value
        aMaps(1, i - 2) = Cells(i, 2).Value
    Next i
End Sub
Nur das letzte Feld lässt sich dynamisch erweitern.



Bild

Betrifft: in dem Fall kannst du einfach ....
von: Rudi Maintaire
Geschrieben am: 08.05.2015 09:11:14
Hallo,
so verfahren:

Sub test()
  Dim aMaps As Variant, LastCell As Long
  LastCell = Cells(Rows.Count, 1).End(xlUp).Row
  aMaps = Range(Cells(2, 1), Cells(LastCell, 2))
End Sub
Gruß
Rudi

Bild

Betrifft: AW: in dem Fall kannst du einfach ....
von: SteffenS
Geschrieben am: 08.05.2015 12:31:40
Danke Euch nochmal.
VG Steffen

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Array-Größe während der Laufzeit ändern"