簡體   English   中英

Excel,嘗試索引,匹配以使用VBA查找值

[英]Excel, Trying Index, Match, to lookup values with VBA

我正在嘗試使用VBA在單元格位置查找值,在詢問之前我已經搜索了Google以及整個stackoverflow,因為我似乎無法使其正常工作。

以下是我要使用的代碼,請注意,budgetcode引用包含第一列中一個代碼的單元格,mo引用包含數字(1-12)或包含短代碼(ytd,1qtr, 2qtr,3qtr)。 例如,我想在2月(2)期間提取CAD-NS,我應該得到5666.40。

Function eBudgetl(budgetcode As String, mo As String)
eBudgetl = Application.WorksheetFunction.Index(Range("Budget!G1:X5000"), _
   Application.WorksheetFunction.Match(budgetcode, Range("Budget!B1:B5000"), 0), _
   Application.WorksheetFunction.Match(mo, Range("Budget!G1:X1"), 0))
End Function

這是我要查找的部分數據:

                                       1    2          3       4
CAD-NS      I   Net Sales           5264.0  5666.4  5614.9  5966.6
COSMAT      E   Material            6207.5  3660.0  3661.9  3560.9
COSDL       E   Direct Labor         610.4  105.3   167.1   123.6
CAD-MOIL    E   Indirect Labor       671.2  163.4   181.6   161.7
CAD-MOSAL   E   Salary Overhead      601.0  106.0   101.0   101.0

這是起作用的單元格中的代碼,但是我需要在VBA中進行操作。 (我需要在vba中執行此操作的原因是,有時預算代碼將包含2個以上的引用,並以逗號分隔,而我將使用vba對其進行分隔,並分別進行查找。)

=INDEX(Budget!$G$1:$X$5000,MATCH($F12,Budget!$B$1:$B$5000,0),MATCH(AN$1,Budget!$G$1:$X$1,0))

非常感謝您的幫助,我已經參加了3天。

謝謝,

以諾

問題是Function參數類型。

當你調用你的功能mo =細胞AN1 ,包含數字 1 ,功能類型它轉換為字符串 "1" ,在其范圍由doen't exisit Budget!$G$1:$X$1 ,因為這些也是數字

解決方案是使用Variant作為函數參數類型。

為了使調試這種類型的錯誤更加容易,請嘗試不要在一行代碼中做太多事情。 將行拆分為2 x Match函數和Index ,將使您看到第二個匹配返回錯誤。

其他幾點:

  • 如果您以UDF形式調用此函數(即從工作表單元格調用),則最好不要對范圍進行硬編碼。 按照書面說明,對eBudgetl的調用在其任何數據更改時都不會自動重新計算。
  • Application對象具有IndexMatch的版本,因此不需要WorksheetFunction調用

重構版演示:

Function eBudgetl(rData As Range, rBudCode As Range, rMo As Range, budgetcode As Variant, mo As Variant)
    Dim rw As Variant
    Dim col As Variant

    With Application
        col = .Match(budgetcode, rBudCode, 0)
        rw = .Match(mo, rMo, 0)
        eBudgetl = .Index(rData, col, rw)
    End With
End Function

稱為

=eBudgetl(Budget!$G$1:$X$5000,Budget!$B$1:$B$5000,Budget!$G$1:$X$1,$F12,AN$1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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