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

Forumthread: 2 Dimensionales Array Mit ArrayList ?

2 Dimensionales Array Mit ArrayList ?
26.05.2017 11:24:31
JoNNy
Hallo zusammen,
heute habe ich mich etwas an den ArrayListen versucht nachdem ich sie durch einen anderen Beitrag entdeckt habe. Die Frage ist jetzt kann man damit auch zweidimensionale Arrays realisieren ?
Klar könnte ich "normale" Arrays verwenden, aber diese sind fest in der Größe, ich bräuchte aber variable da immer noch was "hintendran" kommen kann.
Gruß JoNNy
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 11:35:03
Nepumuk
Hallo,
nein das geht nicht. Mehrdimensionale Arrays sind nur mit den Standartdatentypen möglich. Diese Arrays kannst du ja mit Redim Preserve erweitern aber nur in der letzten Dimension. Wenn du dynamisch mehr Zeilen benötigst, dann kippe das Array um 90°. Um das dann in einer Tabelle auszugeben kannst du es mit der Transpons-Methode wieder "zurückkippen".
Gruß
Nepumuk
Anzeige
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 11:38:36
JoNNy
Hallo,
also ich habe eben ein Array "GesamtStunden(729,7)" und da möchte ich eben die 729 variable gestalten.
Gruß JoNNy
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 11:40:33
Nepumuk
Hallo,
das geht nicht. Nimm ein Array mit den Dimensionen (7, 729)
Gruß
Nepumuk
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 11:44:12
JoNNy
Hallo,
das ist dann ungünstig, dann müsste ich das ja überall bei mir im Code ändern :O.
Aber ok wie würde das dann aussehen mit der Neudimensionierung?
Gruß JoNNy
Anzeige
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 12:14:03
Nepumuk
Hallo,
das ist dann ungünstig, dann müsste ich das ja überall bei mir im Code ändern :O
Tja, erst mit den Möglichkeiten auseinandersetzen dann Coden.
Neudimensionierung sieht dann so aus:
Redim Preserve MeinArray(7, 730)

Gruß
Nepumuk
Anzeige
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 12:19:25
JoNNy
Hallo,
ja das stimmt xD.
Ich probier aber einfach zu gerne aus.
Du meintest aber doch vorhin das man die Arrays Transponieren kann?
Würde das dann klappen wenn ich es vorher Transponiere dann erweitere und dann wieder zurücktransponiere ?
Gruß JoNNy
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 12:35:25
Daniel
Hi
ja das klappt so.
Transponieren ist aber besonders gute Funktion.
Sie ist langsam und hat ein Limit in der Datenmenge.
Bei kleineren Arrays also ok, bei größeren Arrays bist du schneller, wenn du ein neues Array anlegst und die Daten per doppelter Schleife überträgst.
Gruß Daniel
Anzeige
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 12:31:17
Daniel
Hi
am einfachsten so:
1. neues Array in der gewünschten Größe erstellen
2. Daten per Schleife übertragen
3. neues Array an altes Array übergeben und ggf das neue Array wieder löschen.
Da VBA beim Arbeiten mit Arrays sehr schnell ist, sollte die Schleife kein Problem sein.
anderen Falls gäbe es noch folgenden dirty-little-Trick um ein 2-D-Array in der ersten Dimension ohne Datenverlust zu erweitern:
1. du brauchst auf dem Tabellenblatt eine Listbox mit der entprechenden Spaltenanzahl (ColumnCount)
2. schreibe das Array in die .List-Eigenschaft der Listbox
3. füge die neuen Daten per .AddItem der Listbox hinzu
4. übernehme das .List ins Array
Die Einschränkungen hierbei sind folgende:
- Zahlen werden in Texte gewandelt.
- das Array darf maximal 10 Spalten haben, ansonsten funktioniert das mit dem AddItem nicht.
Gruß Daniel
Anzeige
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 12:38:52
JoNNy
Hallo Daniel,
die Sache mit dem Zweiten Array ist ja das das alte Array ja trz groß genug sein muss um das neue aufzunehmen oder seh ich das falsch.
Gruß JoNNy
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 12:49:09
Daniel
Hi
ja, das siehst du falsch.
bei arr1 = arr2 spielt es keine Rolle, welche Größe das arr1 aktuell hat.
Vorausgesetzt, du hast arr1 als freies Variant deklariert und erst später auf die entsprechende Größe redimmt.
Gruß Daniel
Anzeige
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 12:51:21
JoNNy
Hi,
aso das heißt das passt sich dann an die Größe von arr2 an ?
Gruß JoNNy
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 12:54:06
Daniel
hattest du nicht kürzlich folgendes geschrieben?
"Ich probier aber einfach zu gerne aus."
Gruß Daniel
AW: 2 Dimensionales Array Mit ArrayList ?
26.05.2017 14:03:14
JoNNy
ja :D aber wenn schonmal jemand da ist der sich auskennt,
dann frag ich gleich alles was mir grad dazu einfällt :)
aber danke für die Hilfe und ein Schönes Wochenende wünsch ich dir.
Gruß JoNNy
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

2-Dimensionales Array mit ArrayList in VBA


Schritt-für-Schritt-Anleitung

Um ein 2-dimensionales Array mit einer ArrayList in VBA zu realisieren, kannst du folgende Schritte befolgen:

  1. Definiere die ArrayList: Erstelle eine neue Instanz der ArrayList.

    Dim myArrayList As Object
    Set myArrayList = CreateObject("System.Collections.ArrayList")
  2. Füge Arrays zur ArrayList hinzu: Jedes Element der ArrayList kann ein 1-dimensionales Array sein, das du später zu einem 2-dimensionalen Array kombinieren kannst.

    Dim singleArray(1 To 7) As Variant
    ' Füge Werte zum 1D-Array hinzu
    singleArray(1) = "Wert1"
    ' Füge das Array zur ArrayList hinzu
    myArrayList.Add singleArray
  3. Dynamische Erweiterung: Um die Größe der Arrays dynamisch zu gestalten, kannst du die ArrayList einfach um neue Arrays erweitern.

    Dim newArray(1 To 7) As Variant
    newArray(1) = "Wert2"
    myArrayList.Add newArray
  4. Konvertiere die ArrayList in ein 2D-Array: Wenn du die Daten in einem 2-dimensionalen Array benötigst, kannst du die Daten aus der ArrayList in ein 2D-Array übertragen.

    Dim resultArray() As Variant
    ReDim resultArray(1 To myArrayList.Count, 1 To 7)
    
    Dim i As Long
    For i = 0 To myArrayList.Count - 1
       Dim tempArray As Variant
       tempArray = myArrayList(i)
       Dim j As Long
       For j = 1 To 7
           resultArray(i + 1, j) = tempArray(j)
       Next j
    Next i

Häufige Fehler und Lösungen

  • Fehler: "Array out of bounds"
    Lösung: Stelle sicher, dass die Indizes korrekt sind und dass du die Dimensionen des Arrays berücksichtigt hast.

  • Fehler: "Typ nicht unterstützt"
    Lösung: Überprüfe, ob du die richtigen Datentypen verwendest. Die ArrayList in VBA kann nur Variants speichern.

  • Fehler: "Redim Preserve funktioniert nicht"
    Lösung: Beachte, dass Redim Preserve nur in der letzten Dimension eines Arrays funktioniert. Wenn du die erste Dimension ändern möchtest, musst du das Array in ein neues Array kopieren.


Alternative Methoden

Eine alternative Methode, um ein 2-dimensionales Array in VBA zu erstellen, ist die Verwendung von Collection oder Dictionary. Beide bieten dir eine dynamische Möglichkeit, Elemente zu speichern und zu verwalten.

Ein Beispiel mit einer Collection:

Dim myCollection As New Collection
Dim singleArray(1 To 7) As Variant
' Füge Werte hinzu
singleArray(1) = "Wert1"
myCollection.Add singleArray

Die Verwendung der Collection hat den Vorteil, dass du die Elemente nach Bedarf hinzufügen kannst, ohne die Größe manuell zu definieren.


Praktische Beispiele

Hier ist ein praktisches Beispiel, um ein 2-dimensionales Array mit ArrayList zu erstellen:

Sub Create2DArrayUsingArrayList()
    Dim myArrayList As Object
    Set myArrayList = CreateObject("System.Collections.ArrayList")

    ' Füge Daten hinzu
    Dim firstRow(1 To 7) As Variant
    firstRow(1) = "A1"
    firstRow(2) = "B1"
    myArrayList.Add firstRow

    Dim secondRow(1 To 7) As Variant
    secondRow(1) = "A2"
    secondRow(2) = "B2"
    myArrayList.Add secondRow

    ' Konvertiere in 2D-Array
    Dim resultArray() As Variant
    ReDim resultArray(1 To myArrayList.Count, 1 To 7)

    Dim i As Long
    For i = 0 To myArrayList.Count - 1
        Dim tempArray As Variant
        tempArray = myArrayList(i)
        Dim j As Long
        For j = 1 To 7
            resultArray(i + 1, j) = tempArray(j)
        Next j
    Next i

    ' Ausgabe des 2D-Arrays
    For i = LBound(resultArray, 1) To UBound(resultArray, 1)
        For j = LBound(resultArray, 2) To UBound(resultArray, 2)
            Debug.Print resultArray(i, j)
        Next j
    Next i
End Sub

Tipps für Profis

  • Nutze die ArrayList für dynamische Datenstrukturen, wenn die Größe deines Arrays nicht festgelegt ist.
  • Verwende Redim Preserve, um die Größe von Arrays zu ändern, aber erinnere dich, dass dies nur für die letzte Dimension funktioniert.
  • Experimentiere mit der Transponieren-Funktion, um die Struktur deiner Arrays zu ändern, aber sei vorsichtig bei der Datenmenge.
  • Bei großen Datenmengen kann die Leistung beeinträchtigt werden. In solchen Fällen ist es besser, ein neues Array zu erstellen und die Werte manuell zu kopieren.

FAQ: Häufige Fragen

1. Kann ich ein 2-dimensionales Array mit ArrayList in VBA erstellen?
Ja, du kannst eine ArrayList verwenden, um mehrere 1-dimensionalen Arrays zu speichern und sie später in ein 2-dimensionales Array zu konvertieren.

2. Was ist der Vorteil der Verwendung von ArrayList in VBA?
Der Hauptvorteil liegt in der dynamischen Größe. Du kannst Elemente hinzufügen und entfernen, ohne die Größe des Arrays manuell anpassen zu müssen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige