使用公式将VBA函数的数组输出到Excel工作表
我发现我正在使用一个漂亮的正则表达式函数(见下文)。该函数输出一个数组。如果我只需要数组的第一个元素,这是很好的。但是我试图从引文数据中提取作者,所以我需要从这个输出中提取多个项目 我知道Excel表格中的数组。所以我尝试了={ReFind(A3,“[^()]+”),选择了一个区域并按下ctrl+shift+enter,但它返回了一个错误,{=ReFind(A3,“[^()]+”}只是在单元格中复制了公式 有没有办法让函数使用公式将数组输出到多个单元格?我可以不用写更多的vba就离开吗使用公式将VBA函数的数组输出到Excel工作表,vba,excel,Vba,Excel,我发现我正在使用一个漂亮的正则表达式函数(见下文)。该函数输出一个数组。如果我只需要数组的第一个元素,这是很好的。但是我试图从引文数据中提取作者,所以我需要从这个输出中提取多个项目 我知道Excel表格中的数组。所以我尝试了={ReFind(A3,“[^()]+”),选择了一个区域并按下ctrl+shift+enter,但它返回了一个错误,{=ReFind(A3,“[^()]+”}只是在单元格中复制了公式 有没有办法让函数使用公式将数组输出到多个单元格?我可以不用写更多的vba就离开吗 Func
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数组功能,我会很高兴的。事实上,不需要对函数做任何更改,只需从公式中删除大括号{},它就可以完美地工作。谢谢