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.