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?
3 Réponses :
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
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. P>
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. P>
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
Intéressant. Avec cette approche, il est en fait plus simple de remplacer le pendant code> avec une boucle code> pour code>, car l'index c code> augmente toujours.
@ Jean-Claudearbaut Yep, en utilisant une boucle pour itérer c plus syntaxiquement plus propre. Je vais ajouter à mes ans. Merci!
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 code> 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 code>. 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.