マンゴー杯への挑戦

本日、以下の記事を拝読した。
koroko.hatenablog.com

今回VBAであみだくじを作っていたら、「そもそもあみだくじにする意味あるのかな?公平なら何でも良くない?」と疑問が沸いた。
業務でも、こういうのいっぱいあると思う。
そもそも、何の為にそれをやるのか。
今までは手作業だったからそのやり方が最善だったけど、本当は何がしたいのか。
マクロを作っていると、本当はどうなんだろう?って思ってくる。

この意見に、少なくとも個人的には反論の余地が無い。まさに仰る通り。

今回の抽選のマクロ、コロ子は間借り方式で作ったけど、こういうのの考え方は人それぞれ。
「自分ならこうする!」と言うのがあれば、ぜひコメントください!

よし、やってみよう!
f:id:Infoment:20190728202738p:plain

一瞬で勝敗が決しては、無味乾燥なものとなってしまう。そこで今回は「マンゴー杯」と称して、当選者3名が出るまで一人ずつ落選する様子を、視覚的に表現してみた。

まず準備するのは、以前にも紹介した ↓ こちらのクラスモジュール。
※長ったらしいので、折りたたんであります。

これを利用して、作成したマクロがこちら。
f:id:Infoment:20190728212224p:plain

Sub MangoCup()
    Dim TBC As TextBoxClass
    Set TBC = New TextBoxClass
    
    ' 元となる名簿の範囲。
    Dim SourceRange As Range
    Set SourceRange = Range("A5:A11")
    
    ' 抽選する名簿の範囲。
    ' 抽選するたびに変更される。
    Dim tempRange As Range
    Set tempRange = SourceRange
    
    ' 最後に元の箇所へ名簿を復元するための配列。
    Dim arr() As Variant
        arr = SourceRange
        
    ' 当選者数。
    Dim WinningCount As Long
        WinningCount = Range("B2").Value
    Dim i As Long
    
    ' 予選の回数。
    Dim iMax As Long
        iMax = SourceRange.Count - WinningCount
    
    ' マンゴーの数になるまで、毎回一人ずつ脱落させる。
    For i = 0 To iMax
        If i = iMax Then
            tempRange.Cells(0, 2) = "当選者"
        Else
            tempRange.Cells(0, 2) = "残念!"
        End If
    
        Set TBC.TargetRange = tempRange
        
        ' 名前の移動先をランダムに決定。
        TBC.GetDestinationRange_2 tempRange.Offset(, 1)
        
        ' セルからテキストボックスへ転記。
        TBC.CellToTextbox
        
        ' テキストボックスを移動させる。
        TBC.RandomMovingTextBox
        
        ' テキストボックスの値をセルへ転記。
        TBC.TextboxToCell
        
        ' テキストボックスを削除。
        ' 本来は自動で消える設定だが、動きがぎこちなかったので
        ' 念押しで最後に全て削除する。
        ActiveSheet.Shapes.SelectAll
        Selection.Delete
    
        ' 1個残しの場合エラーとなるため、エラー無視のおまじない。
        On Error Resume Next
        
        ' 次の予選メンバーを決める。
        Set tempRange = tempRange.Offset(, 1).Resize(tempRange.Count - 1)
    Next
    
    ' 最初の名簿を返す。
    SourceRange = arr
End Sub

結果、このようになった。
f:id:Infoment:20190728211857g:plain

最後まで自分が残るかどうか、ドキドキ感満載で楽しめること間違いなし。
でも正直、効果は未知数です。

参考まで。