簡體   English   中英

在VLOOKUP的VBA函數中使用命名范圍

[英]Using named range in VBA function for VLOOKUP

我的工作表上有以下內容:

  • 顯示貨幣的單元格[在A1 ]
  • 一系列單元格(兩列,一列用於貨幣,另一列用於相應的佣金百分比)[定義為/命名為RANGE ,並作用於工作表]
  • 正在嘗試根據A1RANGE確定計算佣金百分比的單元格

然后我有一個名為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM