使用公式将数组从 VBA 函数输出到 Excel 工作表
Posted
技术标签:
【中文标题】使用公式将数组从 VBA 函数输出到 Excel 工作表【英文标题】:Output array from VBA function to Excel sheet using formula 【发布时间】:2011-07-06 17:51:50 【问题描述】:我发现我正在使用一个漂亮的 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
【问题讨论】:
我被黑的解决方案是向函数添加一个新的可选变量,以从数组中提取第 i 个项目。但如果我可以使用 Excel 中内置的公式数组功能,我会很高兴。 【参考方案1】:您需要返回一个与调用单元格范围匹配的二维数组(以便您将其作为多单元格数组公式输入(不要输入 只需选择单元格,输入公式并按 Control-移入)) 您当前正在返回一个一维数组
【讨论】:
实际上,无需对函数进行任何更改,只需从公式中删除大括号 ,它就可以完美运行。谢谢!以上是关于使用公式将数组从 VBA 函数输出到 Excel 工作表的主要内容,如果未能解决你的问题,请参考以下文章