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
4 Réponses :
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. P>
C'est aussi une bonne pratique d'utiliser Les suivants feront ce que vous allez après: p> si vous voulez manipuler le Valeurs dans le tableau alors faites ceci: p> option explicite code > En haut de vos modules pour forcer la déclaration variable. P>
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.
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
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!
Puisque vous copiez les mêmes données sur toutes les lignes, vous n'avez pas besoin de boucler du tout. Essayez ceci:
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
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)