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

je suis nouveau à VBA et j'essaie de trouver un moyen de supprimer toutes les lignes (et déplacer les cellules vers le haut, si possible) où la cellule de colonne de site web contient le mot none. La table contient 5000+ enregistrements et cela me sauver beaucoup de temps.

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

http://i39.tinypic.com/5ano1d.png

34
demandé sur ashleedawg 2013-07-12 05:10:36

6 réponses

ce n'est pas une tâche VBA - cette tâche spécifique est la plus facile avec Auto filter.

1.Insert de filtre Automatique (Dans Excel 2010, cliquez sur accueil-> (Édition) de Tri Et de Filtre -> Filtre)

2. Filtrer sur la colonne' sites Web'

3. Marque 'none' et les supprimer

4. Supprimer le filtre

68
répondu MBK 2013-07-18 08:21:07

Ok je sais cela pour VBA mais si vous avez besoin de faire ceci pour une suppression en vrac une fois terminée, vous pouvez utiliser la fonctionnalité Excel suivante: http://blog.contextures.com/archives/2010/06/21/fast-way-to-find-and-delete-excel-rows/ Hope this helps anyone

exemple rechercher la chaîne "papier":

  1. Dans le dialogue Rechercher et Remplacer, tapez "papier" dans la zone Rechercher.
  2. Cliquez sur Rechercher pour voir une liste de cellules avec "papier"
  3. sélectionnez un élément de la liste et appuyez sur Ctrl+A pour sélectionner la liste entière et sélectionner toutes les cases "papier" de la feuille de travail.
  4. dans l'onglet Accueil du ruban, cliquez Supprimer, puis cliquez Supprimer les rangées de feuilles.
17
répondu Barry Carter 2014-10-02 12:20:48

dans l'onglet "Développeur", allez à" Visual Basic " et créez un Module. Copier coller ce qui suit. Souvenez-vous de changer le code, en fonction de ce que vous voulez. Alors 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 : Mettre le nombre de lignes que le fichier courant.

Le nombre "5" dans le " SI " est pour la cinquième (e) colonne

7
répondu Apolo Radomer 2015-06-01 09:29:03

j'aimerais ajouter à la réponse de @MBK. Bien que j'ai trouvé la réponse de @MBK très utile pour résoudre un problème similaire, ce serait mieux si @MBK incluait une capture d'écran de la façon de filtrer une colonne particulière.enter image description here

5
répondu palmbardier 2015-09-08 16:13:38

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

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 ne l'ai pas testé et il est de mémoire, il peut donc nécessiter quelques retouches, mais il devrait faire le travail sans boucle à travers des milliers de lignes. Vous aurez besoin d'enlever le 11-Jul pour que UsedRange est de corriger ou de modifier le décalage de 2 lignes au lieu de 1 dans le .Offset(1,0).

généralement, avant que je fasse .Delete je vais lancer la macro avec .Select au lieu de supprimer de cette façon, je peux être sûr que la plage correcte sera supprimée, ce qui peut être utile de vérifier pour s'assurer que la plage appropriée est supprimée.

1
répondu Soulfire 2013-07-12 02:50:15

Essayez ceci ...

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
répondu matzone 2013-07-12 07:21:59