Hallo.
Kürzlich tauchte hier in einem anderen Zusammenhang die Frage auf, wie
man ein 2-dim-Array welches aus einem Range entstanden ist, in ein
1-dim-Array umwandeln kann. Mein damaliger Ansatz mit
WorksheetFunction.Transpose funktionierte zwar, war aber unnötig
kompliziert.
Im Prinzip reicht schon WorksheetFunction.Index um die Umwandlung
vorzunehmen, wenn man diese auf eine Array anwendet, dem man zuvor die
Daten des Range übergeben hat. Nur bei Spalten ist vorher noch Transpose
nötig – aber auch nur in seiner eigentlichen Funktion als Spiegelung
entlang der Diagonalen.
Im Beispiel-Code unten habe ich einen 4x4 Bereich genommen; es geht aber
auch mit 4x1 oder 1x4 oder 1x1. Letzterer benötigt die If-Abfrage.
Peter
Sub TEST_Dim2to1()
Dim arr As Variant
Dim r As Range
Set r = [A1:D4]
r.Formula = "=ADDRESS(ROW(),COLUMN(),4)" 'Test-Daten
arr = r
If Not IsArray(arr) Then
MsgBox arr
Else
'Zeile 1
MsgBox Join(WorksheetFunction.Index(arr, 1, 0), ",")
'Spalte 1
MsgBox Join(WorksheetFunction.Index( _
WorksheetFunction.Transpose(arr), 1, 0), ",")
End If
End Sub