google formを使って抽選受付

紙の抽選券をせっせと作っている皆さん。お疲れ様です。
おそらく皆さんは抽選券なるものを印刷してハサミで切って、当日は受付の時にそれらを渡して抽選してはい何番が当選ですとかやるんですよね?

めんどくさくないですか?

印刷したものを切る手間、渡す手間、参加者が渡された紙を紛失するリスク…
もちろん紙には紙のメリットもあると思うのですが、僕の目にはややデメリットの方が多く映ります。
マンパワーで乗り切るのもいいんですけど、怠惰は美徳の精神でなんとかこう自動化できないかなと。
結局のところ、抽選券欲しいって言ってくれた人全員に重複しない番号を渡してあげて、かつ本人確認できればそれでいいんですよね。

というわけで、実際にそういったものを作ってみたよっていうお話です。

今回使ったのはgoogle formです。
https://www.google.com/intl/ja_jp/forms/about/
アンケートをとったりするときに使うやつです。
名前、住所、メールアドレスなどの項目が設定できて、回答結果はgoogle spreadsheetに自動でまとめてくれます。

便利。

これを使うだけで、参加したい人を一覧にまとめることができます。
もしかしたらこれだけで満足っていうところもありそうです。
いやでも満足したくないですね。
これだけだと受付したときにどういう内容を入力したかの控えがないので、参加希望者は入力ミスに気付けないですね。
いやー、受付時に入力した内容がメールで送られてくればいいのに。

なんとgoogle formを使っていれば自動返信も可能です。
試しに、「google form 自動返信」と検索してみるとめちゃくちゃ丁寧に書いてくださっているところがたくさん見つかります。
同じこと書いてもなーという感じがするのでここでは割愛しますが、これで自動返信もできるようになります。
これでもう満足っていうところもありそうです。
いやでもまだ満足したくないです。
これだと抽選結果発表のときに受付時にもらった名前を全体の前で発表しないといけません。
もしかしたら名前出されるのが嫌な人もいるかもしれないのに。
いやー、受付時に固有の番号を振ってその番号で管理できればいいのに。

実は先ほど自動返信を実現する際に貼り付けたスクリプトの一部を再利用するだけで、自動採番と同じことができるようになります。
だいたいどこを参考にしても、

var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getLastRow();
var cols = sheet.getLastColumn();

こういった部分が出てきたと思います。
この中で、getLastRow()はそのスプレッドシートの最終行の位置を整数値で返すものです。
スプレッドシートの1行目には項目名があり、その分行数は増えるので、例えば1人目が回答したときにはgetLastRow()は2という数字を返します。
2人目なら3、3人目なら4というふうにスプレッドシートが何行目まで埋まっているのかを教えてくれるんですね。
あれ、この数字ってn人目ならn+1を返してくれますね。
この数字は絶対に重複しないので、これを使えば回答してくれた人に重複しない数字を自動返信で通知することができそうです。
具体的には、
"あなたの抽選番号は" + (rows - 1) + "番です"
といった具合に書いてあげると良さそうです。

これで、抽選券欲しいって言ってくれた人全員に重複しない番号を渡してあげて、かつ本人確認できるという、今回やりたかったことは全部できるように思います。
あーよかった。
じゃあ万事解決…といきたいところですがここまでだとまだ以下の問題があるんです。
・リストアップしただけでそもそも抽選できていない
・チェックボックスで希望の参加回を指定する形だと、どの人がどの回に参加したいのかが見にくい(チェック漏れが発生する)

ここまではできたのであとはマンパワーでっていうのもアリだと思います。
この時点で抽選券作る労力、配る労力あたりが削減できているので十分といえば十分です。
でも人がやると必ずミスが発生するんですよね。
できれば機械に任せてミスがなるべく入らないようにしたい。

そうなるとこれらも自動化しちゃえばいいじゃんとなるものなのである程度やりました。
しかし、ここから先は少し専門的になってしまうので、聞きたい人がいれば僕に直接聞いてください。

内容を簡単に書くと、
・文字列処理が楽なPython使用した
・スプレッドシートからエクスポートしたcsvファイルを読んで抽選結果を返す
・除外する番号を指定して、その行の回答を無効にする(辞退があった番号を手動で追加したり、抽選時に当選番号をそこに自動で追加したり)
・結果発表が複数回あったので、何回目の抽選か切り替えられるようにした
といった内容です。

ここまでできると、
1. google formを公開する
2. 指定の時間になったらcsvファイルをエクスポートする
3. 辞退の連絡などがあった場合、その番号をテキストファイルに追加する
4. プログラムを実行する
5. 出てきた結果を発表する
という作業だけで良くなります。

以上が今回準備しようと調べたり作ったりしたものでした。
眠い中書いてるので読みにくい部分はご容赦ください。
ここまでありがとうございました。

この記事が気に入ったらサポートをしてみませんか?