Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8583 / 13644 ツリー ←次へ | 前へ→

【32098】教えて下さい・・・ とも☆ 05/12/6(火) 14:40 質問[未読]
【32100】Re:教えて下さい・・・ やっちん 05/12/6(火) 15:05 発言[未読]
【32113】Re:教えて下さい・・・ とも☆ 05/12/6(火) 16:04 質問[未読]
【32124】Re:教えて下さい・・・ やっちん 05/12/6(火) 18:59 発言[未読]
【32154】Re:教えて下さい・・・ とも☆ 05/12/7(水) 15:03 質問[未読]
【32155】Re:教えて下さい・・・ やっちん 05/12/7(水) 15:16 発言[未読]
【32175】Re:教えて下さい・・・ とも☆ 05/12/8(木) 10:02 質問[未読]
【32177】Re:教えて下さい・・・ とも☆ 05/12/8(木) 10:15 質問[未読]
【32179】Re:教えて下さい・・・ Jaka 05/12/8(木) 10:33 発言[未読]
【32402】Re:教えて下さい・・・ とも☆ 05/12/14(水) 10:01 質問[未読]
【32181】Re:教えて下さい・・・ やっちん 05/12/8(木) 12:35 発言[未読]
【32405】Re:教えて下さい・・・ とも☆ 05/12/14(水) 10:10 質問[未読]
【32406】Re:教えて下さい・・・ やっちん 05/12/14(水) 10:16 発言[未読]
【32410】Re:教えて下さい・・・ とも☆ 05/12/14(水) 11:02 お礼[未読]
【32198】Re:教えて下さい・・・ やっちん 05/12/8(木) 22:07 回答[未読]
【32407】Re:教えて下さい・・・ とも☆ 05/12/14(水) 10:31 質問[未読]
【32408】Re:教えて下さい・・・ やっちん 05/12/14(水) 10:48 発言[未読]
【32411】Re:教えて下さい・・・ とも☆ 05/12/14(水) 11:05 質問[未読]
【32413】Re:教えて下さい・・・ やっちん 05/12/14(水) 11:50 回答[未読]
【32422】Re:教えて下さい・・・ とも☆ 05/12/14(水) 16:46 お礼[未読]
【32437】Re:教えて下さい・・・ やっちん 05/12/14(水) 20:37 発言[未読]
【32465】Re:教えて下さい・・・ とも☆ 05/12/15(木) 16:50 質問[未読]
【32468】Re:教えて下さい・・・ やっちん 05/12/15(木) 17:01 発言[未読]

【32098】教えて下さい・・・
質問  とも☆  - 05/12/6(火) 14:40 -

引用なし
パスワード
   学校の宿題で条件付確立実験のVBA作成の問題が出たのですが、
どうしても良く分かりません↓↓どうしたらいいのでしょうか。
教えてください・・・泣泣泣

工場ではある製品を生産している。順調に工場が運転されているかどうかを検査するため品質検査をしている。品質検査の方法として不良品が2個でるまで品物を検査し、5個以内で2回目が見つかったとき工場の工程を再点検することにしている。
製品が不合格になる確率をp=0.05, p=0.1, p=0.15, p=0.2, p=0.25と変えながらそれぞれ製品数500個を検査した場合、「工程を再点検」する回数とその確率を求めよ。

↑これがその問題です・・・

あと、私はVBAが苦手です。
どうやったらできるようになりますか。
やっぱり慣れですか?

【32100】Re:教えて下さい・・・
発言  やっちん  - 05/12/6(火) 15:05 -

引用なし
パスワード
   ▼とも☆ さん:
こんにちは。
VBA以前に問題の内容は理解できていますか?

まずはフローチャートを書く方がいいと思います。
処理の流れを考えてからそれをコーディングする方が確実ですね。
処理と条件と繰り返しの3種類でだいたいのものができます。

【32113】Re:教えて下さい・・・
質問  とも☆  - 05/12/6(火) 16:04 -

引用なし
パスワード
     やっちゃんさんへ

先日はありがとうございました☆☆
あの問題ともう一問、問題があったのですが、同じようにやったらできました☆☆

しかし、毎回何か誰かに助けられないとできません。
素質がないのでしょうか・・・

今回もフローチャートを書いてやってるのですが・・・

愚痴まで書いてごめんなさい↓↓

【32124】Re:教えて下さい・・・
発言  やっちん  - 05/12/6(火) 18:59 -

引用なし
パスワード
   ▼とも☆ さん:
こんにちは。
>しかし、毎回何か誰かに助けられないとできません。
>素質がないのでしょうか・・・
向き不向きはあっても努力次第で平均的なレベルのことくらいはできるもんですよ(^^
フローを作れるんだったら半分はできたようなもんです。


>今回もフローチャートを書いてやってるのですが・・・
その考えた処理を説明してもらえますか?

最終的に必要な項目とそれを出す(計算する)ために必要な項目が
何かというところを押さえていければ自ずと見えてくるかも。

【32154】Re:教えて下さい・・・
質問  とも☆  - 05/12/7(水) 15:03 -

引用なし
パスワード
     やっちゃんさんへ☆

>向き不向きはあっても努力次第で平均的なレベルのことくらいはできるもんですよ(^^
>フローを作れるんだったら半分はできたようなもんです。

今の私は平均レベルというより、正直いうと今何をしているのかも分かっていません。
実は、前回の相談の書き込みをした時も、この講義を放棄しようかと悩んでいたくらいです。でも、このサイトを見つけて前回の提出はできました。
全部、やっちゃんさんに手伝って頂けたおかげです・・・ほんとうにありがとうございます・・・本当に感謝しています。。。

>その考えた処理を説明してもらえますか?
私は、ほんとうにわかっていなくて、サイトに掲示するのが恥ずかしくてのせられないです・・・ごめんなさい↓↓

でも、オーバーフローしてしまうのはなぜなんでしょうか。
やっぱりどんなものを作ったか見せたほうが話しやすいですかね???

【32155】Re:教えて下さい・・・
発言  やっちん  - 05/12/7(水) 15:16 -

引用なし
パスワード
   ▼とも☆ さん:
こんにちは。

>でも、オーバーフローしてしまうのはなぜなんでしょうか。
>やっぱりどんなものを作ったか見せたほうが話しやすいですかね???

どう考えているかがわからないと話が進みませんよね?
私が答えだけ教えても とも☆ さんの為にはなりませんから。

「魚を与えればその人は一日食べていける。
魚の釣り方を教えればその人は一生食べていける。」
わかりますか?

【32175】Re:教えて下さい・・・
質問  とも☆  - 05/12/8(木) 10:02 -

引用なし
パスワード
      やっちゃんさんへ

こんにちは☆そうですよね・・・

実は前回のやっちゃんさんのものを参考にして作りました。
ネットに載せて、やっちゃんさんに見てもらうのがとても
恥ずかしいです・・・

Sub 条件付確立のVBA()
  Dim i As Long
  Dim huryouhin As Long
  Dim i As Long
 
  zentai = 500
  Randomize
  For i = 1 To zentai
    If Rnd() < 0.05 Then
    End If
  Next i
  MsgBox goukaku / hugoukaku
End Sub

>「魚を与えればその人は一日食べていける。
>魚の釣り方を教えればその人は一生食べていける。」
>わかりますか?

教訓にしたいです。
すみませんでした。。。

【32177】Re:教えて下さい・・・
質問  とも☆  - 05/12/8(木) 10:15 -

引用なし
パスワード
    やっちゃんさんへ
間違いました・・・Dimが重複してましたよね??
この間違いを直してもオーバーフローしてしまいます・・・
何故でしょうか・・・
私のやっているのは全く違う事をしているのでしょうか・・・

>Sub 条件付確立のVBA()
>  Dim i As Long
>  Dim huryouhin As Long
> 
>  zentai = 500
>  Randomize
>  For i = 1 To zentai
>    If Rnd() < 0.05 Then
>    End If
>  Next i
>  MsgBox goukaku / hugoukaku
>End Sub

【32179】Re:教えて下さい・・・
発言  Jaka  - 05/12/8(木) 10:33 -

引用なし
パスワード
   ▼とも☆ さん:
>この間違いを直してもオーバーフローしてしまいます・・・
>何故でしょうか・・・
>私のやっているのは全く違う事をしているのでしょうか・・・
そうですね。
goukakuとhugoukakuに何も入っていないようですが...。

例えば除算で、
1÷0 ってできるのでしょうか?

【32181】Re:教えて下さい・・・
発言  やっちん  - 05/12/8(木) 12:35 -

引用なし
パスワード
   ▼とも☆ さん:
>>Sub 条件付確立のVBA()
>>  Dim i As Long
>>  Dim huryouhin As Long
>> 
>>  zentai = 500
>>  Randomize
>>  For i = 1 To zentai
>>    If Rnd() < 0.05 Then
>>    End If
>>  Next i
>>  MsgBox goukaku / hugoukaku
>>End Sub
hugoukakuに何も入っていないので中身は0です。
0で割るのはいけません。
0でなくても小さい数(例えば0.0000000000000000001)
で割ったりすると答えがすごく大きくなりますよね?
変数は入れられる数値の範囲が決まっています。
それを外れるとオーバーフローになります。

処理の大きな仕組みはあってます。
Rnd() < 0.05がわかってるだけでもなかなかです。
ただ
goukaku / hugoukaku
は求めるものとは違います。

まずは再点検する回数を求めましょう。
製品に1から500まで番号がついているとすると
どういう条件の時に再点検をすることになりますか?

【32198】Re:教えて下さい・・・
回答  やっちん  - 05/12/8(木) 22:07 -

引用なし
パスワード
   ▼とも☆ さん:
こんにちは。
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」キーを押すと残りの処理が止まらずに実行されます。

【32402】Re:教えて下さい・・・
質問  とも☆  - 05/12/14(水) 10:01 -

引用なし
パスワード
     Jaka さんへ

>例えば除算で、
>1÷0 ってできるのでしょうか?

お返事ありがとうございました☆
ちょっとパソコンの具合が悪くて長い間返信できなくてすみません・・・

私は全くの初心者なのでよく分からないんですが、どうしたらいいのでしょうか。

すみまんせん・・・教えてください。

【32405】Re:教えて下さい・・・
質問  とも☆  - 05/12/14(水) 10:10 -

引用なし
パスワード
    やっちん さんへ

お久しぶりです。
せっかく返信くださったのに、早く返信出来なくてすみません。
パソコンの具合が悪くてネットが見れませんでしたが、もう復活しました。

>処理の大きな仕組みはあってます。
>Rnd() < 0.05がわかってるだけでもなかなかです。

嬉しいです・・・☆☆

>まずは再点検する回数を求めましょう。
>製品に1から500まで番号がついているとすると
>どういう条件の時に再点検をすることになりますか?

これは、問題に「品質検査の方法として不良品が2個でるまで品物を検査し、5個以内で2回目が見つかったとき工場の工程を再点検することにしている」とあるのですが、不良品が5個以内で2回目見つかったというのが条件ですか??

【32406】Re:教えて下さい・・・
発言  やっちん  - 05/12/14(水) 10:16 -

引用なし
パスワード
   ▼とも☆ さん:
こんにちは。
>せっかく返信くださったのに、早く返信出来なくてすみません。
>パソコンの具合が悪くてネットが見れませんでしたが、もう復活しました。
諦めちゃったのかと思ってました(^^;

>これは、問題に「品質検査の方法として不良品が2個でるまで品物を検査し、5個以内で2回目が見つかったとき工場の工程を再点検することにしている」とあるのですが、不良品が5個以内で2回目見つかったというのが条件ですか??
ここに回答の一つを載せています。
内容をよく理解してみてください。
ただし、私の回答が必ずしも正解とは限りませんし、回答は1通りではありません。
他にもやり方はあります。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=32198;id=excel

【32407】Re:教えて下さい・・・
質問  とも☆  - 05/12/14(水) 10:31 -

引用なし
パスワード
     やっちんさんへ

わざわざ答えありがとうございました・・・
何かいっぱい教えて戴いてるのに分からないのが情けないです・・・
すみません。
でも、もう少し頑張ってみる事にしました☆☆
本当にありがとうございました☆☆☆

>  Const 不良品番号初期値 = -5

−5の意味はまだ分かりません。
もう少し考えてみます!!!
これは5回以内で2回目の不良品がでると再点検だからというのは関係ないですよね??

”Else”←どういう意味になるんですか??

丁寧な解説までつけて下さってありがとうございました。
もう少し、すぐに諦めないように頑張ります☆
やっちんさんに返信を戴けてよかったと思います。

【32408】Re:教えて下さい・・・
発言  やっちん  - 05/12/14(水) 10:48 -

引用なし
パスワード
   ▼とも☆ さん:
>>  Const 不良品番号初期値 = -5
>これは5回以内で2回目の不良品がでると再点検だからというのは関係ないですよね??
関係ありますよ。5個目で初めて不良品が出たらという風に考えるとその理由に気づくと思います。
>”Else”←どういう意味になるんですか??
IF 条件 THEN
  条件を満たす場合の処理
ELSE
  条件を満たさない場合の処理
END-IF
 

【32410】Re:教えて下さい・・・
お礼  とも☆  - 05/12/14(水) 11:02 -

引用なし
パスワード
    やっちんさんへ

>諦めちゃったのかと思ってました(^^;

諦める訳無いですよ♪♪
私はよくしつこいって言われるくらいですからね^^;
でもまだちょっとLANがおかしいんだと思うんですけど、何か接続がしづらいんですよ…4年も使ってるし、つめが折れてるからですかね…最近使っていても良く外れるし。近々新たしいLANを買ってきます…☆☆

>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=32198;id=excel

わざわざ丁寧な解説もつけて下さってありがとうございました☆☆
もう少しすぐに諦めず頑張ります^^☆

【32411】Re:教えて下さい・・・
質問  とも☆  - 05/12/14(水) 11:05 -

引用なし
パスワード
     やっちんさんへ

>>>  Const 不良品番号初期値 = -5
>>これは5回以内で2回目の不良品がでると再点検だからというのは関係ないですよね??
>関係ありますよ。5個目で初めて不良品が出たらという風に考えるとその理由に気づくと思います。

何となく分かったような気がするんですが、5回目で不良品が出たということは、その5回分の個数をまず1回目に直すために−5にしてあるのですか??(何か書いている意味が定かではないんですが…

何から何まですみません…

【32413】Re:教えて下さい・・・
回答  やっちん  - 05/12/14(水) 11:50 -

引用なし
パスワード
   ▼とも☆ さん:
例えば1回目の不良品が11番目の製品で
2回目の不良品が16番目の製品だったとすると
16−11=5 で 前の不良品から5個以内で不良品が出たことになり再点検になります。
2回目を考えるときはこれでいいんです。

でも、1回目の不良品が出た場合でも
再点検をするかどうかの判断処理(IF文)を通ります。
1回目の不良品が出た場合はまだ再点検をする必要はありませんが
1回目の不良品番号から前の不良品の番号(初期値)を引くことになります。
11番目が最初の不良品で、Xを初期値とすると
11−X
これが5以下にならなければいいんです。だったらXは0でもよさそうなんですが・・。

最初の不良品が1〜5番目だったときに困ったことになります。
1番目だったら
1−X
5番目だったら
5−X
Xが0だと5以下になって再点検をする条件を満たしてしまうんです。
この辺りでピンときたでしょうか?

別のやり方として
不良品が1回目のときは再点検をするかどうかの判断をしない
とすれば初期値が何でも構いません。(再点検するかどうかの判断を通らないわけですから。)

【32422】Re:教えて下さい・・・
お礼  とも☆  - 05/12/14(水) 16:46 -

引用なし
パスワード
     やっちんさんへ

なんとなくわかった気がします…細かな解説までつけてくださってありがとうございます☆☆

何か説明を聞いたらわかる気がするのに、自力でできないのはまだ練習が足りないからでしょうか…

もう少しやってみます。
また教えてください…

【32437】Re:教えて下さい・・・
発言  やっちん  - 05/12/14(水) 20:37 -

引用なし
パスワード
   ▼とも☆ さん:
>何か説明を聞いたらわかる気がするのに、自力でできないのはまだ練習が足りないからでしょうか…
それはまだプログラムというものの構造がわかってないからでしょう。
いっぱい動かして慣れることですね。

それと処理を考えるときはシミュレーションをするといいです。
例えば3番目と8番目を不良品として
1行づつ処理を追っていって、変数の中身が何になるか全部書き出してみましょう。
そういうことをやると流れが見えてきます。
3番目と9番目だとどうなるか、そういうのが途中で見えてくるようになるでしょう。

【32465】Re:教えて下さい・・・
質問  とも☆  - 05/12/15(木) 16:50 -

引用なし
パスワード
     やっちんさんへ

シュミレーションというのはやっぱ頭の中でですか??
VBA用語?とか使い方がよくわからなくて困ったりします。
パソコンって難しいです…--;

あと、また質問していいですか??
ヒット・モンテカルロ法ってどういうシステムですか??
何度もお聞きしてすみません…↓↓

【32468】Re:教えて下さい・・・
発言  やっちん  - 05/12/15(木) 17:01 -

引用なし
パスワード
   ▼とも☆ さん:
>シュミレーションというのはやっぱ頭の中でですか??
紙に書くんですよ。
エクセルのシートでもいいですけど。
変数の値がどんどん変わっていくのがわかりますよ。
私もたまにやりますよ。
1回目のループのときはこの変数は何になってて
2回目は・・・とか。
私の場合は処理を止めて確認する方が主ですね。


>あと、また質問していいですか??
>ヒット・モンテカルロ法ってどういうシステムですか??
モンテカルロってどこかで聞いたことあるような。確率の話かなあ。
でも、インターネットができる環境があるんだから
まずは自分で検索して調べましょう。

8583 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free