web-dev-qa-db-fra.com

Comment coller un tableau entier sans le parcourir en boucle dans VBA?

J'ai ce code qui va peupler un tableau

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

Ici vous pouvez voir que les valeurs dans la fenêtre de surveillance sont ce qui a été chargé dans

enter image description here

Sauf que lorsque j'ajoute le tableau au classeur, il ne fait que coller le premier élément du tableau. 

enter image description here

Est-il possible de coller tout le tableau dans la feuille de calcul sans avoir à parcourir le tableau en boucle?

Après avoir jeté un coup d'oeil au lien de Sorceri, j'ai modifié en code pour utiliser la fonction .Transpose, donc mon code modifié ressemble maintenant à ceci:

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

vous voudrez utiliser la fonction de feuille de calcul transpose http://msdn.Microsoft.com/en-us/library/office/ff196261.aspx

Voir ci-dessous. Vous devez l'assigner à la valeur de la plage

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

Comme je l'ai mentionné dans mon commentaire ci-dessus, vous n'avez pas besoin d'un tableau pour effectuer l'action que vous essayez d'exécuter, mais si vous voulez uniquement une solution de tableau, vous n'avez pas besoin de parcourir le long chemin parcouru pour le remplir en boucle. . Attribuez directement la valeur de la plage au tableau. Cela va créer un tableau 2D que vous n'avez pas besoin de transposer.

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

Juste assigné Rng à arr puis remis à la feuille. cela fonctionne pour moi dans 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