1
votes

Comment supprimer des données de cellules où les données sont égales ou supérieures à 9 caractères?

Je dois supprimer les données des cellules contenant au moins 9 chiffres ou caractères. Par exemple, cela devrait être supprimé: 123456789, 987654321, 1234567898765, etc.

J'ai déjà le code qui vérifie chaque partie d'une cellule à comparer mais j'ai un problème pour construire la spécification du nombre.

La ligne d'exemple sur laquelle travailler le code ressemblera à ceci:

For g = 2 to RowNumber
    MyCell = " " & Cells(g, 2).Value & " "
    Word = Split(MyCell, " ")
    For j = 0 To UBound(Word)
        If Word >= 100000000 Then
            Cells(g, 2).Replace What:=Word(j), Replacement:=""
        End If 
    Next j
Next g

Mon code:

Aegis Transformation Cycle 566609354 Agent 73849496753


0 commentaires

3 Réponses :


1
votes

Une méthode consiste à utiliser expressions régulières .

Sub x()

Dim r As Range

With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "\d{9,}"
    For Each r In Range("A1:A10")
        r.Offset(, 1) = .Replace(r, "")
    Next r
End With

End Sub


0 commentaires

0
votes

Vous pouvez y parvenir assez facilement avec les expressions régulières. Le code suivant identifiera toute partie de votre chaîne contenant un nombre égal ou supérieur à 9 caractères et les supprimera

Public Sub Demo()
    Dim RegExp As Object
    Dim rng As Range
    Dim matches
    Dim c

    Set rng = Sheet1.Range("A1")

    Set RegExp = CreateObject("vbscript.regexp")

    With RegExp
        .MultiLine = False
        .Global = True
        .IgnoreCase = False
        .Pattern = "[0-9]{9,}"

        For Each c In rng
            If .test(c) Then
                Set matches = .Execute(c)
                MsgBox .Replace(c, vbNullString)
            End If
        Next c
    End With

End Sub


0 commentaires

1
votes

Vous pouvez également utiliser la fonction Len () avec Trim () comme ceci:

Sub DeleteBlanks()

Dim g As Long, RowNumber As Long

    With Sheets("SheetName")
        'Finds the last row in the first column
        RowNumber = .Cells(Rows.Count, 1).End(xlUp).Row

        For g = 1 To RowNumber 
            'Note:Value2 reads cells W/O formatting and is faster
            If Len(Trim(.Cells(g, 1).Value2)) >= 9 Then
                .Cells(g, 1).ClearContents
            End If
        Next g

    End With

End Sub


0 commentaires