プロが教える店舗&オフィスのセキュリティ対策術

初めは、以下のように書いてちゃんと計算出来ていたものを、
Private Sub TextHensaigaku_Change()

If Me.TextKariire.Value = "" Or Me.TextKikan.Value = "" Or Me.TextKinri.Value = "" Then
Me.TextHensaigaku.Value = ""
End If

Dim rate As Double, per As Integer, nper As Integer, pv As Double
rate = Me.TextKinri.Value / 12 / 100
nper = Me.TextKikan.Value * 12
pv = -1 * Me.TextKariire.Value
Me.TextHensaigaku = Application.WorksheetFunction.RoundDown(Pmt(rate, nper, pv), 0)
Me.TextHensaigaku = Format(TextHensaigaku, "#,###")
Me.TextKariire = Format(TextKariire, "#,###")

End Sub

下記のように書き換えたら、急に「rate = Me.TextKinri.Value / 12 / 100」部分で実行時エラーが出るようになりました。
その後上記の記載に戻したのですがエラーがなくなりません。

Private Sub TextHensaigaku_Change()

If Me.TextKariire.Value = "" Or Me.TextKikan.Value = "" Or Me.TextKinri.Value = "" Then
Me.TextHensaigaku.Value = ""
End If
If Me.TextBank.Value = "◯◯銀行" Then
Dim rate As Double, per As Integer, nper As Integer, pv As Double
rate = Me.TextKinri.Value / 12 / 100
nper = Me.TextKikan.Value * 12 -1
pv = -1 * Me.TextKariire.Value
Me.TextHensaigaku = Application.WorksheetFunction.RoundDown(Pmt(rate, nper, pv), 0)
Me.TextHensaigaku = Format(TextHensaigaku, "#,###")
Me.TextKariire = Format(TextKariire, "#,###")
Else
rate = Me.TextKinri.Value / 12 / 100
nper = Me.TextKikan.Value * 12 
pv = -1 * Me.TextKariire.Value
Me.TextHensaigaku = Application.WorksheetFunction.RoundDown(Pmt(rate, nper, pv), 0)
Me.TextHensaigaku = Format(TextHensaigaku, "#,###")
Me.TextKariire = Format(TextKariire, "#,###")
End If
End Sub

どこがエラーの原因かわかりません。
よろしくお願いいたします。

質問者からの補足コメント

  • こんにちは。
    恥ずかしながら初心者なので色んなコードを調べてはコピペして編集して使っていたので
    Dimの位置の事が理解してませんでした。
    以下のようにDimを上に持ってきましたが同じエラーが出ています。
    これで何かわかりますでしょうか
    よろしくお願い致します。

    Private Sub TextHensaigaku_Change()
    Dim rate As Double, per As Integer, nper As Integer, pv As Double
    If Me.TextKariire.Value = "" Or Me.TextKikan.Value = "" Or Me.TextKinri.Value = "" Then
    Me.TextHensaigaku.Value = ""
    End If
    If Me.TextBank.Value = "◯◯銀行" Then...(以下略)

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/12/02 16:43
  • ご丁寧にありがとうございます。
    デバックモードというのは何でしょうか?
    エラーが出てそのエラーの部分の背景が黄色くなっている状態のことでよろしいですか?
    また、MsgBoxには下記みたいな表記が必要ですよね?

    If Me.TextBukkenNumber = "" Then
    MsgBox "物件No.が選択されていません。", vbCritical

    MsgBox以下にどのように書けばよいでしょうか?

    ちなみに黄色くなってるrate = Me.TextKinri.Value / 12 / 100のMe.TextKinri.Value の部分にマウスオーバーすると吹き出しで、Me.TextKinri.Value=""という表示が出て、rate=の部分にはrate=0と出ています。

    お手数おかけしますが、よろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/12/02 21:31
  • こんにちは。
    TextKikanは元々数値が入っておらずその都度30とか35を入力します。
    なのでnperは360とか420という値になります。

    TextKariireもTextKinriも同様に手入力で数値を入力します。

    なので冒頭にIf Me.TextKariire.Value = "" Or Me.TextKikan.Value = "" Or Me.TextKinri.Value = "" Then
    Me.TextHensaigaku.Value = ""と書いています。

    よろしくお願いいたします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2016/12/03 17:23

A 回答 (3件)

お疲れ様です。



実際に使用されているものが無いのでよくわかりませんが、書き直した後、変数宣言dimの位置はおかしいと思います。

Ifの後ではなく、前に持って来てください。
書き直した後の位置ですと、else処理この時宣言が効いておりません。

宣言しなくてもエクセルは自動で判断してくれますが、自分が求める結果をだすには、宣言した方が良いです。

また、元に戻してもエラーになってしまうとの事ですが、dimもきちんと戻しましたでしょうか?

また、追記情報があれば細かくご回答できると思います。
この回答への補足あり
    • good
    • 0

お疲れ様です。



TextKikanの値と、nperの値はいくつでしょうか?

この値が0だとpmtが計算できないのでは?
この回答への補足あり
    • good
    • 1

ありがとうございます。



デバッグモードは使用できますでしょうか?

使用できましたら、それぞれの値を確認するのが良いと思います。

もしデバッグが使用できないのであれば、msgboxを使用し値を表示させて見てください。

とりあえず、TextKariire等の4つの値を表示し、計算して見てください。

Msgboxは、1個目のend ifの後に入れて頂ければと思います。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!