/ / Supprimer les paires de lignes basées sur la valeur dans la colonne - vba, excel-vba, excel-2010, excel

Supprimer des paires de lignes en fonction de la valeur dans la colonne - vba, excel-vba, excel-2010, excel

Une machine d'essai teste les pièces à deux vitesses différentes: 50 et 200 tr / min. La machine sort les données de chaque pièce à chaque vitesse de telle sorte que

Rangée 1 = partie 1 à 50 tr / min
Rangée 2 = partie 1 à 200 tr / min
Rangée 3 = partie 2 à 50 tr / min
Rangée 4 = partie 2 à 200 tr / min

et ainsi de suite pour environ 23 000 pièces.

Si un numéro de pièce échoue pour une vitesse spécifique, leles données montreraient "n.i.O." dans la colonne H de cette ligne, mais il ne l'afficherait que pour cette vitesse. J'essaie d'écrire une macro qui vérifiera si une ligne contient la valeur "n.i.O.", puis je supprime cette ligne et la ligne de l'autre vitesse. Voici le code que j'ai jusqu'à présent:

Sub DeleteFailures()

Dim r As Long

Dim lastrow As Long

lastrow = Cells(Rows.Count, "A").End(xlUp).Row

For r = 1 To lastrow

If Cells(r, "H").Value = "n.i.O." Then

If Cells(r, "E").Value = "50" Then

Rows(r + 1).EntireRow.Delete

Rows(r).EntireRow.Delete

ElseIf Cells(r, "E").Value = "200" Then

Rows(r - 1).EntireRow.Delete

Rows(r).EntireRow.Delete

End If

Else

End If

Next

End Sub

Cela ne semble pas vouloir fonctionner pour moi. Je pense que le problème pourrait être qu'il saute une ligne à chaque suppression, mais je ne suis pas sûr. Existe-t-il une autre approche qui pourrait mieux fonctionner?

Réponses:

0 pour la réponse № 1

C'est exactement la raison pour laquelle vous pensez. Pour le faire fonctionner, vous devez boucler en commençant par le bas:

For r = lastrow To 1 Step -1

La totalité For Je pense que le bloc de boucle devrait ressembler à ceci (changé ElseIf partie):

For r = lastrow To 1 Step -1
If Cells(r, "H").Value = "n.i.O." Then
If Cells(r, "E").Value = "50" Then
Rows(r + 1).EntireRow.Delete
Rows(r).EntireRow.Delete
ElseIf Cells(r, "E").Value = "200" Then
Rows(r).EntireRow.Delete
Rows(r - 1).EntireRow.Delete
r = r - 1
End If
Else
End If
Next