web-dev-qa-db-fra.com

Comment supprimer une ligne en fonction de la valeur de la cellule

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

Sample

15
sikas

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

12
Peter L.

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.

18
John Bustos

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.

9
weir

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.

4
Jorjo Peralta

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.

2
zaheer

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
1
Francis Dean

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!

1
BeachBum68