0
votes

Vérifiez si la cellule est du texte et si oui, supprimez la ligne

Mise à jour:

Le jeu de données est composé de chaînes Nombre si (je ne l'obtiens pas) -> Je peux faire toutes les choses mathématiques avec eux comme avec des chiffres réguliers. P>

problème Est-ce que j'ai besoin de séparer les cellules qui ressemblent à cette "186,85" et des cellules qui ressemblent à ce "1,76 dividende". p>

=========================== = P>

J'ai besoin d'une boucle pour vérifier la ligne à la ligne si la cellule contient du texte (mot "dividende" spécifiquement) ou s'il n'est qu'un numéro. S'il s'agit d'un texte, puis supprimez-le et passez à la ligne suivante. P>

Il fait une certaine suppression, mais il essuie 50 rangées de données presque à chaque fois (je n'ai que deux lignes de texte peuplées de texte dans ces données particulières. ensemble). Ces lignes sont des chiffres. P>

Dim i As Long
i = 2

Do
    If WorksheetFunction.IsText(Sheets("Data").Cells(i, 5)) = True Then
        If Not Worksheets("Data").Cells(i, 5).Value = "" Then
            Worksheets("Data").Rows(i).Delete
        End If
    End If
    i = i + 1
Loop Until i = 100


1 commentaires

Veuillez revenir à cela et cliquez sur la case à gauche de la contribution qui a répondu à la question. Cela aidera les visiteurs futurs sur le site à la recherche d'aide pour des problèmes similaires. En outre, vous pouvez uplifier toutes les contributions utiles.


4 Réponses :


0
votes

Essayez quelque chose comme ceci:

Sub test()

    Dim i As Long

    For i = 100 To 2 Step -1

        With ThisWorkbook.Worksheets("Data")


            If WorksheetFunction.IsText(.Cells(i, 5)) = True Then

                If Not .Cells(i, 5).Value = "" Then
                    .Rows(i).EntireRow.Delete
                End If

            End If

        End With

    Next i

End Sub


1 commentaires

Merci pour votre réponse. Malheureusement, cela supprime toujours la moitié des données de données à chaque fois que je l'exécute: /



0
votes

Le ci-dessous a été mis à jour sur une plage dynamique. Cela n'aura pas besoin de modification quel que soit le nombre de lignes de votre feuille.

Plus important encore, la suppression des lignes à l'intérieur d'une boucle entraînera votre gamme à chaque suppression. Le chemin autour de cela est de boucler vers l'arrière

ou, encore mieux ..

Ne supprimez pas les cellules à l'intérieur de votre boucle. Chaque fois que vos critères sont remplis, vous forcez une action (suppression). Au lieu de cela, rassemblez toutes les cellules à supprimer à l'intérieur de votre boucle, puis supprimez l'ensemble de la collection ( Union ) à la fois en dehors de la boucle. Cela nécessite 1 action dans une action totale 1 action par instance de texte


xxx


0 commentaires

0
votes

Vous pouvez utiliser spécialcells avec xlcelltypeconstants-2 ... pas besoin d'une boucle. Voir Méthode de gamme.SpecialCells (Excel) et XLSpecialCellsValue (Excel)

est Ce que vous essayez? xxx


0 commentaires

0
votes

Merci à tous pour des réponses rapides et des efforts.

J'ai réussi à faire fonctionner cette solution avec Instr () Fonction: p>

''loop through the Data and remove all rows containing text (Dividend payments which we don't need)

Dim i As Long
Dim ws As Worksheet
Dim searchText As String
Dim searchString As String

    i = 2
Set ws = Sheets("Data")


Do Until ws.Cells(i, 2).Value = ""

    searchText = "Dividend"
    searchString = ws.Cells(i, 2).Value

        If InStr(searchString, searchText) Then
            ws.Rows(i).Delete
        End If

        i = i + 1
Loop


1 commentaires

Pour indiquer que la question a été résolue, acceptez une réponse. Stackoverflow.com/help/accepted-answer . Envisagez de supprimer résolu du titre de la question.