2016-06-24 3 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; IF x = 2 и Y = 3, затем intRate = 5 ... но это займет время. В excel я использую Vlookup (значение поиска, массив таблиц, совпадение (значение столбца, массив столбцов, 0), FALSE). – Samia

+0

Просто сделайте координаты внутри переменных таблицы и вытащите значения из пользовательских входов. Я обновил свой ответ, чтобы отразить это. – TheEngineer

+0

Если этот ответ удовлетворяет вашим требованиям, отметьте его как правильный ответ. – TheEngineer

Смежные вопросы