Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Array mit VBA Array-Funktion erweitern

Array mit VBA Array-Funktion erweitern
14.09.2015 14:18:41
Arthur
Hallo Excelaner.
Ihr könnt mir sicher helfen ein Array zu erweitern.
Mittels der Array-Funktion erstelle ich ein Array, das später erweitert werden soll.
("a","b","c") ist der erste Teil, später soll ("D","E") hinzukommen
Das Ergebnis wäre in der selben Dimension: ("a","b","c","D","E")
(Wie) geht das mit der Array-Funktion?
Sub ananas()
Dim lv As Variant
' a, b, c in ein Array stellen
lv = Array("a", "b", "c")
' der misslingende Versuch das Array mit D, E zu erweitern :(
lv = Array(lv, "D", "E")
End Sub
Gruß, Arthur.

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array mit VBA Array-Funktion erweitern
14.09.2015 14:34:49
RPP63
Hallo!
Dies macht man für gewöhnlich so:
Sub arr()
Dim arrS()
ReDim arrS(2)
arrS(0) = "a"
arrS(1) = "b"
arrS(2) = "c"
ReDim Preserve arrS(4)
arrS(3) = "D"
arrS(4) = "E"
End Sub
Gruß Ralf

AW: Array mit VBA Array-Funktion erweitern
14.09.2015 14:44:20
Arthur
Hallo Ralf.
Danke für die Antwort. Über die Array-Funktion zu gehen erspart mir in diesem Fall bei Änderungen viel Arbeit. Falls sich ein Eintrag verschiebt, muss der Index nicht in allen Folgeelementen angepasst werden. Super wäre jetzt eine 'concatenate'-Funktion, welche das eine Array an das andere anfügt.
Möglichkeit a): Excel kann das.
Möglichkeit b): selbst ist der Mann :)
Schöner wäre a).
Wenn jemandem einfällt, wie Excel das macht, dann nehme ich den Hinweis gerne auf.
Gruß, Arthur.

Anzeige
Alternativ
14.09.2015 14:50:42
Rudi
Hallo,
Sub ananas()
Dim lv As Variant
' a, b, c in ein Array stellen
lv = Array("a", "b", "c")
lv = Join(lv, ",")  '"a,b,c"
lv = lv & ",D,E"    '"a,b,c,D,E"
lv = Split(lv, ",") 'Array("a","b","c","D","E")
End Sub
Gruß
Rudi

AW: Alternativ
15.09.2015 12:58:42
Arthur
Hallo Rudi.
Dein Ansatz gefällt mir. Ob ich ihn im aktuell realen Fall verwenden kann ist zu prüfen. Ein ungenutztes Sonderzeichen für den Split lässt sich sicher finden. Der Ansatz hat auf jeden Fall was, den werde ich mir mindestens merken :).
Danke und Gruß, Arthur.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Array mit VBA Array-Funktion erweitern


Schritt-für-Schritt-Anleitung

Um ein Array in VBA zu erweitern, kannst du die ReDim-Anweisung mit Preserve verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Ein Array erstellen: Beginne mit der Definition deines Arrays und initialisiere es mit Werten.

    Sub CreateArray()
       Dim arr() As Variant
       ReDim arr(2) ' drei Elemente: 0, 1, 2
       arr(0) = "a"
       arr(1) = "b"
       arr(2) = "c"
    End Sub
  2. Array erweitern: Verwende ReDim Preserve, um das Array um neue Elemente zu erweitern, ohne die bestehenden Werte zu verlieren.

    ReDim Preserve arr(4) ' jetzt hat das Array fünf Elemente
    arr(3) = "D"
    arr(4) = "E"
  3. Fertig: Dein Array enthält nun die Werte ("a", "b", "c", "D", "E").


Häufige Fehler und Lösungen

  • Fehler beim Erweitern des Arrays: Wenn du versuchst, ein Array ohne ReDim Preserve zu erweitern, wird ein Laufzeitfehler auftreten. Stelle sicher, dass du Preserve verwendest.

  • Die falsche Anzahl an Dimensionen: Achte darauf, dass du beim Erweitern die gleiche Dimension verwendest. Wenn du ein mehrdimensionales Array hast, achte darauf, die Dimensionen korrekt zu definieren.


Alternative Methoden

Eine alternative Methode zum Erweitern eines Arrays besteht darin, die Join- und Split-Funktionen von VBA zu verwenden. So kannst du Arrays dynamisch zusammenfügen und aufteilen. Hier ein Beispiel:

Sub JoinAndSplit()
   Dim lv As Variant
   lv = Array("a", "b", "c")
   lv = Join(lv, ",")  ' "a,b,c"
   lv = lv & ",D,E"    ' "a,b,c,D,E"
   lv = Split(lv, ",") ' Array("a","b","c","D","E")
End Sub

Diese Methode ist besonders nützlich, wenn du mehrere Arrays zusammenführen möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen, die Konzepte besser zu verstehen:

  1. Dynamische Arrays in Schleifen:

    Sub DynamicArrayInLoop()
       Dim arr() As Variant
       Dim i As Integer
       Dim newSize As Integer
    
       newSize = 0
       For i = 1 To 5
           ReDim Preserve arr(newSize)
           arr(newSize) = "Element " & i
           newSize = newSize + 1
       Next i
    End Sub
  2. Arrays in Arrays:

    Sub ArrayInArray()
       Dim arr1() As Variant
       Dim arr2() As Variant
    
       arr1 = Array("a", "b", "c")
       arr2 = Array("D", "E")
    
       Dim combined() As Variant
       combined = Join(arr1, ",") & "," & Join(arr2, ",")
       combined = Split(combined, ",")
    End Sub

Tipps für Profis

  • Verwende Option Base 1: Setze in deinen Modulen Option Base 1, um die Arrays bei 1 beginnen zu lassen, wenn dies für deine Anwendung sinnvoll ist.

  • Verwende Dim strategisch: Nutze Dim für die Deklaration und ReDim für dynamische Arrays, um die Speicherverwaltung zu optimieren.

  • Vermeide zu häufige Resizes: Versuche, die Anzahl der ReDim Preserve-Aufrufe zu minimieren, da sie ineffizient sein können. Berechne die notwendige Größe im Voraus, wenn möglich.


FAQ: Häufige Fragen

1. Wie kann ich ein mehrdimensionales Array in VBA erweitern?
Du kannst ein mehrdimensionales Array mit ReDim Preserve erweitern, musst jedoch sicherstellen, dass du nur die letzte Dimension erweiterst.

2. Gibt es eine Möglichkeit, Arrays in VBA ohne Schleifen zu kombinieren?
Ja, du kannst die Join- und Split-Funktionen verwenden, um Arrays schnell zu kombinieren und zu teilen, wie in den vorherigen Beispielen gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige