2016-06-24 7 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를 사용해야합니다. 나는 금리 테이블의 그림을 가지고 있지 않다. 비슷한 형식의 표를 만들었지 만 여기에 게시 할 수 없다. 그것은 4 행 6 열 간단한 테이블입니다. 내가 필요한 것은 VBA가 주어진 입력을 사용하여 교차로에서 이자율을 알아내는 것입니다. – Samia

+0

추가 정보 : 테이블 범위는 A2 : F6입니다. 열 범위는 A2 : F2입니다. – Samia

답변

0

테이블을 "InterestRates"라는 이름의 범위로 만드십시오. 그럼 당신은 같은 VBA에서 명명 된 범위를 액세스 할 수 있습니다 : 이것은 당신이 "InterestRates"(헤더 및 행 이름 포함) 전체 테이블을 명명 한 가정을 위해 일해야

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 범위가 귀하의 "loan amort"시트에 있다고 가정합니다. 원하는 이자율은 변수 intRate에 할당되며 끝에 코드를 추가하여 원하는대로 사용할 수 있습니다.

그런데 변수 유형으로 일부 변수를 선언했습니다. 변수 유형을 나머지 변수에 추가하는 것을 고려해야합니다. 또한 두 개의 End 줄은 필요 없으므로 제거했습니다.

+0

감사합니다. 내 문제는 이제 범위에 액세스하도록 VBA에 지시하고 있습니다. 어쩌면 그게 일치 기능을 사용할 수 있습니까? 이것은 내 코드가 작동하는 방법입니다. 사용자는 X 값을 묻는 메시지가 표시되고 Y 값을 입력하라는 메시지가 나타납니다.이 두 입력 값에서 VBA는 워크 시트의 테이블에서 얻은 X와 Y의 교차점에서 금리를 정의하도록 지시받습니다. If를 사용할 수 있습니다. IF x = 2, Y = 3이면 intRate = 5.하지만 시간이 걸릴 것입니다. Excel에서 Vlookup (조회 값, 테이블 배열, 일치 (열 값, 열 배열, 0), 거짓)을 사용합니다. – Samia

+0

테이블 변수 내에서 좌표를 만들고 사용자 입력 값을 가져옵니다. 이를 반영하여 답변을 업데이트했습니다. – TheEngineer

+0

이 답변이 귀하의 요구 사항을 충족시키는 경우 정답으로 표시하십시오. – TheEngineer