Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用公式将VBA函数的数组输出到Excel工作表_Vba_Excel - Fatal编程技术网

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

使用公式将VBA函数的数组输出到Excel工作表,vba,excel,Vba,Excel,我发现我正在使用一个漂亮的正则表达式函数(见下文)。该函数输出一个数组。如果我只需要数组的第一个元素,这是很好的。但是我试图从引文数据中提取作者,所以我需要从这个输出中提取多个项目 我知道Excel表格中的数组。所以我尝试了={ReFind(A3,“[^()]+”),选择了一个区域并按下ctrl+shift+enter,但它返回了一个错误,{=ReFind(A3,“[^()]+”}只是在单元格中复制了公式 有没有办法让函数使用公式将数组输出到多个单元格?我可以不用写更多的vba就离开吗 Func

我发现我正在使用一个漂亮的正则表达式函数(见下文)。该函数输出一个数组。如果我只需要数组的第一个元素,这是很好的。但是我试图从引文数据中提取作者,所以我需要从这个输出中提取多个项目

我知道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

您需要返回一个与调用单元格范围匹配的二维数组(这样您就可以将其作为多单元格数组公式输入(不要输入{},只需选择单元格,输入公式并按Control shift-enter键即可))
您当前返回的是一维数组

我的破解解决方案是向函数添加一个新的可选变量,以从数组中提取第i项。但是如果我能使用Excel内置的formula数组功能,我会很高兴的。事实上,不需要对函数做任何更改,只需从公式中删除大括号{},它就可以完美地工作。谢谢