マクロを作ると本質が見える?
こんにちは。
派犬事務員のコロ子です。
前回からExcel VBAであみだくじを作成中。
【前回の記事】
①派遣事務 特殊スキルは評価されにくい - 派遣事務員の迷走
②VBAで「あみだくじ」を作ろう。 - 派遣事務員の迷走
③使えないマクロにならないために - 派遣事務員の迷走
前回、あみだくじの結果が一瞬で分かるコードを書いていて思ったんだけど・・・。
ここまで来ると、そもそも「あみだくじ」の必要があるのかどうか。
「じゃんけん」でも、「あたり・はずれを書いた紙を箱に入れてくじ引きする」、でも何でも良かったと思う。
30人中、17人にマンゴーが当たる。
これを満たせば何でも良かった。
ただ、「じゃんけん」だとなかなか勝負がつかないし、「くじ引き」だと、くじを引く順番で公平さが損なわれる。
だから手っ取り早く「あみだくじ」にしただけであって、何でも良かった。
と言うことは、こんな感じで良くない?
マンゴーの数を入力して
「抽選ボタン」を押す。
↓
マンゴーの数だけ当たりがランダムにでる。
乱数を使えば公平だよね?
【考え方】
マンゴーの数3個でやってみる。
①まず、B列に上からマンゴーの数だけ「当たり」を入れ、それ以降には「はずれ」を入れる。
②乱数を発生させC列に仮置きする。
B列とC列を対象にC列で昇順にソートする。
仮置きしていたC列を削除すれば、ランダムに当たりが出た事になる。
コード
Sub Lottery() Dim i As Long Dim StartCell As Long Dim EndCell As Long Application.ScreenUpdating = False StartCell = 5 EndCell = Cells(Rows.Count, 1).End(xlUp).Row For i = StartCell To EndCell If i - StartCell < Range("B2").Value Then Cells(i, "B").Value = "当たり" Else Cells(i, "B").Value = "はずれ" End If '乱数を発生させ、C列に仮置き Randomize Cells(i, "C").Value = Rnd Next i '乱数入れたC列でソートする Range("B" & StartCell & ":C" & EndCell).Sort Key1:=Range("C4"), Order1:=xlAscending 'C列をクリア Range("C" & StartCell & ":C" & EndCell).Clear Application.ScreenUpdating = True End Sub
感想
今回VBAであみだくじを作っていたら、「そもそもあみだくじにする意味あるのかな?公平なら何でも良くない?」と疑問が沸いた。
業務でも、こういうのいっぱいあると思う。
そもそも、何の為にそれをやるのか。
今までは手作業だったからそのやり方が最善だったけど、本当は何がしたいのか。
マクロを作っていると、本当はどうなんだろう?って思ってくる。
例えば、マンゴーを貰える人を選出する業務があるとして(何のこっちゃ)、毎日あみだくじをやっていたとする。
派犬のコロ子が「あみだくじの意味はありますか?抽選で良くないですか?」なんて言ったところで、「業務規定ではあみだくじで選出することになっています。なので簡単にあみだくじができるツールを作成してください。」と言われてしまう。
働き方改革、業務改善、本当に見直さなければいけないところはどこなんだろう・・・?
社内規定、業務規定の前にして派犬の無力さ(限界)を感じる・・・
お知らせ
今回の抽選のマクロ、コロ子は間借り方式で作ったけど、こういうのの考え方は人それぞれ。
「自分ならこうする!」と言うのがあれば、ぜひコメントください!
ブログ、Twitter@2a9SouLnhptnIqGで随時募集してます。
もちろん「あみだくじ」の書き方も募集してます!
自分が絶対当たるようにしちゃうとか(不正)もありです。
セラエノ (id:celaeno42)さんのあみだくじ。説明が分かりやすい!
動くのが見えるから楽しい!
celaeno42.hatenablog.com