Array-Typen
09.04.2016 14:53:58
Luc:-?
Was du da erzeugt hast, Arthur,
ist ein Variant mit einem Array, dessen Elemente ebenfalls Arrays sind. Dazu findest du einiges unter dem Stichwort Arrays in Arrays im INet. Diese Array-Form ist recht praktisch und entspricht eigentlich eher der in anderen PgmierSprachen üblichen Form, in denen Arrays meist Objekte sind. Ein Einzelwert wird dann so identifiziert: XArr(i)(j)
Im konkreten Fall handelt es sich um einen senkrechten Vektor, dessen Elemente gleichlange waagerechte Vektoren sind, sonst ließe er sich nämlich nicht, nur mit wf.Transpose, in ein 2dimensionales VBA-Array transformieren (wenn die ursprüngliche Ausrichtung erhalten bleiben soll, muss das allerdings 2× angewendet wdn!). D.h., alle Vektoren sind 1dimensional, auch der senkrechte HauptVektor. Sonst sind in VBA nur waagerechte Vektoren 1dimensional, senkrechte Vektoren sind 2dimensional. In Xl sind aber wg der TabellenStruktur grdsätzlich auch alle Vektoren stets 2dimensional!
Die (2malige) Transpose-Anwendung ist aber nur in SubProzeduren erforderlich. Das Ergebnis einer UDF in einer solchen Form wird bei Einsatz in einer ZellFml von Xl automatisch transformiert, sofern das möglich ist. Dazu folgende Bspp:
Sub DF_Bsp()
Dim startZeile As Long, startSpalte As Long, XArr
With ActiveWindow.RangeSelection
startZeile = .Row: startSpalte = .Column
End With
XArr = DF_Test
If MsgBox(Cells(startZeile, startSpalte).Resize(UBound(XArr) + 1, _
UBound(XArr(0)) + 1).Address(0, 0), vbInformation + vbOKCancel, _
"Bereich nach Tfo") = vbCancel Then Exit Sub
With WorksheetFunction
XArr = .Transpose(.Transpose(XArr))
End With
Cells(startZeile, startSpalte).Resize(UBound(XArr, 1), _
UBound(XArr, 2)) = XArr
End Sub
Function DF_Test()
DF_Test = Array(Array("Hello", "World", "!"), Array(42, 7, 12))
End Function
Die Fkt kann in einer MatrixFml so getestet wdn: {=DF_Test()}
Und natürlich zuvor alle 6 Zellen auswählen!
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …