10
votes

Excel VBA - transmettez une rangée de valeurs de cellule à un tableau, puis collez ce réseau sur une référence relative des cellules

Utiliser Excel (2010) VBA, j'essaie de copier (passer) une gamme constante de cellules (dont les valeurs recalculées) à un tableau. Ensuite, j'essaie de transmettre ce tableau vers une nouvelle gamme de cellules, directement en dessous de celle-ci. Après avoir fait cela, je souhaite copier à nouveau (passer) les nouvelles valeurs de la gamme constante sur le tableau et transmettez ces nouvelles valeurs à une plage directement sous celle que j'ai précédemment passée.

Je sais que ce code est atroce (je Je suis nouveau dans les tableaux dans VBA). P>

Sub ARRAYER()

Dim anARRAY(5) As Variant

Number_of_Sims = 10

For i = 1 To Number_of_Sims
   anARRAY = Range("C4:G4")
   Range("C4").Select
   ActiveCell.Offset(Number_of_Sims, 0).Select
   ActiveCell = anARRAY
   Range("C4").Select
Next

End Sub


2 commentaires

Pourquoi voulez-vous utiliser un tableau? Suis-je correct de comprendre que vous souhaitez copier les valeurs (changeantes) en C4: G4 dans la ligne ci-dessous?


Bonjour Jonathan, pouvez-vous s'il vous plaît ajouter un exemple de ce que vous faites, peut-être une capture d'écran? Ce n'est pas clair pour moi (au moins)


4 Réponses :


9
votes

Vous êtes légèrement sur quelques points ici, j'espère donc que ce qui suit aide.

Premièrement, vous n'avez pas besoin de sélectionner des gammes pour accéder à leurs propriétés, vous pouvez simplement spécifier leur adresse, etc. Deuxièmement, sauf si vous n'êtes pas Manipulation des valeurs dans la plage, vous n'avez pas besoin de les définir à une variante. Si vous souhaitez manipuler les valeurs, vous pouvez laisser les limites du tableau car il sera défini lorsque vous définissez la plage.

C'est aussi une bonne pratique d'utiliser option explicite En haut de vos modules pour forcer la déclaration variable.

Les suivants feront ce que vous allez après: xxx

si vous voulez manipuler le Valeurs dans le tableau alors faites ceci: xxx


3 commentaires

Merci Cuber Chase! Utiliser votre réponse et votre chuffs, je comprends une meilleure compréhension de cela. J'apprécie vraiment cela.


Pas de soucis :). L'utilisation des tableaux est presque toujours plus rapide et bénéfique que de travailler directement avec des gammes. C'est une bonne habitude d'entrer dans.


Dans la ligne 3 du deuxième bloc, vous manquez un caractère d'espace.



3
votes

Pas besoin de tableau. Utilisez simplement quelque chose comme ceci:

Sub ARRAYER()

    Dim Rng As Range
    Dim Number_of_Sims As Long
    Dim i As Long
    Number_of_Sims = 10

    Set Rng = Range("C4:G4")
    For i = 1 To Number_of_Sims
       Rng.Offset(i, 0).Value = Rng.Value
       Worksheets("Sheetname").Calculate   'replacing Sheetname with name of your sheet
    Next

End Sub


2 commentaires

Merci à Mancher. La raison pour laquelle je cherche à utiliser un tableau est parce que je cours actuellement environ 10 000 à 100 000 simulations. Actuellement, je viens de copier la gamme, puis de la coller au bon endroit en utilisant un décalage de cellules actives. J'apprécie vraiment les conseils. Une seule question, cela fonctionnerait-il aussi vite qu'un tableau? J'essaie d'obtenir mon temps d'exécution de 1 heure à 5 à 10 minutes.


IMPRESSIONNANT! Merci beaucoup!



2
votes

Puisque vous copiez les mêmes données sur toutes les lignes, vous n'avez pas besoin de boucler du tout. Essayez ceci: xxx


0 commentaires

0
votes

Lorsque j'ai essayé votre code, j'ai eu une erreur en erreur lorsque je voulais remplir le tableau.

Vous pouvez essayer de remplir le tableau comme celui-ci. P>

Sub Testing_Data()
Dim k As Long, S2 As Worksheet, VArray

Application.ScreenUpdating = False
Set S2 = ThisWorkbook.Sheets("Sheet1")
With S2
    VArray = .Range("A1:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
End With
For k = 2 To UBound(VArray, 1)
    S2.Cells(k, "B") = VArray(k, 1) / 100
    S2.Cells(k, "C") = VArray(k, 1) * S2.Cells(k, "B")
Next

End Sub


0 commentaires