Excel 从范围内给定输入的多次出现返回偏移量

Excel 从范围内给定输入的多次出现返回偏移量,excel,vba,user-defined-functions,Excel,Vba,User Defined Functions,我已经构建了一个UDF来返回搜索列表中所有匹配偏移量的逗号分隔值。有点像vlookup,它返回一个列表而不是一个值 我从一个子例程运行它进行测试,它工作得很好,当我尝试从电子表格运行它时,它会出错 这是我的测试子程序: Sub TestHightlightFindValues() Debug.Print FindOffsetMatches(Range("P4").Text, Sheets("Org details").Range("A2:A10119"), 1) End Sub 这是我

我已经构建了一个UDF来返回搜索列表中所有匹配偏移量的逗号分隔值。有点像vlookup,它返回一个列表而不是一个值

我从一个子例程运行它进行测试,它工作得很好,当我尝试从电子表格运行它时,它会出错

这是我的测试子程序:

Sub TestHightlightFindValues()
    Debug.Print FindOffsetMatches(Range("P4").Text, Sheets("Org details").Range("A2:A10119"), 1)
End Sub
这是我在Excel中的测试功能:

=FindOffsetMatches(P4,'Org details'!$A$2:$A$10119,1)

这是函数代码

Function FindOffsetMatches(SearchValue As String, SearchRange As Range, ReturnOffset As Long, Optional MyDelimiter As String = ",")
Dim FirstFound As String, FoundCell As Range, rng As Range, LastCell As Range, ReturnRange As Variant, X As Long, ReturnString As String
On Error GoTo ErrorFound
Set LastCell = SearchRange.Cells(SearchRange.Cells.Count)
Set FoundCell = SearchRange.Find(what:=SearchValue, after:=LastCell)
If Not FoundCell Is Nothing Then
FirstFound = FoundCell.Address
Else
GoTo NothingFound
End If
Set rng = FoundCell
Do Until FoundCell Is Nothing
    Set FoundCell = SearchRange.FindNext(after:=FoundCell)
    Set rng = Union(rng, FoundCell) '<-- This is where it errors, it thinks that FoundCell is empty only when called from an Excel sheet but not when called from a subroutine
    If FoundCell.Address = FirstFound Then Exit Do
Loop
ReturnRange = Split(rng.Address, ",")
ReturnString = Sheets(SearchRange.Worksheet.Name).Range(ReturnRange(LBound(ReturnRange))).Offset(0, ReturnOffset).Text
For X = LBound(ReturnRange) To UBound(ReturnRange)
    If X > LBound(ReturnRange) Then ReturnString = ReturnString & MyDelimiter & Sheets(SearchRange.Worksheet.Name).Range(ReturnRange(X)).Offset(0, ReturnOffset).Text
Next
FindOffsetMatches = ReturnString
Exit Function
'Error Handler
NothingFound:
FindOffsetMatches = "Not found"
Exit Function
ErrorFound:
FindOffsetMatches = "#N/A"
End Function
函数FindOffsetMatches(SearchValue为字符串,SearchRange为范围,ReturnOffset为长,可选MyDelimiter为字符串=“,”)
Dim FirstFound作为字符串,FoundCell作为范围,rng作为范围,LastCell作为范围,ReturnRange作为变量,X作为长度,ReturnString作为字符串
出现错误时转到ErrorFound
设置LastCell=SearchRange.Cells(SearchRange.Cells.Count)
设置FoundCell=SearchRange.Find(what:=SearchValue,after:=LastCell)
如果不是FoundCell,那就什么都不是了
FirstFound=FoundCell.Address
其他的
找不到任何东西
如果结束
设置rng=FoundCell
直到FoundCell一文不值
设置FoundCell=SearchRange.FindNext(后面:=FoundCell)
设置rng=Union(rng,FoundCell)'LBound(ReturnRange),然后ReturnString=ReturnString&MyDelimiter&Sheets(SearchRange.Worksheet.Name)。范围(ReturnRange(X)).Offset(0,ReturnOffset)。文本
下一个
FindOffsetMatches=ReturnString
退出功能
'错误处理程序
没有发现:
FindOffsetMatches=“未找到”
退出功能
错误发现:
FindOffsetMatches=“#不适用”
端函数
知道为什么会这样吗


提前谢谢。

FindNext
在UDF中不起作用。好的,谢谢,基于此信息,我现在更新了子例程,用结果填充列,而不是输入UDF,它工作正常。