2017-04-12 134 views
3

我尝试使用类似的函数来区分以2或3个数字后面跟着更多空格字符开始的单元格(除空格字符外),但似乎无法识别后者。例如,对于两个小区,一个包含VBA中的“like”运算符中的空格字符

11一些文字

和另一种含

111一些文本

我一直在努力,如果写一个对第一但不是第二的陈述是真实的。我试图

if cells(i,1) like "*##[ ]*" then 

if cells(i,1) like "*##\s*" then 

if cells(i,1) like "*##[^#]*" then 

以下信息上使用正则表达式从各种源(与前两个我试图找出2位数字加一白色空格字符,第三个2位数字后跟一个非数字)。

它是for循环的一部分,正如在上面的例子中,唯一的数字位于字符串的开头,除了有时候是空白字符。在第一个代码示例中,if语句对于2和3的数字都是正确的,对于第二个和第三个数字,两者都是正确的。我不明白这一点,因为我已经读过关于正则表达式等功能。

我将不胜感激指导。我认为这是相对简单的,所以我确信我错过了一些明显的东西,并且如果是这样的话,我很抱歉。

回答

7

VBA的运营商不支持RegEx。相反,它有自己的格式。空格使用文字值匹配,不需要转义。

Input    Op  Pattern  Result 
"11 Some Text"  LIKE "## *"  True 
"11Some Text"  LIKE "## *"  False 

欲了解更多信息请登录Microsoft's documentation

如果您宁愿使用RegEx,请查看此answer。 @PortlandRunner善于花时间编写出色的指南,其中包括许多示例。

+0

感谢您的快速反应和有用的信息。然而,我确实尝试过使用'“## *”'并且仍然匹配单元格内容“111一些文本”,这就是让我感到困惑的东西。我并没有表示我在这个问题上试过这个道歉,但我尝试了一系列的事情(部分在挫折中),并认为我已经包含了最相关的东西。如果可能,我宁愿继续使用。 –

+0

我刚刚测试了''111'一些文字''反对'“## *”',我没有得到一个匹配。你可以再试一次吗? –

+0

@EuanRitchie我不认为''## *“'应该与111 Some Text匹配,因为空格不会跟随两个数字。我发布的答案表明。 – AlwaysData

1

我阅读了此MSDN网站上的资料,这似乎适用于我。

If Cells(i, 1).Value Like "## *" Then 
    Debug.Print ("Match") 
ElseIf Cells(i, 1).Value Like "### *" Then 
    Debug.Print ("Match") 
End If