Mik*_*étt 6 excel vba range excel-vba vlookup
我的工作表上有以下内容:
A1]的单元格RANGE,并作用于工作表]A1和确定计算佣金百分比的单元格RANGE然后我调用了一个VBA函数Calculate,如下所示:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = [VLOOKUP(LookupValue, LookupRange, 2)]
End Function
Run Code Online (Sandbox Code Playgroud)
确定百分比的单元格具有以下内容:
=Calculate(A1, RANGE)
Run Code Online (Sandbox Code Playgroud)
问题是细胞刚刚返回#VALUE!......
知道我可能做错了吗?
我已经试过几件事情像类型暗示来Range(),通过LookupRange.Value2对VLOOKUP等,其中没有工作.
我也试过调试,注意到LookupRange它实际上包含了所需的范围Value2,这就是为什么我试图将它传递给函数.
旁注:上面提到的功能和布局只是一个虚拟 - 实际功能有点复杂,因为它依赖于协商费率,月利润率等.这就是我首先使用VBA的原因.我知道我在查找时遇到了问题,因为它是函数中唯一似乎失败的东西 - 其他一切都对应并计算.
Dmi*_*liv 11
来自MSDN:
使用方括号的优点是代码更短.使用的优点
Evaluate是参数是一个字符串,因此您可以在代码中构造字符串或使用Visual Basic变量.
换句话说,你可以使用
Calculate = [VLOOKUP(3, A1:B100, 2)]
Run Code Online (Sandbox Code Playgroud)
但你不能使用
LookupValue = 3
LookupRange = Range("A1:B100")
'or
'LookupRange = "A1:B100"
Calculate = [VLOOKUP(LookupValue, LookupRange, 2)]
Run Code Online (Sandbox Code Playgroud)
你能做的是:
选项1:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = Evaluate("VLOOKUP(" & LookupValue & "," & LookupRange.Address & ", 2")
End Function
Run Code Online (Sandbox Code Playgroud)
或更好:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = Evaluate("VLOOKUP(" & LookupValue & ",'" & _
LookupRange.Parent.Name & "'!" & LookupRange.Address & ", 2")
End Function
Run Code Online (Sandbox Code Playgroud)
不过我建议:
选项2:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = Application.VLookup(LookupValue, LookupRange, 2)
End Function
Run Code Online (Sandbox Code Playgroud)
我希望你知道第4个参数的含义:
如果
TRUE或省略,则返回精确或近似匹配.如果未找到完全匹配,则返回小于lookup_value的下一个最大值.table_array第一列中的值必须按升序排列; 否则,VLOOKUP可能无法给出正确的值.您可以通过从"数据"菜单中选择"排序"命令并选择"升序"来按升序排列值.
顺便说一下,Calculate对于UDF来说,这不是一个好名字,因为VBA已经具备了功能Application.Calculate.我会重命名它以避免混淆.