我有两行数据,看起来像这样:
我想返回每个ID的所有位置编号,并将它们存储在一个数组中。我尝试过
={IF(A2:A562=E2,B2:B562)}
但是,每当我搜索的ID不是A列中的第一个时,它就会失败。(我尝试过按A列排序,但没有成功。)
因此,我想出了一个解决方法:我将使用以下公式。
={INDEX(B2:B562,positions(E2))}
positions
是一个VBA函数,它返回一个与指定ID匹配的行数组。该函数被编码为返回一个Variant
类型。但似乎VBA数组未能传递到Excel公式中。当我评估该公式时,positions(E2)
等于0。(我已经在VBA中检查过,我的数组已正确填充。)
那么如何使我的公式正确解释VBA数组呢?
更新:这是我的代码:
Function positions(idrange As Range) As Variant
Dim V As Variant
Dim l, nb As Integer
Dim id As Double
nb = 4
ReDim V(nb) As Variant
id = idrange.Value
Set cible = Sheet2.Range("B1")
For l = 1 To nb
Set cible = Sheet2.Columns(2).Find(What:=id, After:=cible, _
LookIn:=xlValues)
V(l) = cible.Row - 1
Next l
positions = Application.Transpose(V)
End Function
更新2:这是期望的输出