【VBA】チンチロリンで休憩決めてたら怒られたので、VBAで作った			

								
											
弊現場の休憩は三交代で、チンチロリンで出目が強い順に回しているのですが、											
業務時間中にやると遊んでるみたいになっちゃうので、VBAで作りました											
（意地でもチンチロリンで休憩時間を決めたい）											
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668086/97ee9e04-cd7a-b11f-e244-15b46e3d5164.png)

											
全体的なUIはこんな感じです											
振るを押すと、サイコロの値が生成されて出目の結果を表示します。											

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668086/d00af2e7-237e-6e8e-2ba5-08ef0f7c6b4f.png)
						
											
チンチロリンのルールに準拠して、出目がでたら残り回数が０になり、振ろうとすると怒られます。											
解除するにはpasswordを打ち込んで解除します。											
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668086/912766f1-075e-75eb-f6bb-1c0e0f9ab471.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668086/24dd6832-58a8-6660-49ab-206aec954cbb.png)
							
不正防止の為、結果はLOG欄に出力され、保存されます。											

	
											
											
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668086/641132e0-3239-d194-f11d-31ff5eedd643.png)
										
											





											
											
											
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668086/f4f0f4cb-4059-1e73-13c0-f1b9ad2b1bf6.png)
											
											
											
											
保護されたシートなので、LOG欄をいじって結果を覆そうとする輩にはpasswordが求められます。											
											
											
											
											
振るボタンには「tintiro」という名前のプロシージャ―を設定しています。											
											
    Sub tintiro()											
        Dim bool_pass As Boolean											
    											
        Call init											
											
											
											
											
											
    											
        bool_pass = pass判定()			←ロック解除のためのパスワードの判定								
    											
        If bool_pass = False Then											
            Exit Sub											
        End If											
    											
    											
        Cells(2, 4) = ""											
											
        Cells(2, 1) = Dice()			←Dice()でサイコロの値を取得								
        Cells(2, 2) = Dice()											
        Cells(2, 3) = Dice()											
    											
        Cells(2, 4) = result()			←result()で結果の判定								
    											
        Call log			←不正がないようにlogプロシージャで保護されたセルに結果を入力								
    											
        ThisWorkbook.Save			←保存								
    											
    End Sub											
											
											
Dice()は、サイコロの結果を返します。											
											
    Function Dice() As Integer											
        Dim i As Integer											
    											
        i = Int(Rnd * 7)											
    											
        If i = 0 Then											
            i = Dice()											
    											
        End If											
        Dice = i											
    End Function											
											
Rnd 関数は、1 未満で 0 以上の値を返します。											
7でかけて、Int型に直すことで０～６の整数としています。											
（偏りあるけど、休憩時間決めるために使うだけだからオッケーオッケー）											
０が出たときはもう一度Dice()を呼び出して、最終的には１～６の値で返します。											
											
result()の中身も書こうとしたのですが、ごり押しif分でcoolじゃないので											
恥ずかしいのでやめておきます。											
											
プロセス的には、											
①一致する数字があるかどうか											
→あれば、②ぞろ目であるかどうか判定											
→あれば、出目はぞろ目、なければ仲間外れのサイコロの値を参照して出目〇											
											
シゴロとヒフミの判定はゴリゴリ押しです											
If a = 4 And b = a + 1 And c = a + 2 Then											
こんな感じで全パターンif分書いてます（　＾ω＾）・・・											
											
何かスタイリッシュな書き方があれば、教えてくださると泣いて喜びます。											
											
そんな感じで、VBAでチンチロリン作りましたって話											
											
											
ー－－追記ー－－											
											
Rnd関数でサイコロの値を決めていたのですが、共有フォルダにアップすると											
同じ値が出てしまいました。											
bookのシード値を初期化していなかったのが原因みたいです。											
Randomizeステートメントで初期化することで対応。											
											
晴れてチンチロリンをすることができました。