使用公式从VBA函数到Excel工作表的输出数组

时间:2011-07-06 17:51:50

标签: excel vba excel-vba

我找到了一个漂亮的RegEx功能,我正在使用它(见下文)。该函数输出一个数组。如果我只需要数组的第一个元素,这很好。但是我试图从引文数据中提取作者,所以我需要从这个输出中提取多个项目。

我知道Excel工作表中的数组。所以我尝试了= {ReFind(A3,“[^()] +”)},选择一个区域并按下ctrl + shift + enter,但它返回一个错误并且{= ReFind(A3,“[^()] + “)}只是在单元格中复制公式。

有没有办法让函数使用公式将数组输出到多个单元格?我可以在不写更多vba的情况下离开吗?

Function ReFind(FindIn, FindWhat As String, _
    Optional IgnoreCase As Boolean = False)
Dim i As Long
Dim matchCount As Integer
Dim RE As Object, allMatches As Object, aMatch As Object
Set RE = CreateObject("vbscript.regexp")
RE.Pattern = FindWhat
RE.IgnoreCase = IgnoreCase
RE.Global = True
Set allMatches = RE.Execute(FindIn)
matchCount = allMatches.Count
If matchCount >= 1 Then
    ReDim rslt(0 To allMatches.Count - 1)
    For i = 0 To allMatches.Count - 1
        rslt(i) = allMatches(i).Value
    Next i
    ReFind = rslt
Else
    ReFind = ""
End If
End Function

1 个答案:

答案 0 :(得分:2)

您需要返回一个与调用单元格范围匹配的二维数组(以便您将其作为多单元格数组输入(不要输入{}只需选择单元格,输入公式并按Control-移位输入)) 您当前正在返回一维数组