私は次の問題があります。私はいくつかの値を計算するためにアクティブなx要素を持つExcelワークシートを作成しています(大学のクラス用)。そして、次のコードでは、時々(毎回ではなく)実行時エラー9が発生し、インデックスが範囲外になっています(うまくいけば、正しく英語に翻訳されました)。私はvbaに新しいです。私はすでにいくつかの同様の問題があることを知っているが、私は実際に自分の問題の解決策としても私のコードのいずれかを理解していないので、私のコードにソリューションを適応させる巨大な問題があります。VBAランタイムエラー9(Excel 2007)
私は星でエラーが発生した行をマークしました。
私のコードでこの問題がなぜ発生するのか、それを正しく解決する方法について、誰かが説明できると本当に感謝します。 ありがとうございます。
ここでは、コードは次のとおりints
として
Sub calcinull()
Dim ione(4), itwo(4), ii, ints(4), cs(4), io, it As Double
Dim a, b, c As Double
ione(0) = 0
ione(1) = 10
ione(2) = 20
ione(3) = 30
ione(4) = 40
itwo(0) = 100
itwo(1) = 90
itwo(2) = 80
itwo(3) = 70
itwo(4) = 60
For b = 0 To 4
ii = ione(b) + (((itwo(b) - ione(b)) * (NPV(ione(b)))/(NPV(ione(b)) - NPV(itwo(b)))))
ints(b) = ii
cs(b) = NPV(ii)
Next b
Dim AbsInt(4), AbsCs(4) As Double
For a = 0 To 4
AbsInt(a) = VBA.Abs(ints(a))
AbsCs(a) = VBA.Abs(cs(a))
Next a
Dim pos As Integer
pos = Application.Match(Application.Min(AbsCs), AbsCs, 0)
*ii = ints(pos)*
If NPV(ii) > 0 Then
io = ii
If pos > 0 Then
it = itwo(pos - 1)
Else
it = itwo(0)
End If
ElseIf NPV(ii) < 0 Then
it = ii
If pos > 0 Then
io = ione(pos - 1)
Else
io = ione(0)
End If
ElseIf NPV(ii) = 0 Then
inull = ii
End If
For c = 1 To 30
Do Until (NPV(io) - NPV(it)) <> 0
io = io - 0.1
it = it + 0.1
Loop
ii = io + (((it - io) * (NPV(io))/(NPV(io) - NPV(it))))
If NPV(ii) > 0 Then
io = ii
If it > (io + 0.5) Then
it = it - 0.5
End If
ElseIf NPV(ii) < 0 Then
it = ii
If io < (it - 0.5) Then
io = io + 0.5
End If
ElseIf NPV(ii) = 0 Then
inull = ii
Exit For
End If
Next c
inull = ii
End Sub
「NPV」は2つのパラメータを必要としませんか? 'Rate'と' ValueArray() '? –
NPVは、与えられたキャッシュフローを割り引くために変数を使用するため、レートを変数として必要とするUDFです。私はそれほど良くはなく、私が知ることができるようにvbaに慣れていましたが、ValueArrayをNPVでどのように使うことができるか分かりません。私にあなたのアイデアを説明できますか? ありがとうございます。 –