2010-07-15 8 views
2

a VBA tout bon mécanisme pour vérifier, si le contenu d'une cellule Excel donné correspond à une regex spécifique?VBA Regex question

Dans mon cas, je veux savoir, si une cellule a le format

m 
m2 
m1234 

En fait, il y a juste une lettre définie au début, suivi d'un montant non spécifié de chiffres. Comment mettre ceci dans une construction If-Else?

If Doc.Cells(1,1).Value ..... ??? 

Salue, poeschlorn

Répondre

5

Vous pouvez obtenir les objets VBScript RegExp via Outils-> Références & ajoutant « Microsoft VBScript Regular Expressions 5.5 »

Alternativement un moyen rapide de le faire, si vous n'avez pas besoin de vérifier une lettre ultérieure comme dans `m1234X1 est:

if Doc.Cells(1,1).Value like "[a-zA-Z]#*" then ...

(Cela ne nécessite pas une référence à quoi que ce soit)

+0

Je n'ai pas VB pourrait faire RegEx. C'est bon à savoir. –

+0

juste une autre question ... comment puis-je vérifier, si ma chaîne correspond à une expression régulière comme "abc_123" ou "abc123" (où "abc" est toujours au début?) – poeschlorn

0

je ne sais pas VBA, mais l'expression rationnelle [a-zA-Z][0-9]* pourrait être en mesure de correspondre à ce que vous voulez.

+0

Salut, semble bien, mais il reconnaît seulement "m2" ou "m10", ni "m" ... – poeschlorn

+0

Il devrait correspondre 'm'. –

+0

d'une manière étrange pas ... [mM] [0-9] * ne donne que m12, m1, m10 – poeschlorn

0

Voici ma fonction RegexContains. Passez la cellule et le motif et il retournera VRAI ou FAUX s'il le contient ou pas.

Function RegexContains(ByVal find_in As String, _ 
         ByVal find_what As String, _ 
         Optional IgnoreCase As Boolean = False) As Boolean 

Application.ScreenUpdating = False 

Dim RE As Object 
Set RE = CreateObject("vbscript.regexp") 

RE.Pattern = find_what 
RE.IgnoreCase = IgnoreCase 
RE.Global = True 
RegexContains = RE.Test(find_in) 

Application.ScreenUpdating = True 

End Function 

Maintenant, je ne sais pas exactement ce que vous voulez trouver dans votre exemple, mais si vous voulez savoir si la cellule contient une seule lettre suivie d'une ou plusieurs lettres, vous pouvez ensuite utiliser (en supposant la cellule est A1): = RegexContains (A1, "^ \ w \ d +")

  • le^marque le début de la phrase
  • les marques \ w un seul caractère alphabétique (a-Za- Z)
  • Le \ d + marque un ou plusieurs caractères numériques [0-9]

J'espère que cela aide.