webentwicklung-frage-antwort-db.com.de

Wie füge ich ein ganzes Array ein, ohne es in VBA zu durchlaufen?

Ich habe diesen Code, der ein Array füllen wird

Sub rangearray()

    Dim arr() As Variant
    Dim Rng As Range
    Dim myCell As Range
    Dim i As Integer

    Set Rng = ActiveSheet.Range("G10:G14")

    For Each myCell In Rng
        ReDim Preserve arr(i)
        arr(i) = myCell
        i = i + 1
    Next myCell

    ActiveSheet.Range("H10:H14") = arr()

End Sub

Hier können Sie sehen, dass die Werte im Watch-Fenster das sind, was geladen wurde

enter image description here

Wenn ich das Array jedoch wieder zur Arbeitsmappe hinzufüge, wird nur das erste Element des Arrays wieder eingefügt. 

enter image description here

Ist es möglich, das gesamte Array in das Arbeitsblatt einzufügen, ohne das Array durchlaufen zu müssen?

Nach einem Blick auf den Link von Sorceri habe ich den Code geändert, um die .Transpose-Funktion zu verwenden. Mein geänderter Code sieht nun so aus:

Sub rangearray()

    Dim arr() As Variant
    Dim Rng As Range
    Dim myCell As Range
    Dim i As Integer

    Set Rng = ActiveSheet.Range("A1:A5")

    For Each myCell In Rng
        ReDim Preserve arr(i)
        arr(i) = myCell
        i = i + 1
    Next myCell

    ActiveSheet.Range("B1:B5") = WorksheetFunction.Transpose(arr)

End Sub
8
spences10

sie möchten die Funktion zum Umsetzen des Arbeitsblatts verwenden http://msdn.Microsoft.com/en-us/library/office/ff196261.aspx

Siehe unten. Sie müssen es dem Wert des Bereichs zuweisen

Sub rangearray()

Dim arr() As Variant
Dim Rng As Range
Dim myCell As Range
Dim i As Integer

Set Rng = ActiveSheet.Range("A1:A5")

For Each myCell In Rng
    ReDim Preserve arr(i)
    arr(i) = myCell
    i = i + 1
Next myCell

ActiveSheet.Range("B1:B5").Value = WorksheetFunction.Transpose(arr)

End Sub
9
Sorceri

Wie ich oben in meinem Kommentar erwähnt habe, brauchen Sie kein Array, um die Aktion auszuführen, die Sie versuchen. Wenn Sie jedoch nur eine Array-Lösung benötigen, müssen Sie das Array nicht in einer Schleife füllen . Weisen Sie dem Array den Wert des Bereichs direkt zu. Es wird ein 2D-Array erstellt, das Sie nicht transponieren müssen.

Sub rangearray()
    Dim arr
    Dim Rng As Range

    With ActiveSheet
        Set Rng = ActiveSheet.Range("G10:G14")

        arr = Rng.Value

        .Range("H10").Resize(UBound(arr, 1)).Value = arr
    End With
End Sub
8
Siddharth Rout

Sie haben einfach Rng dem Arr zugewiesen und dann zurück zum Blatt gebracht. es funktioniert für mich in Excel 2016

Sub rangearray()

    Dim arr() As Variant
    Dim Rng As Range
    Dim myCell As Range
    Dim i As Integer

    Set Rng = ActiveSheet.Range("A1:A5")

    arr = Rng

    ActiveSheet.Range("B1:B5").Resize(5) = arr

End Sub
0
Dinesh Madhup