ExcelVBAで乱数を使って抽選マクロを作成

この記事を読むのに必要な時間は約 9 分です。

 

Twitterで抽選を行っているのを見かけたので、Excel VBAで抽選マクロを作ってみました。

 

ソースコードを貼り付けて、枠とボタン1つ用意すれば動くようにしています。

 

VBAを勉強する方は、改造してみたら参考になるかもしれません。

 

ガチな人からはダメだしをくらいそうですがご容赦を・・・。

スポンサーリンク

Excel VBAの抽選マクロを作ってみた

今回作ったマクロはこんな感じです。

  • ボタンをクリックすると、下に貼り付けた応募者一覧からランダムで1名を抽出
  • 貼り付けていなかったらエラー
  • 間が抜けていてもエラー

 

Excel VBAで乱数を使って抽選マクロ作成

 

一覧の名簿には、ウィキペディアから西武ライオンズの方々のお名前を記載させていただいています。

引用元:ウィキペディア 埼玉西武ライオンズの選手一覧

 

抽選マクロの作り方

マクロのExcelファイルをそのまま公開すれば楽なんですが、ファイルに個人情報が入っちゃったりします。

 

それに、マクロの中身が分からない状態でダウンロードするのも不安かと思いますので、ソースコードなど出来るだけコピペで作って実行できるように解説したいと思います。

当選者と抽選対象者の枠を用意

まずは枠を用意します。
図と同じ位置に貼り付けてください。

 

当選者のところ:B4セルから貼り付け

No お名前 コメント
★当選者★

 

抽選対象者のところ:C9セルから貼り付け

No お名前(敬称略) コメント

 

Excel VBAで乱数を使って抽選マクロ作成

 

抽選ボタンを作る

「開発」タブから、「挿入」、コマンドボタン(ActiveX コントロール)をクリックして、ボタンを入れます。

 

「開発」タブが表示されていないときは、こちらの記事の最初のほうを参考にしてみてください。

 

 

Excel VBAで乱数を使って抽選マクロ作成

 

ボタンが入りました。

Excel VBAで乱数を使って抽選マクロ作成

 

「CommandButton1」って何だよ?と思う方もいらっしゃるかも。
やっぱりボタン名は変更しておきたいですよね。

 

デザインモードの状態で、ボタンを右クリックしてプロパティを開きます。

Excel VBAで乱数を使って抽選マクロ作成

 

プロパティにはいろいろと項目がありますが、変更するのはとりあえず次の2つで大丈夫です。

 

「(オブジェクト名)」:ソースコード内で使うボタン名です。
今回は一応変更していますが、ぶっちゃけボタン1つだけなら変えなくても困りませんw

 

Excel VBAで乱数を使って抽選マクロ作成

 

Captionを変更した通りに、画面の表示も変更されました。

Excel VBAで乱数を使って抽選マクロ作成

 

ソースコードを作成

今度はボタンをクリックしたときの動作について、ソースコードを書いていきます。

Excel VBAで乱数を使って抽選マクロ作成

 

「SelectButton1」というボタンをクリックしたときの動作が、次のように書かれています。

 

ボタンをクリックしたら何して欲しいのか、この中に書けば抽選出来るわけです。

 

が、ちょっといったん置いておきます。

Excel VBAで乱数を使って抽選マクロ作成

 

「Microsoft Excel Objects」を右クリックして、「挿入」から「標準モジュール」を選択します。

 

「Module1」が出来ます。

Excel VBAで乱数を使って抽選マクロ作成

 

「Module1」を右クリックして、中にソースコードを書きます。

 

もしも書き方が分からない場合は、ソースコードをコピペしちゃってください。

 

特定の範囲内で乱数を取得する

一応、ポイントになりそうなところだけ説明しておきます。

 

応募者の人数によって、生成する乱数の範囲を絞ります。
人数が1桁ならlNumLenは10、2桁なら100、3桁なら1000をセットするのがここです。

 

乱数を生成する関数は、「Rnd()」なのですが、出来るのは0以上1未満の値です。

 

先ほどのlNumLenを「Rnd()」に掛けることで、欲しい桁数の数字は整数部分。
Int関数で整数部だけ取り出します。

 

あとは、Do Loopで応募者の人数以下になるまでループします。

 

Module1:

 

Excel VBAで乱数を使って抽選マクロ作成

 

Module1の中に書いた「selectPersonMain」が本体です。

 

あとは、「SelectButton1_Click()」から「selectPersonMain」を呼び出すだけ。

 

Excel VBAで乱数を使って抽選マクロ作成

 

「SelectButton1_Click()」の「_」より手前の部分は、プロパティの(オブジェクト名)と一致させてくださいね。

 

これでボタンをクリックしたら動くはずです。

テスト

正常なヤツ

ちょっと抽選ボタンを押して、動作を確認してみます。

Excel VBAで乱数を使って抽選マクロ作成

 

ちゃんと動いたっぽいので、今度は何回もやってみます。
毎回同じ人が当選していたらダメですから。

 

そしたら、ちゃんと毎回違う人が当選者となりました。

 

これで抽選する動作は大丈夫です。

Excel VBAで乱数を使って抽選マクロ作成

 

エラーになるヤツ

エラーチェックの動作も確認します。

 

途中の名前が空欄の場合、エラーメッセージを表示します。

 

複数行未入力でも、「〇〇行目が空欄です」の〇〇は一番上の行だけ。
楽してすみません・・・。

 

全部出していたら、何百行も未入力だと、エラーメッセージがスゴイことになっちゃいますからね。

Excel VBAで乱数を使って抽選マクロ作成

 

未入力時のエラーチェックです。

 

一覧が未入力の場合でも、エラーだと判定してくれました。

Excel VBAで乱数を使って抽選マクロ作成

 

実は、名前の列で未入力かどうか判定しています。
名前の列以外が入力済みでもエラーになります。

 

名前だけ入力していないとか、おそらく無いと思うのでたぶん大丈夫。

 

抽選対象者の一覧を貼り付けてボタンを押すだけのシンプルなマクロだし、複雑なチェックも必要ないでしょう。

スポンサーリンク

まとめ:Excel VBAで抽選マクロ作成

Excel VBAで抽選のマクロを作ってみました。

 

応募者の一覧を貼り付けて抽選する場合には使えると思います。
VBAを勉強するネタとしてならもっと使えるかもしれません。

 

Twitterでよくやっている、「リプくれた方の中から抽選で1名にプレゼント」のような場合だと、一覧を作るだけで消耗しそうです(笑)

 

KUMAPさんがやっていた、応募日時をランダムで取得するやり方がシンプルですぐ出来ていいやり方だと思います。

 

リプくれたアカウント一覧って、API使って上手いこと一覧を作れるんですかね。
また時間があったらやってみます。