318 Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

man kann ja ein eindimensionales Array relativ einfach füllen:
[code]dim arrX() as variant
arrX=Array("A","B","C")
...[/code]

Geht das auch für ein zweidimensionales Array und wie würde das aussehen?
Danke und Gruß

2 Antworten

0 Punkte
Beantwortet von
Hallo Andreas,

Nö, das geht leider nicht. Das einzige schleifenlose 2D-Array, das ich kenne ist das Range-Array - hab ich von Nighty gelernt! :-)

arr = Range("A1:B3") 'kopiert die Daten des Zellbereichs in ein Array

arr(zeile,1) gibt dabei die erste Spalte des Bereichs, und arr(zeile, 2) die zweite Spalte wieder. Ist der Bereich nur einspaltig, muss die 1 als zweiter Parameter trotzdem angegeben werden.

Du kannst aber auch 2 Arrays in einander verschachteln. Das ist dann so gut wie 2D:

arr = Array(Array("A", "B", "C"), Array("D", "E", "F"), Array("G", "H", "I"))

MsgBox arr(1)(1) 'ergibt "E", da alles 0-basiert ist.

Für ein klassisches 2D-Array wie du es kennst, kommst du allerdings um eine Schleife nicht umhin. Diese kannst du jedoch in eine externe Function auslagern um deinen Code zu vereinfachen. Im folgenden Beispiel werden die ungeraden Parameter 1, 3 und 5 in die erste Ebene und die geraden Parameter 2, 4 und 6 in die zweite Ebene geschrieben:

Sub Test()

arr = extArray2D("1", "A", "2", "B", "3", "C")
MsgBox arr(0, 1) ' ergibt "1" da 0-basiert
MsgBox arr(1, 2) ' ergibt "B" da 0-basiert

End Sub
Function extArray2D(ParamArray arr())
   
  n = UBound(arr)
  If n Mod 2 = 0 Then n = n + 1
  
  ReDim arr2(n / 2, 2)

  For i = 0 To UBound(arr)
    If i Mod 2 = 0 Then
      arr2(Int(i / 2), 1) = arr(i)
    Else
      arr2(Int(i / 2), 2) = arr(i)
    End If
  Next i
  extArray2D = arr2
  
End Function

Gruß Mr. K.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,
super Antwort. Danke Mr.K (und nighty)!
Viele Grüße A.
...