見出し画像

エクセルのVisual Basicで二項分布を作る話(短編)

自己紹介

僕は大阪大学で学生をしている。普段はTwitter(@Mathmeganekun)で自由に発言させてもらっている。本日はVisual Basic(以下:VBA)の話を書いた。下の記事もぜひ。


はじめに

僕は高校二年生の頃、学校の授業でVBAを触った。
初めてのプログラミング、意外と簡単だと思った。ハマった。
Excel上で動くので結果が視覚的にわかりやすくて楽しかった。色々できるカレンダーを作って愛用している。
最近、彼女が新しい趣味を探していたのでプログラミングを勧めた。
Pythonとかと悩んだけどVBAはExcelだからいいかなと思った。
それきっかけで久しぶりに新しいものを作ったりした。
最近の僕はSwiftでiOSアプリを作ったりしている。
そんな感じの人間。

僕が知っていること

僕はVBAについてあまり知らない。Forとifぐらいしか知らない。
型も知らない。できるだけForとifだけで無理くりやりたい。
数学が得意な人はプログラミングも得意だと思う。特に数ⅡBの数列。

最近作ったもの

二項分布を作りたいと思った。
統計とかでよくみるやつ。
1000回コインを投げて表の出た回数をプロットするだけのコード。
最初は100回区切りにしていた。100〜200回の列、200〜300回の列みたいな感じで。

微妙すぎた。次は10回区切りにしてみた。

だんだん二項分布のそれらしくなってきた。
最後は1回区切り。つまり横に1000列あるということ。
縦にも1000行あるので1000×1000マスある。
1000回コインを振る作業を3万回繰り返した結果がこれ。

なんかそれっぽくていい感じ。横幅を変えたらそれっぽい。


こんな遊び方もできる。
M2 MacBooAirだと1万回回すと3分ぐらい固まる。
ベンチマークに使えるんじゃないか、なんて思ったりするくらい。

C4のセルが実行する回数、C5のセルの背景が塗られる色という仕様。
実行後に色を変えて実行すれば重ね塗りができる。

追記9/7
計算効率の良い方法を思いついたので完成したらまた載せます。

 Sub 二項分布3()
 For i = 1 To Cells(4, 3)  '試行回数
    Cells(3, 3) = 0  ' リセット
 For n = 1 To 1000
    Select Case Rnd
    Case 0 To 0.5  'オモテが出た時
        Cells(3, 3) = Cells(3, 3) + 1
    Case 0, 5 To 1  'ウラが出た時は無視
    End Select
 Next n
Cells(1010, Cells(3, 3) + 4) = Cells(1010, Cells(3, 3) + 4) + 1  '回数の加算
Cells(1009 - Cells(1010, Cells(3, 3) + 4), Cells(3, 3) + 4).Interior.Color = Cells(5, 3).Interior.Color  '色塗り
    Next i
 End Sub

自己責任でダウンロードもどうぞ!最初は100回で実行してみてパソコンが余裕であれば1000回をやるという感じがおすすめです。最初から大きな数で実行するとパソコンが落ちる可能性があります。

最後に

今日はこんな感じで終わり?
普段は自分のことについて書いています。
Xもやってます。下の記事もぜひ!


いいなと思ったら応援しよう!