结合RegEx并填充数量不足的细胞

时间:2015-05-08 18:13:46

标签: regex excel vba excel-vba

我在Excel中有一个单元格,在单元格A1中包含一个长字符串:

"ABC12+BED58,YZ001"

我有以下正则表达式来匹配我的字符串中的一些特定变量

strPattern = "[A-Z]{1,3}[0-9]{2,4}"

基本上,我需要编写一个宏或一个函数(我更喜欢一个函数),它将填充单元格A2,A3,A4,如下所示:

ABC12
BED58
YZ001

问题是,字符串中有一些不确定的参数(例如,它可以一直到A200)。

我正在考虑一个能够返回第N个唯一匹配的函数get_n_variables(str, n)

到目前为止,这是我的进展,但函数返回#VALUE!

Function simpleCellRegex(Myrange As Range) As String
    Dim regEx As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim matches As Object


    strPattern = "[A-Z]{1,3}[0-9]{2,4}"

    If strPattern <> "" Then
        strInput = Myrange.Value
        strReplace = ""

        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With

        If regEx.Test(strInput) Then
            Set matches = regEx.Execute(strInput)
            simpleCellRegex = matches(0).SubMatches(0)
        Else
            simpleCellRegex = "Not matched"
        End If
    End If
End Function

2 个答案:

答案 0 :(得分:1)

来自MrExcel Forum

  

您无法在单元格中放置函数来更改其他单元格。功能不起作用。

因此,它应该是 data: $("#period-form").serialize() + '&idCompany=' + idCompany ,就像这样,例如(使用我们的输入字符串输出所选单元格下的匹配项):

sub

输出:

enter image description here

答案 1 :(得分:0)

如果使用数组

,实际上仍然可以使用函数
  • 选择B1:D1
  • 输入此公式=simpleCellRegex(A1)并按 CTRL + SHIFT + ENTER

如果您不知道在多个单元格中输入的匹配数量多于可能匹配的数量

Function simpleCellRegex(StrIn As String) As Variant

    Dim regEx As Object
    Dim regMC As Object
    Dim X
    Dim strPattern As String
    Dim lngCnt As Long

    strPattern = "[A-Z]{1,3}[0-9]{2,4}"

    Set regEx = CreateObject("vbscript.regexp")

     With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
      If .Test(StrIn) Then
          Set regMC = .Execute(StrIn)
          ReDim X(0 To regMC.Count - 1) As String
            For lngCnt = 0 To UBound(X)
                X(lngCnt) = regMC(lngCnt)
            Next
          simpleCellRegex = X
      Else
          simpleCellRegex = "Not matched"
      End If
    End With
End Function