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
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
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":
- Dans le dialogue Rechercher et Remplacer, tapez "papier" dans la zone Rechercher.
- Cliquez sur Rechercher pour voir une liste de cellules avec "papier"
- 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.
- dans l'onglet Accueil du ruban, cliquez Supprimer, puis cliquez Supprimer les rangées de feuilles.
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
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.
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.
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