2016-06-24 8 views
1

私は、金利がユーザーによって提供される2つの入力に依存する償却テーブルを作成しようとしています。複数基準/多次元VlookupでのVLOOKUPの使用

Xは行を表し、Yは列を表します。 X、Yおよび金利の値は、すでに4×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 

。これはまた、あなたの金利の範囲があなたの "ローンamort"シートにあると仮定します。希望の金利は変数intRateに割り当てられ、最後にコードを追加して好きなように使うことができます。

ところで、私はいくつかの変数を変数型で宣言しました。残りの部分に変数型を追加することを検討する必要があります。私はまた、2つの不要なラインを削除しました。

+0

ありがとうございます。今私の問題は、範囲にアクセスするようにVBAに指示しています。たぶん私はそのためのマッチ機能を使用することができますか?これが私のコードが動作する方法です。ユーザーはXの値を求めるプロンプトが出され、Yの値が要求されます。これらの2つの入力から、VBAは、ワークシートの表から得られたXとYの交点の金利として金利を定義するように指示されます。私はIfを使うことができました。 IF x = 2、Y = 3の場合、intRate = 5.ですが、それには時間がかかります。私はVlookup(ルックアップ値、テーブル配列、一致(列の値、列の配列、0)、FALSE)を使用するExcelで。 – Samia

+0

テーブル変数内の座標を作成し、ユーザー入力から値を引き出します。私はこれを反映するために私の答えを更新しました。 – TheEngineer

+0

この回答が要件を満たしている場合は、正解としてください。 – TheEngineer