Excel Vba-Similar Function

时间:2018-03-26 22:32:27

标签: excel vba excel-vba

我很难解决这个问题:

在VBA语法中有这个函数:

If Left("abcdef",3)="abc" then 
    Msgbox "True"

这个功能太简单了,但是有什么办法可以解决这个问题。

要有这样的东西

If left("abcdef",3) is in ["A".."Z"] or if left("1265avd0",2) is in [1..9]

这意味着检查等于left ("abcdef",3)的{​​{1}}是否在此Interval [“A”..“Z”]中,或者检查"abc"是数字且位于[1..9]

希望你能理解我想做的事情

有人可以点我这么做吗?

2 个答案:

答案 0 :(得分:3)

您可以使用Like运算符进行此简单比较。

Option Explicit
Option Compare Text 'for case insensitive matching
Sub dural()
    Const S1 As String = "abcdef"
    Const S2 As String = "1265avd0"

Debug.Print Left(S1, 3) Like "[A-Z][A-Z][A-Z]"
Debug.Print Left(S2, 2) Like "[1-9][1-9]"
End Sub

在这种情况下,两者都将返回TRUE

正如@chrisneilsen所指出的,比较可以简化为:

S1 Like "[A-Z][A-Z][A-Z]*"
S2 Like "[1-9][1-9]*"    

您可以使用以下内容进行测试:

If Left(myString, 3) Like "[A-Z][A-Z][A-Z]" or _
  Left(myString, 2) Like "[1-9][1-9]" then
   'do something
End if

在简化版中:

If myString Like "[A-Z][A-Z][A-Z]*" or _
    myString Like "[1-9][1-9]*" then
   'do something
End if

使用正则表达式可以完成更复杂的模式匹配。

如果您不想设置Option Compare,请将alpha模式更改为"[A-Za-z]"

答案 1 :(得分:2)

您可以使用正则表达式(" RegEx")。

该模式具有非捕获组(?:...),可以确定字符串^的开头是否包含任何案例的三个字母:[a-zA-Z]{3}|两个数字\d{2}

如果符合任一标准,则MsgBox将返回 True ,否则返回 False

Sub test()

    Dim RegEx As New RegExp, testString As String

    testString = "53bcko390872"

    With RegEx
        .Pattern = "^(?:[a-zA-Z]{3}|\d{2})"
        MsgBox .test(testString)    'will prompt True/False
    End With

End Sub

您可以将MsgBox行替换为有用的内容,例如

If .test(testString) [= True] Then...

Click Here ,了解正则表达式的实时演示(可选)。

  

注意您需要设置对Microsoft VBScript Regular Expressions x.x

的引用