【问题标题】:Excel VBA - Looking up a string with wildcardsExcel VBA - 使用通配符查找字符串
【发布时间】:2017-08-02 04:23:39
【问题描述】:

我正在尝试查找包含通配符的字符串。我需要找到字符串出现在特定行中的位置。该字符串都采用“IP##W## XX”的形式,其中 XX 是我查找值的 2 个字母,## 是可以是任何随机数的数字通配符。因此,这就是我的查找字符串的样子:

FullLookUpString = "IP##W## " & LookUpString

我尝试使用Find 命令来查找第一次出现这种情况的列,但我不断出错。这是我到目前为止所拥有的,但它不起作用:L如果有人有简单的方法。对 VBA 很陌生-.-

Dim GatewayColumn As Variant
Dim GatewayDateColumn As Variant
Dim FirstLookUpRange As Range
Dim SecondLookUpRange As Range

FullLookUpString = "IP##W## " & LookUpString

Set FirstLookUpRange = wsMPNT.Range(wsMPNT.Cells(3, 26), wsMPNT.Cells(3, lcolumnMPNT))

Debug.Print FullLookUpString

GatewayColumn = FirstLookUpRange.Find(What:=FullLookUpString, After:=Range("O3")).Column

Debug.Print GatewayColumn

【问题讨论】:

  • 我认为 Find 不支持使用您需要的通配符。您也许应该查看 Like 运算符或正则表达式。

标签: regex vba excel


【解决方案1】:

根据@SJR 的评论,您可以通过两种方式做到这一点。使用LIKE 的模式是:

IP##W## [A-Z][A-Z]

使用正则表达式,模式为:

IP\d{2}W\d{2} [A-Z]{2}

示例代码:

Option Explicit

Sub FindString()

    Dim ws As Worksheet
    Dim rngData As Range
    Dim rngCell As Range

    Set ws = ThisWorkbook.Worksheets("Sheet1") '<-- set your sheet
    Set rngData = ws.Range("A1:A4")

    ' with LIKE operator
    For Each rngCell In rngData
        If rngCell.Value Like "IP##W## [A-Z][A-Z]" Then
            Debug.Print rngCell.Address
        End If
    Next rngCell

    ' with regular expression
    Dim objRegex As Object
    Dim objMatch As Object

    Set objRegex = CreateObject("VBScript.RegExp")
    objRegex.Pattern = "IP\d{2}W\d{2} [A-Z]{2}"
    For Each rngCell In rngData
        If objRegex.Test(rngCell.Value) Then
            Debug.Print rngCell.Address
        End If
    Next rngCell

End Sub

【讨论】:

  • 我最终设法弄明白了,我的解决方案与此类似,只是更适合我正在使用的电子表格,但非常感谢帮助我理解 Like 函数
【解决方案2】:

如果我们可以假设行中的所有字符串都匹配给定的模式,那么我们可以只检查最后三个字符:

Sub FindAA()
    Dim rng As Range, r As Range, Gold As String
    Set rng = Range(Range("A1"), Cells(1, Columns.Count))

    Gold = " AA"

    For Each r In rng
        If Right(r.Value, 3) = Gold Then
            MsgBox r.Address(0, 0)
            Exit Sub
        End If
    Next r
End Sub

【讨论】:

    【解决方案3】:

    试试这个:

    If FullLookUpString Like "*IP##W##[a-zA-Z][a-zA-Z]*" Then
        MsgBox "Match is found"
    End If
    

    它会找到你的模式(模式可以被任何字符包围 - 这是*允许的)。

    【讨论】:

      猜你喜欢
      • 2016-06-02
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多