【发布时间】: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 中内置的公式数组功能,我会很高兴。