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
3 Réponses :
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
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
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