web-dev-qa-db-fra.com

Supprimer la ligne entière si la cellule contient la chaîne X

Je suis nouveau dans VBA et j'essaie de trouver un moyen de supprimer toutes les lignes (et de décaler les cellules vers le haut, si possible) lorsque la cellule de colonne du site Web contient le mot none. La table contient plus de 5000 enregistrements, ce qui me permettrait de gagner beaucoup de temps.

J'apprécie toutes les suggestions. Merci d'avance!

35
AnchovyLegend

Ce n'est pas une tâche VBA - Cette tâche spécifique est plus facile à suivre avec le filtre automatique.

1.Insert Auto filter (Dans Excel 2010, cliquez sur home -> (Édition) Trier et filtrer -> Filtrer)
2. Filtrer dans la colonne "Sites Web"
3. Marquez le 'aucun' et supprimez-les
4. Effacer le filtre

71
MBK

Ok, je le sais pour VBA, mais si vous devez le faire pour une suppression en bloc unique, vous pouvez utiliser la fonctionnalité Excel suivante: http://blog.contextures.com/archives/2010/06/21/fast -way-to-find-and-delete-Excel-rows / J'espère que cela aidera tout le monde

Exemple à la recherche de la chaîne "papier":

  1. Dans la boîte de dialogue Rechercher et remplacer, tapez "papier" dans la zone Rechercher.
  2. Cliquez sur Tout rechercher pour afficher une liste de cellules avec "papier".
  3. Sélectionnez un élément dans la liste et appuyez sur Ctrl + A pour sélectionner la liste entière et toutes les cellules "papier" de la feuille de calcul.
  4. Sous l'onglet Accueil du ruban, cliquez sur Supprimer, puis sur Supprimer les rangées de feuilles.
17
Barry Carter

Dans l'onglet "Développeur", accédez à "Visual Basic" et créez un module. Copier coller ce qui suit. N'oubliez pas de changer le code, en fonction de ce que vous voulez. Puis lancez le module.

  Sub sbDelete_Rows_IF_Cell_Contains_String_Text_Value()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 390
    For iCntr = lRow To 1 Step -1
        If Cells(iCntr, 5).Value = "none" Then
            Rows(iCntr).Delete
        End If
    Next
    End Sub

lRow: Mettez le nombre de lignes que le fichier actuel a.

Le nombre "5" dans le "Si" est pour la cinquième colonne (E)

8
Apolo Radomer

J'aimerais ajouter à la réponse de @ MBK. Bien que la réponse de @ MBK ait été très utile pour résoudre un problème similaire, il serait préférable que @MBK inclue une capture d'écran expliquant comment filtrer une colonne particulière . enter image description here

6
palmbardier

Cela a été mentionné dans un autre commentaire, mais vous pouvez essayer quelque chose comme ça.

Sub FilterAndDelete()

Application.DisplayAlerts = False 

     With Sheet1 'Change this to your sheet name

         .AutoFilterMode = False   
         .Range("A3:K3").AutoFilter
         .Range("A3:K3").AutoFilter Field:=5, Criteria1:="none"
         .UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete 

     End With

Application.DisplayAlerts = True

End Sub

Je n'ai pas testé cela et cela vient de la mémoire, donc cela peut nécessiter quelques ajustements, mais le travail devrait être fait sans avoir à parcourir des milliers de lignes. Vous devrez supprimer le 11 juillet pour que UsedRange soit correct ou modifier le décalage en 2 lignes au lieu de 1 dans .Offset(1,0).

En règle générale, avant de procéder à .Delete, je vais exécuter la macro avec .Select au lieu de Supprimer afin que je puisse être sûr que la plage correcte sera supprimée. est en cours de suppression.

1
Soulfire

Essaye ça ...

Dim r as Range
Dim x as Integer

For x = 5000 to 4 step -1 '---> or change as you want //Thanx 4 KazJaw

  set r = range("E" & format(x))
  if ucase(r.Value) = "NONE" then
    Rows(x).EntireRow.Delete
  end if 

Next
0
matzone