标签:VBA,自定义函数
这个自定义函数来自于forum.ozgrid.com,可以在指定表中查找多个值,并返回一组结果,而这些结果可以传递给另一个函数。
该函数代码如下:
Public Function MultiVLookup(ReferenceIDs As String, Table As Range, TargetColumn As Integer, Optional Delimeter As String = ",") As Variant()
Dim IDs
Dim Length As Long
Dim i As Long
IDs = Split(ReferenceIDs, Delimeter, -1, vbTextCompare)
Length = (UBound(IDs) - LBound(IDs) + 1)
If Length = 0 Then
MultiVLookup = Null
Exit Function
End If
Dim Result() As Variant
ReDim Result(Length - 1)
For i = 0 To Length - 1
Result(i) = Application.WorksheetFunction.VLookup(IDs(i), Table, TargetColumn, False)
Next
MultiVLookup = Result
End Function
其中,参数是ReferenceIDs代表要查找的值;参数Table是包含查找内容的表;参数TargetColumn代表表中返回结果的列;参数Delimeter代表分隔符,可选,取决于第一个参数。
例如,下图1所示的数据,表名为MyTable。
图1
要查找MyTable表中A、B、D对应的第2列的值并求和,可使用公式:
=SUM(MultiVLookup("A,B,D",MyTable,2))
或者,将要查找的值放在一个单元格中,然后使用公式来查找相应的值,如下图2所示。
图2