在另一张纸上传递范围到vlookup

我不能像我可以使用= vlookup那样为函数引用一个范围。

这工作: =MVLOOKUP(a2,B:C,2,",",", ")
这不是: =MVLOOKUP(a2,Sheet3!B:C,2,",",", ")

代码:

 Public Function MVLookup(Lookup_Values, Table_Array As Range, Col_Index_Num As Long, Input_Separator As String, Output_Separator As String) As String Dim in0, out0, i in0 = Split(Lookup_Values, Input_Separator) ReDim out0(UBound(in0, 1)) For i = LBound(in0, 1) To UBound(in0, 1) out0(i) = Application.WorksheetFunction.VLookup(in0(i), Table_Array, Col_Index_Num, False) Next i MVLookup = Join(out0, Output_Separator) End Function 

我不懂基础,我不打算学习,我甚至很less用excel,所以对这个蹩脚的问题抱歉。 我想基本是真正的“基本”,我花了30分钟从参考(包括阅读)到这一点,但其他60分钟在挫折,因为上述问题。
帮助我,让我可以回到我的自由生活的自由生活!

编辑:虽然上面的代码在excel重新启动后工作,Jeeped给了我一个更安全的解决scheme和更通用的function。 感谢那。

我不打算在string以外的地方使用它,但感谢此外,我错误地认为有一个数据types的检查每次和types在后台传递,并作出相应的行为。 我也学会了如何设置默认值functioninputvariables。

见解决scheme。

再次感谢,Jeeped!

你把"1"弄糊涂了,不pipe你个人对VBA的厌恶如何,我真的不知道任何将它们视为相同值的编程语言(可能是工作表的COUNTIF函数除外)。

 Public Function MVLookup(Lookup_Values, table_Array As Range, col_Index_Num As Long, _ Optional Input_Separator As String = ",", _ Optional output_Separator As String = ", ") As String Dim in0 As Variant, out0 As Variant, i As Long in0 = Split(Lookup_Values, Input_Separator) ReDim out0(UBound(in0)) For i = LBound(in0) To UBound(in0) If IsNumeric(in0(i)) Then If Not IsError(Application.Match(Val(in0(i)), Application.Index(table_Array, 0, 1), 0)) Then _ out0(i) = Application.VLookup(Val(in0(i)), table_Array, col_Index_Num, False) Else If Not IsError(Application.Match(in0(i), Application.Index(table_Array, 0, 1), 0)) Then _ out0(i) = Application.VLookup(in0(i), table_Array, col_Index_Num, False) End If Next i MVLookup = Join(out0, output_Separator) End Function 

当你将一个string拆分成一个变体数组的时候,你最终会得到一个string元素的数组。 诚然,他们看起来像数字,但他们不是真正的数字; 仅仅是真实的数字的文字代表性的传真。 当你的table_array参数中的第一列用真实数字填充时, VLOOKUP函数不会将它们视为数字。

IsNumeric函数可以重新构造一个看起来像一个数字的string,然后Val函数可以将该文本看起来像一个数字转换为一个真正的数字。

我还添加了一个快速检查,以确保你正在寻找的是在你试图填充返回值到数组之前。

您的拆分string是一维变体数组。 LBound / UBound函数中不需要提供排名。

mvlookup_sample mvlookup
来自MVLOOKUP的 Sheet3 结果的 示例数据

在Excel B:Sheet3!C这不是一个有效的范围参考ANYWHERE B:Sheet3!C

B:CSheet3!B:C

编辑。 根据Jeeped的评论更正。