J'ai une feuille de calcul, je dois supprimer des lignes en fonction de la valeur de la cellule.
Les cellules à vérifier sont dans la colonne A ..
Si la cellule contient "-" .. Supprimer la ligne
Je ne parviens pas à trouver un moyen de le faire. J'ouvre un classeur, copie tout son contenu dans un autre, puis supprime des lignes et des colonnes entières, mais certaines lignes doivent être supprimées en fonction de la valeur de la cellule.
Besoin d'aide ici.
METTRE À JOUR
Échantillon de données que j'ai
La capture d'écran a été très utile - le code suivant fera l'affaire (en supposant que les données se trouvent dans la colonne A commençant par A1):
Sub RemoveRows()
Dim i As Long
i = 1
Do While i <= ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.Rows.Count
If InStr(1, ThisWorkbook.ActiveSheet.Cells(i, 1).Text, "-", vbTextCompare) > 0 Then
ThisWorkbook.ActiveSheet.Cells(i, 1).EntireRow.Delete
Else
i = i + 1
End If
Loop
End Sub
Le fichier exemple est partagé: https://www.dropbox.com/s/2vhq6vw7ov7ssya/RemoweDashRows.xlsm
Le moyen le plus simple de le faire serait d’utiliser un filtre filter .
Vous pouvez filtrer les cellules de la colonne A qui ne possèdent pas de "-" et copier/coller, ou le filtre (ma méthode préférée) pour toutes les cellules possédant un "-", puis sélectionner tout et supprimer - Une fois. vous supprimez le filtre, il ne vous reste plus que ce dont vous avez besoin.
J'espère que cela t'aides.
Vous pouvez copier une formule comme celle-ci dans une nouvelle colonne ...
=IF(ISNUMBER(FIND("-",A1)),1,0)
... puis triez sur cette colonne, mettez en surbrillance toutes les lignes dont la valeur est 1 et supprimez-les.
Si votre fichier n’est pas trop volumineux, vous pouvez toujours trier en fonction de la colonne contenant le - et, une fois qu’ils sont tous ensemble, il suffit de mettre en évidence et de supprimer. Puis re-trier à ce que vous voulez.
si vous souhaitez supprimer des lignes en fonction d'une valeur de cellule spécifique, vous pouvez supposer que nous avons un fichier contenant 10000 lignes et des champs ayant la valeur NULL . et basés sur cette valeur NULL, souhaitant supprimer toutes ces lignes et enregistrements.
voici quelques astuces simples . Commencez par ouvrir la boîte de dialogue Rechercher une substitution puis, dans l’onglet Remplacer, définissez toutes les cellules contenant des valeurs NULL avec Vase . puis appuyez sur F5 et sélectionnez l’option Vierge. et sélectionnez Supprimer, puis option pour Ligne entière.
il supprimera toutes ces lignes en fonction de la valeur de la cellule contenant Word NULL.
Vous pouvez parcourir chacune des cellules de votre plage et utiliser la fonction InStr
pour vérifier si une cellule contient une chaîne, dans votre cas; un trait d'union.
Sub DeleteRowsWithHyphen()
Dim rng As Range
For Each rng In Range("A2:A10") 'Range of values to loop through
If InStr(1, rng.Value, "-") > 0 Then 'InStr returns an integer of the position, if above 0 - It contains the string
rng.Delete
End If
Next rng
End Sub
Voici la macro de filtrage automatique sur laquelle vous pourriez baser une fonction:
Selection.AutoFilter
ActiveSheet.Range("$A$1:$A$10").AutoFilter Field:=1, Criteria1:="=*-*", Operator:=xlAnd
Selection.AutoFilter
J'utilise cette fonction de filtrage automatique pour supprimer les lignes correspondantes:
Public Sub FindDelete(sCol As String, vSearch As Variant)
'Simple find and Delete
Dim lLastRow As Integer
Dim rng As Range
Dim rngDelete As Range
Range(sCol & 1).Select
[2:2].Insert
Range(sCol & 2) = "temp"
With ActiveSheet
.usedrange
lLastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
Set rng = Range(sCol & 2, Cells(lLastRow, sCol))
rng.AutoFilter Field:=1, Criteria1:=vSearch, Operator:=xlAnd
Set rngDelete = rng.SpecialCells(xlCellTypeVisible)
rng.AutoFilter
rngDelete.EntireRow.Delete
.usedrange
End With
End Sub
appelez comme ça:
call FindDelete "A", "=*-*"
Cela m'a épargné beaucoup de travail. Bonne chance!