2016-06-24 90 views
1

我想創建一個攤銷表,其中利率取決於用戶提供的兩個輸入。使用VLOOKUP與多個標準/多維Vlookup

X代表行,Y代表列。 X,Y和利率的數值已經在4 X 6表格中設置。例如,如果用戶輸入X = 2和Y = 3,則利率將被確定爲5%。

IF函數可以工作,但它會佔用大量時間並且效率不高。

我考慮過使用數組,我認爲Vlookup將是最有效的。在Excel中,我用Vlookup和Match一起工作,但我很難將其翻譯成VBA代碼。

Option Explicit 

Sub Amortisation() 

    Dim intRate, loanLife, initLoanAmt 
    Dim yrBegBal, intComp, prinComp, yrEndBal, annualPmt 
    Dim outRow, rowNum, outsheet 

    outRow = 3 'output table begins from row 4 

    outsheet = "loan amort" 
    Worksheets(outsheet).ActivateDo 

    loanLife = InputBox("Enter loan life." _ 
     & " Loan life must be a whole number") 

    If loanLife < 0 Or (loanLife - Round(loanLife) <> 0) Then 
     MsgBox ("Loan life must be a whole number.") 
     End 
    End If 

    initLoanAmt = InputBox("Enter loan amount." _ 
     & " Loan amount must be a positive whole number") 

    If initLoanAmt < 0 Or (initLoanAmt - Round(initLoanAmt) <> 0) Then 
     MsgBox ("Loan amount must be a positive whole number.") 
     End 
    End If 

End Sub 

,而不是提醒利率正如我與其他輸入完成後,我想VBA使用賦予了選擇從下表中的利率的輸入。

This is what my table looks like.

所以,如果X(貸款期)爲5,Y(initloanamount)爲700,那麼我想VBA用10的速度。

之後我可以繼續使用PMT功能的攤銷表。

+0

你可以發佈你的利率表的圖片嗎?你需要用VBA做到這一點嗎? – TheEngineer

+0

感謝您的回覆。是的,我必須使用VBA。我沒有利率表的圖片,我製作了一張格式類似的表格,但我無法在此處發佈。這是一張四行六列的簡單表格。我需要的是VBA能夠使用給定的輸入來找出交叉點處的利率。 – Samia

+0

更多信息:表格範圍是A2:F6。列範圍是A2:F2。 – Samia

回答

0

只需讓您的表名爲「InterestRates」即可命名的範圍。然後你就可以在VBA訪問指定的範圍內,例如:

Option Explicit 

Sub Amortisation() 

Dim intRate As Double, loanLife As Long, initLoanAmt As Long 
Dim yrBegBal, intComp, prinComp, yrEndBal, annualPmt 
Dim outRow, rowNum 
Dim outsheet As Worksheet 
Dim rng As Range 

outRow = 3 'output table begins from row 4 

Set outsheet = Worksheets("loan amort") 
outsheet.ActivateDo 

loanLife = InputBox("Enter loan life." _ 
    & " Loan life must be a whole number") 

If loanLife < 0 Or (loanLife - Round(loanLife) <> 0) Then 
    MsgBox ("Loan life must be a whole number.") 
End If 

initLoanAmt = InputBox("Enter loan amount." _ 
    & " Loan amount must be a positive whole number") 

If initLoanAmt < 0 Or (initLoanAmt - Round(initLoanAmt) _ 
    <> 0) Then 
    MsgBox ("Loan amount must be a positive whole number.") 
End If 

Set rng = outsheet.Range("InterestRates") 

loanLife = Evaluate("MATCH(" & loanLife & ",INDEX(InterestRates,,1),0)") 
initLoanAmt = Evaluate("MATCH(" & initLoanAmt & ",INDEX(InterestRates,1,),0)") 

intRate = rng.Cells(loanLife, initLoanAmt).Value 

End Sub 

這應該爲你假設你有一個名爲您的整個表(包括標題和行名稱)「InterestRates」工作。這也假定您的InterestRates範圍在您的「貸款攤銷」表上。所需的利率將被分配給變量intRate,您可以在最後添加代碼以使用它,只要您喜歡。

順便說一下,我用變量類型聲明瞭一些變量。你應該考慮把變量類型添加到其餘的。我也刪除了兩條End行,因爲它們不是必需的。

+0

謝謝。我現在的問題是告訴VBA訪問該範圍。也許我可以使用匹配功能呢?這就是我的代碼如何工作。提示用戶輸入X值,然後提示輸入Y值。從這兩個輸入中,VBA被告知將利率定義爲從工作表中的表格中獲取的X和Y交點處的數字。我可以使用If;如果x = 2和Y = 3,那麼intRate = 5 ..但這會花費時間。在Excel中,我使用Vlookup(lookup value,table array,Match(列值,列數組,0),FALSE)。 – Samia

+0

只需在表格變量中創建座標並從用戶輸入中提取值即可。我已經更新了我的答案以反映這一點。 – TheEngineer

+0

如果此答案符合您的要求,請將其標記爲正確答案。 – TheEngineer