1

利率がユーザーから提供された 2 つの入力に依存する償却テーブルを作成しようとしています。

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 が与えられた入力を使用して、下の表から金利を選択するようにします。

これが私のテーブルの外観です。

したがって、X (ローン期間) が 5 で Y (initloanamount) が 700 の場合、VBA でレートとして 10 を使用する必要があります。

この後、PMT 関数を使用して償却テーブルを続行できます。

4

1 に答える 1

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 の範囲が "loan amort" シートにあることも前提としています。希望の利率が変数に割り当てられintRate、最後にコードを追加して、好きなように使用できます。

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

于 2016-06-24T19:28:05.410 に答える