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

VBA 2-Dim-Collection in 2-Dim-Array

Forumthread: VBA 2-Dim-Collection in 2-Dim-Array

VBA 2-Dim-Collection in 2-Dim-Array
06.03.2020 21:43:33
W
Hallo Excel-Freunde,
in einer Funktion wird eine 2D-Collection gefüllt, Gibt es eine einfache Möglichkeit, diese 2D-Collection an den Anrufer als Variant zurückzugeben. Mit einem 2D-Array habe ich die Rückgabe schon erfolgreich umgesetzt (siehe Funktion BTest).
Falls es die Möglichkeit nicht gibt: wie kann ich dann den Inhalt der 2D-Collection in eine 2D-Array übertragen, die ich dann als Antwort zurückgeben könnte. Hier fehlt noch etwas in der Funktion CTest.
Wer kann mir weiterhelfen?
Eine Mappe mit entsprechendem Testcode findet Ihr hier: https://www.herber.de/bbs/user/135677.xlsm
Gruß
W H21
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA 2-Dim-Collection in 2-Dim-Array
06.03.2020 22:13:29
onur

Function CTest() As Variant
Dim TestColl As Collection
Set TestColl = New Collection
TestColl.Add Item:=Array("Sommer", "Winter")
TestColl.Add Item:=Array("Montag", "Sonntag")
TestColl.Add Item:=Array("Tag", "Nacht")
Debug.Print "hier fehlt die Rückgabe als Array"
Set CTest = TestColl
End Function

Anzeige
AW: VBA 2-Dim-Collection in 2-Dim-Array
07.03.2020 08:14:52
W
Hallo onur,
Danke für Deinen Änderungsvorschlag für meinen Code. Ich habe den Code probiert, und bin dadurch einen Schritt weiter gekommen.
Im Code von ATest erhalte ich einen Laufzeitfehler 450 bei der Rückkehr aus CTest am Befehl
Funcrc = CTest()
Bei meinen Tests bin ich dann dahinter gekommen, dass dieser Befehlt auf:
set Funcrc = CTest()
geändert werden muss.
Danach kann die Anzahl der bereitgestellen Einträge aus Funcrc.Count ermittelt werden.
Das soll keine Kritik an Dir sein, sondern soll anderen Anwendern den Weg zur Lösung zeigen.
Fazit: wieder einmal wurde ein Problem - dank dem Forum - innerhalb kürzester Zeit gelöst.
Danke und Gruß
W H21
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA 2-Dim-Collection in 2-Dim-Array umwandeln


Schritt-für-Schritt-Anleitung

Um eine 2-Dimensional Collection in ein 2-Dimensional Array in VBA umzuwandeln, kannst Du folgende Schritte ausführen:

  1. Collection erstellen: Erstelle eine neue Collection und füge Elemente hinzu.
  2. Array deklarieren: Deklariere ein 2D-Array, um die Daten zu speichern.
  3. Daten übertragen: Verwende eine Schleife, um die Daten aus der Collection in das Array zu übertragen.

Hier ist ein Beispielcode, der diese Schritte verdeutlicht:

Function CollectionToArray() As Variant
    Dim TestColl As Collection
    Set TestColl = New Collection
    Dim i As Long, j As Long
    Dim Arr() As Variant

    ' Elemente zur Collection hinzufügen
    TestColl.Add Array("Sommer", "Winter")
    TestColl.Add Array("Montag", "Sonntag")
    TestColl.Add Array("Tag", "Nacht")

    ' Array dimensionieren
    ReDim Arr(1 To TestColl.Count, 1 To 2) ' 2 Spalten für die 2D-Arrays

    ' Daten in das Array übertragen
    For i = 1 To TestColl.Count
        For j = 1 To 2
            Arr(i, j) = TestColl(i)(j - 1)
        Next j
    Next i

    CollectionToArray = Arr
End Function

Häufige Fehler und Lösungen

  • Laufzeitfehler 450: Dieser Fehler tritt häufig auf, wenn Du versuchst, eine Collection zurückzugeben ohne die Set-Anweisung zu verwenden. Achte darauf, dass Du die Rückgabe korrekt mit Set durchführst:
Set Funcrc = CollectionToArray()
  • Ubound-Fehler: Wenn Du versuchst, die Größe des Arrays mit UBound zu ermitteln und einen Fehler erhältst, überprüfe, ob das Array tatsächlich dimensioniert wurde. Beispiel:
Dim upperBound As Long
upperBound = UBound(CollectionToArray, 1) ' Überprüfen der Anzahl der Zeilen

Alternative Methoden

Eine weitere Methode, um eine Collection in ein Array umzuwandeln, ist die Verwendung von VBA Array und Join. Hierbei wird jedoch eine zusätzliche Umwandlung benötigt und die Flexibilität ist geringer.

Hier ein Beispiel:

Function CollectionToArrayAlternative() As Variant
    Dim TestColl As Collection
    Set TestColl = New Collection

    TestColl.Add Array("Element1", "Element2")
    TestColl.Add Array("Element3", "Element4")

    ' Verwendung von Join
    Dim result As Variant
    result = Join(TestColl(1), ",")

    CollectionToArrayAlternative = result
End Function

Praktische Beispiele

Beispiel 1: Umwandlung einer 2D-Collection in ein 2D-Array und Ausgabe in einer Tabelle:

Sub OutputToSheet()
    Dim arr As Variant
    arr = CollectionToArray()

    Dim i As Long, j As Long
    For i = LBound(arr, 1) To UBound(arr, 1)
        For j = LBound(arr, 2) To UBound(arr, 2)
            Cells(i, j).Value = arr(i, j)
        Next j
    Next i
End Sub

Tipps für Profis

  • Verwende die Funktion Redim Preserve, um die Größe eines bereits dimensionierten Arrays zu ändern, ohne die Daten zu verlieren.
ReDim Preserve Arr(1 To 10, 1 To 2)
  • Optimiere den Code, indem Du die VBA Collections effizient nutzt, um die Performance bei größeren Datenmengen zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich eine Collection in VBA erstellen?
Du kannst eine Collection mit dem Befehl Set myCollection = New Collection erstellen. Anschließend kannst Du Elemente mit myCollection.Add hinzufügen.

2. Kann ich eine multidimensionale Collection in ein Array umwandeln?
Ja, Du kannst eine multidimensionale Collection in ein 2D-Array umwandeln, indem Du die oben beschriebene Methode verwendest, um die Daten zu übertragen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige