築地市場はどこへ…??
だいぶん前から、寿司を食べるたびに話題に上る話ですが、もういい加減に移していいんじゃないかと思いますが、どうなんですかね… ^^;
こちらの “サイコロマクロ” の話題も、もうかなり長くひっぱってますので、軽く最終回の解説を書いておきたいと思います。。^^;
冒頭に、
kaisuu = ActiveCell.Value
x = ActiveCell.Column
の2つの変数を置いて、アクティブセルの値と列位置を取得するところまで説明しました。
この変数を使うのは、「③ココ」と「⑤ココ」で示したところです。
③では、何回サイコロを振るのかという情報を取ってきて、⑤で その位置を一つ右側に移動させています。
100万回までは、X6セルまで22個あるので、これら全体を、⑥・⑦のFor~Next文で22回繰り返せば、すべての回数の実験ができる、というわけです。
2月は思いのほかバタバタしすぎてブログはお休みさせていただきました。^^;
ちょっとペースを落としながらまた復活しますので、引き続き、どうぞよろしくお願いいたします。
m(_ _ )m
宴のあと。。
さて、前回までで、「サイコロを1日10回振る」ことを500日目まで繰り返して結果を記録するマクロができました。
あとは、10回だけじゃなくて、100回,200回,300回,…と、自動で同じことを繰り返してくれるようにすればOKですね。
この回数のデータは、C6セル,D6セル,E6セル,…と、6行目に入っています。
(100万回までは、X6セルまで22個あります。^^;)ここは、見た目には、たとえばC6セルは「10回」と見えていますが、データとしては数字の「10」が入っており、書式設定[表示形式]の「ユーザー定義」で「回」という単位を加えています。
マクロを走らせる前に、C6セルにカーソルを置いていたら、C6セルの「10回」から順番に左に読み取っていって、100回,200回,…とまわします。
たとえば、E6セルにカーソルを置いていたら、E6セルの「200回」から順番に左に 300回,400回,…とまわすような設定にしましょう。
始める位置を自分で決められるということです。
それには、アクティブセルの値と列位置を取得しておかないといけませんので、冒頭に、
kaisuu = ActiveCell.Value
x = ActiveCell.Columnの2つの変数を用意しましょう。
…と、説明がまた長くなりそうなのですが、今日はお年玉企画の回答を出さないといけないので、先に修正後の完成版マクロを提示しますね。
残りの解説は次回にします。。。
( ;゚─゚)
修正したところには「←ココ」のマークが入っています。
全部で7個ですね。
コピペできるようにテキストでも貼っておきます。
Sub サイコロ実験()
'
' サイコロ実験 Macro
'
' Keyboard Shortcut: Ctrl+Shift+S
For i = 1 To 22 '←⑥ココ
kaisuu = ActiveCell.Value '←①ココ
x = ActiveCell.Column '←②ココ
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Clear
Range("A1").Select
Selection.Copy
Range(Cells(1, 1), Cells(kaisuu, 1)).Select '←③ココ
ActiveSheet.Paste
For y = 9 To 508
Calculate
Range("I4").Select
Application.CutCopyMode = False
Selection.Copy
Cells(y, x).Select '←④ココ
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Next y
Cells(6, x + 1).Select '←⑤ココ
Next i '←⑦ココ
End Sub
C6セルにカーソルを置いて、[CTRL]+[SHIFT]+「S」で走らせてみてください。
私が実際に走らせた結果は、以下のようになりました。
「乖離率換算で最大20%以下なら確率通りとして、何回くらいサイコロを振らないといけないか?」
というのが問題でしたね。
何回かやってみましたが、「20%」の境目は、
平均でみると、300回近辺,確実性をとって最大値でみると、1500回近辺 という結果になりました。
回答は、
1. 5000回以上 または、
2. 5000回以下の2択だったので、正解は、
「2」の 5000回以下 ということになります!
意外と少なかったですね。
応募総数73通、正解者の先着5名が当選者です!
メールアドレス(一部)をこちらで発表します。
1.hirom…
2.tsakas…
3.makoh…
4.dyna…
5.k_oka…
おめでとうございます!
幸先のいいスタートですね。
後ほどメールでもご連絡さしあげますのでお楽しみに!
(^_^)v
鮮魚のお刺身。
朝獲れの魚たちからどれを食べたいか選ばせてくれます。
すばらしい~~
(^∇^)
さて、前回は実際にExcel作業をしてもらって、マクロを自動記述させたところまで終わりました。
コチラです。
できたプログラムは、大きく5つに分けられます。(空白行を入れてわかりやすくしました。)
上から3つは、手順(1)から(3)そのままです。
4つ目は、再計算して、「2日目」のデータとしてC10セルに最大乖離率を値貼り付けするところまで、
5つ目は、また再計算して、「3日目」のデータとしてC11セルに最大乖離率を値貼り付けするところまで、
というプログラムになっています。
では、今日はこちらを加工していきましょう。
まず、繰り返せそうなところを探します。
上から、3つ目,4つ目,5つ目は、ほぼ同じですね。
「 Calculate 」から始まって、「 Application.CutCopyMode = False 」で終わるという…
(「 Calculate 」というのは再計算なので、どこでやっても問題ありませんので、3つ目の頭にも持ってきてみました。)
よって、3つ目を繰り返せば良さそうですね。
あとは、セルの位置を変えたいところは、Range文ではなく、「Cells」に置き換えます。
たとえば、「 Range("C9") 」 というのは、「 Cells(9,3) 」に置き換えることができます。
これらを修正したものが次のプログラムです。
変更点には、コメント文で「←ココ」と記載しておきました。
まず、簡単なところから加工して短くしますね。
③④⑤の「←ココ」は、異なる部分は、
Cells(9,3) ,Cells(10,3) ,Cells(11,3) の、9・10・11 だけですよね。
これは、1日目のデータはC9セルに,2日目はC10セルに,3日目はC11セルに…
と 500日目(C508セル)までコピペするための行の数字が変わっていってるだけです。
この部分を、繰り返しの「For ~ Next」構文を使って書き換えます。
こんなに短くなりました。^^;
これで、「サイコロを1日10回振る」ことを500日目まで繰り返して結果を記録するマクロができました。
では続きは次回に!^^