Je suis un débutant VBA.
Je souhaite copier des cellules de la feuille 1 en feuille 2 dans une certaine séquentielle (dans mon cas, après toutes les 13 rangées) avec la condition de ceci: Si l'une quelconque de la D2 à D32 Dans la feuille 1 est 0, Copiez A2 à A32 respectivement. Puis collez-le dans un séquentiel de +13 à partir de B23 dans la feuille 2. P>
Par exemple: p>
Si D2 est 0, copiez A2 et collez-la dans B23 dans la feuille 2. < BR>
Si D3 est 0, copiez A3 et collez-la dans B36 dans la feuille 2.
Si D4 n'est pas 0, passez à la suivante.
Si D5 est 0, copiez A5 et sparpillez-le en B49 dans la feuille 2. P>
Je pense que c'est fonctionnel dans VBA, mais je ne peux pas sembler le comprendre. P>
i ont recherché sur le Web mais aucune réponse n'est arrivée à côté de mes besoins. p> Mon VBA actuel continue de boucler dans la feuille2 jusqu'à la fin lorsque la condition de la feuille1 est remplie. Ce n'est pas ce que je veux. P> p>
3 Réponses :
Veuillez essayer ceci
Essayez celui-ci: espère qu'il aide p> p> p>
Une critique positive si vous me permettez :). La façon dont vous avez atténu vos variables fait i code> A variable code>, qui se transformera en une variante variante / entier code>, tandis que j code > est une variable entière. Vous devriez éviter entier code> comme il est vraiment Aucune utilisation a > dans les utiliser. Utilisez long code> à la place. Évitez l'utilisation de .Activate code> TOO .
Les critiques constructifs sont les bienvenus. Assurez-vous que je ne le ferai pas sur mon propre code (il a dit qu'il est un débutant VBA), alors je pense qu'il sera difficile de présenter Ubound, LBound, .end (XLUP). RoWow pour une seule boucle. Mais vous avez raison, votre code, techniquement est beaucoup mieux. En ce qui concerne i, j définition, peut-être que la vieille école (j'aime bien déclarer pour faire clairement les choses) et ne pas utiliser de long, où ce n'est pas nécessaire.
Merci mon pote! Oui, je n'ai pas encore rencontré l'Ubound, le lbound. Va certainement avoir à regarder. Acclamations.
Pour la flexibilité dans les gammes, une certaine vitesse à l'aide de la matrice et en évitant .Sélectionnez code> et .pastepecial code>, vous pouvez essayer ce qui suit: Sub Test()
Dim x As Long, z As Long, arr As Variant
arr = Sheets("Sheet1").Range("A2:D32").Value
For x = LBound(arr) To UBound(arr)
If arr(x, 4) = 0 Then
Sheets("Sheet2").Cells(23 + z * 13, 2) = arr(x, 1)
z = z + 1
End If
Next x
End Sub
Merci, JVDV! En effet, cela fonctionne beaucoup mieux par rapport à .Sélectionnez et .Paspecial en termes de vitesse! Mais je n'ai pas rencontré LBound & Ubound avant. Va certainement faire des recherches sur elle. Merci encore.