Microsoft Excel

Herbers Excel/VBA-Archiv

2dim Array umwandeln in 1dim Array

Betrifft: 2dim Array umwandeln in 1dim Array von: HannesStein
Geschrieben am: 27.10.2020 21:00:02

Hallo
wie macht man aus einem zweidimensionalen einspaltigen Array ein eindimensionales Array?
Oder anders gefragt: Wie macht man aus b ein Array, das so aussieht wie a?

Sub Test()
   Dim a, b
   a = Array(Range("A1").Value, Range("A2").Value, Range("A3").Value, Range("A4").Value)
   b = Range("A1:A4")
End Sub

Betrifft: AW: 2dim Array umwandeln in 1dim Array
von: Luschi
Geschrieben am: 27.10.2020 21:14:23

Hallo Hannes,

zB. so: b = WorksheetFunction.Transpose(Range("A1:A4"))
mit dem Unterschied, daß der Index bei B
'b' mit 1 beginnt.

Gruß von Luschi
aus klein-Paris

Betrifft: Array-Unterschiede
von: Luc:?
Geschrieben am: 27.10.2020 21:57:35

Hallo, Hannes;
a entspricht einem 1dim VBA-Standard-Array, das horizontal (an 1er Zeile) orientiert ist und auch als Kovektor bezeichnet wird, während b in Xl und VBA eher eine 1spaltige Matrix darstellt und deshalb 2dimensional ist, obwohl es nur vertikal orientiert ist und es sich eigentlich um einen Vektor handelt. Dass µS das so herum gemacht hat, liegt an der ListenOrientierung von Xl, in der Mathematik ist das Primäre nämlich der Vektor und nicht der Kovektor, der hier einem Tensor(0,1) entspricht.
Man kann aber auch einen quasi 1dim Vektor [Tensor(1,0)] bilden, was aber eine andere Art von Array erfordert und damit ebenfalls einen 2.Index, der in diesem Fall bei der Auswahl aber vernachlässigt wdn kann, da er ein 2.Array anspricht, das aber nur aus je einem Element besteht:
Dim i As Long, b(3)
For Each Zelle In Range("A1:A4")
    b(i) = Array(Zelle): i = i + 1
Next Zelle
Dadurch bleibt die Ausrichtung des Arrays erhalten. Die einzelnen Werte können dann mit b(0) bis b(3) angesprochen wdn, wobei zu beachten ist, dass dann kein Skalar (Einzelwert), sondern ein skalarer Tensor(0,0) zurückgegeben wird, also ein Array mit nur einem Wert. Wollte man den nackten Wert erhalten, müsste man b(0)(0) bis b(3)(0) verwenden. Aber Xl kennt das, liefern doch bspw die Xl-Fktt ZEILE und SPALTE auch so etwas.
Spielt die Ausrichtung dagg keine Rolle, käme neben Luschis Ansatz auch noch die vbFkt Join infrage, nur verbindet die keine Werte in Matrizen und ein Range liefert primär immer eine Matrix, die im KovektorFall von VBA nur umgewandelt wird, wenn es sich um ein Datenfeld handelt. Das erledigt aber die auf Join basierende UDF VJoin und ggf in neueren Xl-Versionen auch TEXTVERKETTEN (TextJoin).
Gruß, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon

Betrifft: online-excel.de/excel/singsel_vba.php?f=47
von: lupo1
Geschrieben am: 28.10.2020 08:46:55

https://www.online-excel.de/excel/singsel_vba.php?f=47

Betrifft: AW: online-excel.de/excel/singsel_vba.php?f=47
von: HannesStein
Geschrieben am: 28.10.2020 15:28:37

OK, habe WorksheetFunction.Transpose schon öfters gesehen, jetzt hat es auch Bedeutung gewonnen.

Vielen Dank.

Hannes

Beiträge aus dem Excel-Forum zum Thema "2dim Array umwandeln in 1dim Array"