0
votes

Comment copier la cellule de la feuille 1 à la feuille 2 (sous certains séquentiels) si la condition de la feuille 1 est une rencontre

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.

Par exemple:

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.

Je pense que c'est fonctionnel dans VBA, mais je ne peux pas sembler le comprendre.

i ont recherché sur le Web mais aucune réponse n'est arrivée à côté de mes besoins. xxx

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.


0 commentaires

3 Réponses :


0
votes

Veuillez essayer ceci xxx


0 commentaires

0
votes

Essayez celui-ci: xxx

espère qu'il aide


3 commentaires

Une critique positive si vous me permettez :). La façon dont vous avez atténu vos variables fait i A variable , qui se transformera en une variante variante / entier , tandis que j est une variable entière. Vous devriez éviter entier comme il est vraiment Aucune utilisation dans les utiliser. Utilisez long à la place. Évitez l'utilisation de .Activate 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.



1
votes

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


1 commentaires

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.