-1
votes

Excel VBA pour la boucle

Sub letr()

Dim i As Integer

For i = 3 To 25

    If Cells(i, 7) <> "CA" Then
    Rows(i).Delete
    End If

Next i

End Sub
The above code does not delete all the results(Total 4). i have to run the code twice to delete all the 4 results. Can anyone show me what i did wrong?

2 commentaires

C'est un problème de réroocteur. Exécutez la suppression de Bottum-up ou vous n'êtes tout simplement pas itération de toutes les lignes. Pour voir cela, passez à travers votre code en utilisant F8 et voir les résultats par étape. Encore une fois, il est préférable de ne pas supprimer un par un mais en une fois après avoir utilisé Union . Voici un exemple . Faites-moi savoir si cela répond à votre question afin que nous puissions fermer ce fil.


Si vous supprimez de haut en bas, vous déplacez efficacement les rangées pendant que votre itérateur, je suis toujours en train de progresser. Cela signifie que si vous aviez 3: NY 4: NY 5: CA puis à I = 3, la première NY serait supprimée. Maintenant, vous avez 3: NY 4: CA GAUCHE Mais votre itérateur a avancé et i = 4. Étant donné que vous avez supprimé la ligne 3, la nouvelle ligne 3 maintient toujours la valeur ny dans ce cas, mais votre boucle est passée à examiner la rangée 4.


3 Réponses :


1
votes

Comme d'autres personnes ont dit que vous devez aller du bas de vos données en haut, Si vous n'êtes intéressé que par les lignes 3 à 25, essayez:

For i = 25 To 3 Step -1


0 commentaires

0
votes

Il est possible avec un index croissant, avec une boucle tandis que lorsque vous ne supprimez pas une ligne, incrémentez simplement l'index pour tester la suivante.

Lorsque vous supprimez une ligne, Ne pas avancer car la ligne suivante est déplacée vers la ligne actuelle. Au lieu de cela, réduisez la liaison par un. xxx


0 commentaires

0
votes

Si vous voulez toujours aller de haut en bas et que vous connaissez la ligne de démarrage et de fin, vous pouvez utiliser une boucle tandis que vous pouvez utiliser une boucle tandis que vous pouvez utiliser une boucle tandis que vous pouvez utiliser une boucle tandis que vous pouvez utiliser une boucle tandis que vous pouvez utiliser une boucle tandis que vous pouvez utiliser une boucle tandis que vous pouvez utiliser.

For c = 3 To 25
    If Cells(i, 7).Value <> "CA" Then
        Rows(i).Delete
    Else
        i = i + 1
    End If
Next c


2 commentaires

Intéressant. Avec cette approche, il est en fait plus simple de remplacer le pendant avec une boucle pour , car l'index c augmente toujours.


@ Jean-Claudearbaut Yep, en utilisant une boucle pour itérer c plus syntaxiquement plus propre. Je vais ajouter à mes ans. Merci!