|
▼sama さん:
こんにちは。
>>例えば、
>>ax−b=0
>>という方程式をxで解くプログラムを考えましょう!!
>
>>でも、これだとaに0が入力されるとエラーになりますよね?
>
>この部分ですが、数学上aに0が入力されると=−bとなり=0とはなりませんが
>このたびは必要性からaに0を入力しても=0と偽った答えを表示させなければ
>なりません。
ということは、エラーになった時の判断方法がわからないと言うことですか?
>>ax−b=0
本来は、先にa,bの値をチェックする(0か否か)のですが、
今回は、先にOn Error ステートメントでエラーを検出してからそれぞれの処理を
行いました。
'========================================================
Sub ax_b_equal_0()
On Error Resume Next
Dim a As Variant
Dim b As Variant
Dim ans As Variant
Dim retcode As Long
a = Application.InputBox("ax−b=0のaを入力して", , , , , , , 1)
b = Application.InputBox("ax−b=0のbを入力して", , , , , , , 1)
If TypeName(a) <> "Boolean" And TypeName(b) <> "Boolean" Then
ans = b / a
'↑エラーが発生しそうなステートメント
retcode = Err.Number 'エラーが発生していればErr.Numnerは、0でない
Select Case retcode
Case 0 'エラーなし
If Fix(b / a) = b / a Then '答えが整数?
ans = b / a
Else
ans = Application.Text(b / a, "???/???")
End If
Case 11 '0で割り算したエラー
ans = 0
retcode = 0
Case 6 'オーバーフロー エラー
If a = 0 And b = 0 Then 'すべての数が解?
ans = "不定"
retcode = 0
Else 'a=1E-300 b=1E+300 なんて入力するとこのエラー
MsgBox Error(retcode)
End If
Case Else 'その他のエラー(あり得ないエラー)
MsgBox Error(retcode)
End Select
If retcode = 0 Then '解がある場合のみ
MsgBox a & "x-" & b & "=0 : x = " & ans
End If
End If
End Sub
確認してみてください。
尚、これでも納得いかない場合は
投稿は夜になってしまいます。
又は、どなたかお願いします。
|
|