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!
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
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":
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)
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.
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