使用公式将数组从 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 工作表的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Excel 数组公式传递给 VBA UDF?

从工作表将二维数组传递给 VBA/UDF 函数

将多维数组传递到 VBA 中的 Excel UDF

将公式从数组放入 Excel 表格列

excel VBA - 从函数中重新获得可变长度数组

Excel VBA:将计算结果数组作为参数传递给函数