|
▼とも☆ さん:
こんにちは。
1つの回答として提示します。
分かり易いように変数を日本語にしています。
Sub 条件付確率のVBA()
Call 点検(0.05)
Call 点検(0.1)
Call 点検(0.15)
Call 点検(0.2)
Call 点検(0.25)
End Sub
Sub 点検(ByVal 不合格率 As Double)
Const 総製品数 = 500
Const 不良品番号初期値 = -5
Dim 不良品番号 As Long
Dim 再点検回数 As Long
Dim 製品番号 As Long
'変数初期化
不良品番号 = 不良品番号初期値
再点検回数 = 0
'乱数初期化
Randomize
For 製品番号 = 1 To 総製品数
If Rnd() < 不合格率 Then
If 製品番号 - 不良品番号 <= 5 Then
再点検回数 = 再点検回数 + 1
不良品番号 = 不良品番号初期値
Else
不良品番号 = 製品番号
End If
End If
Next 製品番号
MsgBox "不合格の確率:" & 不合格率 & Chr(10) & _
"再点検の回数:" & 再点検回数 & Chr(10) & _
"再点検の確率:" & (再点検回数 / 総製品数)
End Sub
以下は処理の説明です。
1.「条件付確率のVBA」を実行します。
2.サブモジュールの「点検」に「不合格率」を与えて点検の処理をさせます。
3.再点検をするかどうかは、「製品番号」と「不良品番号」との差が5以下かどうかで判断します。
その為に、不良品が出たらその「製品番号」を「不良品番号」に保存しています。
4.再点検になった場合、「不良品番号」を初期化しています。
(点検したんだから次の不良品は1個目として数え始めていいでしょう)
初期値がなぜ「−5」なのかは御自分で考えてみてください。
再点検の確率を(再点検回数 / 総製品数)としていますが
(再点検回数 / 不良品数)かな?とも思います。
もしそうだとしたら改造してみてください。
プログラムは動かして出てきた結果だけを見てもなかなかわかりません。
途中で変数の中身がどうなっているのかを確認していってください。
「Sub 条件付確率のVBA()」から最初の「End Sub」の間の行にカーソルを持っていって
「F8」キーを押すと、押すごとに1行ずつVBAが実行されます。次にまた押すまでは止まってます。
止まっている状態で変数の上にマウスカーソルを持っていくと
その時の変数の中身が表示されます。
途中でやめたくなったら「F5」キーを押すと残りの処理が止まらずに実行されます。
|
|