Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Umwandeln 2D-Array in 1D-Array

Umwandeln 2D-Array in 1D-Array
23.03.2020 12:39:10
Stefan
Hallo,
ich suche eine Möglichkeit, ein durch Zuordnung eines Range-Bereiches an einen Variant-Wert (intern) entstandenes zweidimensionales Array
z.B. Variantwert = Range("A4:F4").Value ... intern entsteht Array(1 To 1, 1 To 6)
in ein eindimensionales Array(1 To 6) umzuwandeln OHNE übertragen mittels Schleife.
Funktionen wie Join verlangen ein eindimensionales Array und sind mit obiger Methode leider nicht nutzbar.
LG Stefan
P.S. bleibt gesund
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Umwandeln 2D-Array in 1D-Array
23.03.2020 12:49:25
Nepumuk
Hallo Stefan,
so:
Variantwert = Application.Transpose(Application.Transpose(Range("A4:F4").Value))

Gruß
Nepumuk
AW: Umwandeln 2D-Array in 1D-Array
23.03.2020 12:58:31
Stefan
Hallo Nepumuk,
hatte schon mit Transpose, Redim Preserve rumgebastelt, aber nicht hinbekommen.
Ich danke dir vielmals, so funzt es :-)
Anzeige
Anmerkung
23.03.2020 13:07:45
Rudi
Hallo,
1. Transpose versagt bei mehr al 65536 Elementen.
2. Eine Schleife ist auch nicht langsamer.
Gruß
Rudi
AW: Anmerkung
23.03.2020 13:44:39
Stefan
Hallo Rudi,
auch dir danke für deinen Hinweis.
Ich habe daraufhin mal die Performance für folgendes ermittelt:
1 Mio x durchlaufen HeaderRowRange eines mehrspaltigen ListObject und erstellen eines ";"-getrennten Strings aller Spaltenname
a) zusammensetzen über Zugriff auf ListObject.ListColumn.Name
56 sec
b) über Transpose(Transpose(HeaderRowRange.Value)) und String aus Join
34 sec
c) durchlaufen HeaderRowRange mittels Range (for each r in HeaderRowRange.Cells)
2 Min 49 Sek !!!
d) mittels Zugriff über VariantArray = HeaderRowRange.Value
und zusammensetzen String über Schleife For Each k in VariantArray
!!! 7 Sekunden !!!
Fand ich sehr interessant.
Danke euch beiden
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Umwandeln eines 2D-Arrays in ein 1D-Array in VBA


Schritt-für-Schritt-Anleitung

Um ein 2D-Array in ein 1D-Array in VBA zu konvertieren, kannst Du die Transpose-Funktion nutzen. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Definiere das 2D-Array: Zuerst musst Du das 2D-Array aus einem Excel-Bereich erstellen. Beispiel:

    Dim Variantwert As Variant
    Variantwert = Range("A4:F4").Value ' Dies erstellt ein 2D-Array
  2. Benutze die Transpose-Funktion: Um das 2D-Array in ein 1D-Array zu konvertieren, kannst Du die Transpose-Funktion doppelt anwenden:

    Dim OneDArray As Variant
    OneDArray = Application.Transpose(Application.Transpose(Variantwert))
  3. Verwende das 1D-Array: Jetzt kannst Du das eindimensionale Array OneDArray nach Belieben verwenden.


Häufige Fehler und Lösungen

  • Fehler: Transpose funktioniert nicht bei großen Arrays: Die Transpose-Funktion kann bei mehr als 65.536 Elementen versagen. In diesem Fall solltest Du alternative Methoden in Betracht ziehen.

  • Lösung: Schleifen verwenden: Eine Schleife kann in einigen Fällen ebenfalls funktionieren, ist jedoch in der Regel langsamer als die Verwendung von Transpose.


Alternative Methoden

Wenn die Transpose-Methode nicht die gewünschten Ergebnisse liefert, kannst Du auch folgende Methoden ausprobieren:

  • Schleife zur Umwandlung: Du kannst das 2D-Array manuell in ein 1D-Array umwandeln:

    Dim i As Long, j As Long
    Dim OneDArray() As Variant
    ReDim OneDArray(1 To UBound(Variantwert, 2)) ' Größe des 1D-Arrays anpassen
    For i = LBound(Variantwert, 2) To UBound(Variantwert, 2)
      OneDArray(i) = Variantwert(1, i)
    Next i
  • Verwendung von Join: Wenn Du die Werte als String haben möchtest, kannst Du auch die Join-Funktion verwenden, um Elemente zusammenzufügen.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Umwandlung von 2D-Arrays in 1D-Arrays:

  • Beispiel 1: Einfache Umwandlung:

    Dim Data As Variant
    Data = Range("A1:C3").Value ' 2D-Array
    Dim Result As Variant
    Result = Application.Transpose(Application.Transpose(Data))
  • Beispiel 2: Mit Schleife:

    Dim i As Long
    Dim Result() As Variant
    ReDim Result(1 To 3) ' 3 Spalten
    For i = 1 To 3
      Result(i) = Data(1, i)
    Next i

Tipps für Profis

  • Redim Preserve: Wenn Du ein 2D-Array dynamisch anpassen möchtest, nutze ReDim Preserve:

    ReDim Preserve MyArray(1 To NewRowCount, 1 To NewColCount)
  • Multidimensionale Sammlungen: Überlege, ob eine Collection oder ein Dictionary besser geeignet ist, um komplexe Datenstrukturen zu verwalten.


FAQ: Häufige Fragen

1. Wie kann ich ein 2D-Array in ein 1D-Array in Excel VBA umwandeln?
Die einfachste Methode ist die Verwendung der Transpose-Funktion, gefolgt von einer weiteren Transpose-Anwendung.

2. Gibt es eine Begrenzung für die Größe des Arrays?
Ja, die Transpose-Funktion hat eine Begrenzung von 65.536 Elementen. Bei größeren Arrays solltest Du alternative Methoden wie Schleifen in Betracht ziehen.

3. Wie kann ich die Leistung bei großen Datenmengen optimieren?
Vermeide die Verwendung von Schleifen, wenn möglich, und nutze stattdessen direkt auf das Variant-Array zugreifen, um Zeit zu sparen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige