[英]Using named range in VBA function for VLOOKUP
我的工作表上有以下內容:
A1
] RANGE
,並作用於工作表] A1
和RANGE
確定計算佣金百分比的單元格 然后我有一個名為Calculate
的VBA函數,如下所示:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = [VLOOKUP(LookupValue, LookupRange, 2)]
End Function
確定百分比的單元格具有以下內容:
=Calculate(A1, RANGE)
問題是單元格只返回#VALUE!
...
知道我可能做錯了嗎?
我嘗試過類似提示到Range()
幾個方面,將LookupRange.Value2
傳遞給VLOOKUP
等,但沒有一個工作。
我也試過調試,注意到LookupRange
確實包含了Value2
所需的范圍,這就是為什么我試圖將它傳遞給函數。
旁注: 上面提到的功能和布局只是一個虛擬 - 實際功能稍微復雜一些,因為它依賴於協商費率,月利潤率等。這就是我首先使用VBA的原因。 我知道我在查找時遇到了問題,因為它是函數中唯一似乎失敗的東西 - 其他一切都對應並計算。
來自MSDN :
使用方括號的優點是代碼更短。 使用
Evaluate
的優點是參數是一個字符串,因此您可以在代碼中構造字符串或使用Visual Basic變量。
換句話說,你可以使用
Calculate = [VLOOKUP(3, A1:B100, 2)]
但你不能使用
LookupValue = 3
LookupRange = Range("A1:B100")
'or
'LookupRange = "A1:B100"
Calculate = [VLOOKUP(LookupValue, LookupRange, 2)]
你能做的是:
選項1:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = Evaluate("VLOOKUP(" & LookupValue & "," & LookupRange.Address & ", 2")
End Function
或更好:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = Evaluate("VLOOKUP(" & LookupValue & ",'" & _
LookupRange.Parent.Name & "'!" & LookupRange.Address & ", 2")
End Function
不過我建議:
選項2:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = Application.VLookup(LookupValue, LookupRange, 2)
End Function
我希望你知道第4個參數的含義:
如果為
TRUE
或省略,則返回精確或近似匹配。 如果未找到完全匹配,則返回小於lookup_value的下一個最大值。 table_array第一列中的值必須按升序排列; 否則,VLOOKUP
可能無法給出正確的值。 您可以通過從“數據”菜單中選擇“排序”命令並選擇“升序”來按升序排列值。
順便說一句, Calculate
不是UDF的好名字,因為VBA已經有了函數Application.Calculate
。 我會重命名它以避免混淆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.