抽選を操作するにはユーザーフォームを利用します。
設置するコントロールが多くなります。設置方法は同じパターンでできます。ただし入力ミスには注意しましょう。
こんにちは、じゅんぱ店長(@junpa33)です。
今回のエクセルVBA抽選ソフトの作成部分は、「ユーザーフォーム」です。これによって抽選作業の操作を行います。
全ての抽選の操作を「抽選NAVIGATOR」というユーザーフォームで行うようにします。
抽選ソフト作成の記事編成
- エクセルVBA抽選ソフトの使い方とダウンロード
- エクセルVBA抽選ソフトの作成手順
コンテンツ
ユーザーフォームのデザイン
ユーザーフォーム「抽選NAVIGATOR」の完成形はこのようになります。
14項目のコントロールを配置します。
イベントコードをフォームモジュールに記述します。
- 「 抽選名称復旧」コマンドボタン
- 「抽選名称」テキストボックス
- 「参加人数」テキストボックス
- 「開催日付」テキストボックス
- 「抽選表SET」コマンドボタン
- 「賞名6か所」テキストボックス
- 「当選本数6か所」テキストボックス
- 「抽選項目復旧」コマンドボタン
- 「抽選項目登録」コマンドボタン
- 「抽選項目更新」コマンドボタン
- 「抽選方法12か所」コマンドボタン
- 「抽選結果を保存」コマンドボタン
- 「イベントコントロール11か所」オプションボタン
- 「強制初期化」コマンドボタン
各コントロールを配置する
ユーザーフォームのオブジェクト表示で、ツールボックスからコントロールを配置していきます。
ユーザーフォームの挿入と表示は簡単 エクセルVBA コマンドボタンをユーザーフォームに設置する テキストボックスをユーザーフォームに設置するユーザーフォームに名前を付ける
新規作成したユーザーフォームに、コントロールボタンオブジェクトを設置します。
キーボードで「F4」を押してユーザーフォームのプロパティウインドを表示します。
「(オブジェクト名)」と「Caption」に「選定ナビ」と入力します。
ツールボックスから「ラベル」を選択し、上部スペースに「抽選NAVIGATOR」と張り付けてください。
①「 抽選名称復旧」コマンドボタン
「 抽選名称復旧」コマンドボタンを設置します。
ツールボックスから「コマンドボタン」を選択し、上部スペース適所に設置します。
設置のコマンドボタンプロパティで、
(オブジェクト名) | 抽選名称復旧ボタン |
Caption | 抽選名称復旧 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
と入力します。
②「抽選名称」テキストボックス
「 抽選名称」テキストボックスを設置します。
Captionの代わりに、ツールボックスから「ラベル」を選択し、上部スペースに「抽選名称」と張り付けてください。
ツールボックスから「テキストボックス」を選択し、スペース適所に設置します。
設置のテキストボックスプロパティで、
(オブジェクト名) | 抽選名称 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 1 |
と入力します。
③「参加人数」テキストボックス
「 参加人数」テキストボックスを設置します。
Captionの代わりに、ツールボックスから「ラベル」を選択し、上部スペースに「参加人数(口)」と張り付けてください。
ツールボックスから「テキストボックス」を選択し、スペース適所に設置します。
設置のテキストボックスプロパティで、
(オブジェクト名) | 参加人数 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 2 |
と入力します。
④「開催日付」テキストボックス
「 開催日付」テキストボックスを設置します。
Captionの代わりに、ツールボックスから「ラベル」を選択し、上部スペースに「開催日付」と張り付けてください。
ツールボックスから「テキストボックス」を選択し、スペース適所に設置します。
設置のテキストボックスプロパティで、
(オブジェクト名) | 開催日付 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 3 |
と入力します。
⑤「抽選表SET」コマンドボタン
「 抽選表SET」コマンドボタンを設置します。
ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。
設置のコマンドボタンプロパティで、
(オブジェクト名) | リセット |
Caption | 抽選表SET |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 4 |
と入力します。
⑥「賞名6か所」テキストボックス
「 賞名」というラベルを設置してください。
「 1位賞名」から「6位賞名」テキストボックスを設置します。
Captionの代わりに、ツールボックスから「ラベル」を選択し、スペースに「各位の賞名」を張り付けてください。
ツールボックスから「テキストボックス」を選択し、スペース適所に設置します。
設置のテキストボックスプロパティで、
1位賞名の場合
(オブジェクト名) | 一位賞 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 記入不要(フォームモジュールから指定) |
TabIndex | 5 |
Text | (仮)1位賞 |
と入力します。
同様に6位賞名まで設置してください。
(注)TabIndexは順番に増やしてください。次の「6」は1位賞の当選本数になります。
⑦「当選本数6か所」テキストボックス
「 1位賞当選本数」から「6位賞当選本数」テキストボックスを設置します。
Captionの代わりに、ツールボックスから「ラベル」を選択し、スペースに「本」を張り付けてください。
ツールボックスから「テキストボックス」を選択し、スペース適所に設置します。
設置のテキストボックスプロパティで、
1位賞当選本数の場合
(オブジェクト名) | 一位本 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 6 |
と入力します。
同様に6位賞当選本数まで設置してください。
⑧「抽選項目復旧」コマンドボタン
「 抽選項目復旧」コマンドボタンを設置します。
ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。
設置のコマンドボタンプロパティで、
(オブジェクト名) | 抽選項目復旧ボタン |
Caption | 抽選項目復旧 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
と入力します。
⑨「抽選項目登録」コマンドボタン
「 抽選項目登録」コマンドボタンを設置します。
ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。
設置のコマンドボタンプロパティで、
(オブジェクト名) | 項目登録 |
Caption | 抽選項目登録 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 17 |
と入力します。
⑩「抽選項目更新」コマンドボタン
「 抽選項目更新」コマンドボタンを設置します。
ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。
設置のコマンドボタンプロパティで、
(オブジェクト名) | 抽選項目最新 |
Caption | 抽選項目更新 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 18 |
と入力します。
⑪「抽選方法12か所」コマンドボタン
ツールボックスから「ラベル」を選択し、「 抽選方法」「単発抽選」「連続抽選」というラベルを設置してください。
スペースに「各位の賞名」を張り付けてください。
「 1位賞」から「6位賞」の「単発」と「連続」のコマンドボタンを合計12個設置します。
ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。
設置のコマンドボタンプロパティで、
1位単発の場合は、
(オブジェクト名) | 一位単発 |
Caption | 1位単発 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 19 |
と入力します。
1位連続の場合は、
(オブジェクト名) | 一位連続 |
Caption | 1位連続 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 20 |
と入力します。
⑫「抽選結果を保存」コマンドボタン
「 抽選結果を保存」コマンドボタンを設置します。
ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。
設置のコマンドボタンプロパティで、
(オブジェクト名) | 結果保存 |
Caption | 抽選結果を保存 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 31 |
と入力します。
⑬「イベントコントロール11か所」オプションボタン
ツールボックスから「ラベル」を選択し、
「 イベントコントロール」「重複メッセージ」「単発抽選」「抽選スピード」「点滅回数」「連続抽選」「抽選スピード」
というラベルを設置してください。
「 ON」「OFF」と「L」「M」「H」のオプションボタンを3組設置します。
ツールボックスから「オプションボタン」を選択し、スペース適所に設置します。
オプションボタン設置のコツ
そのまま設置するだけでもOKですが、オプションボタンは1つづつバラバラですので、
レイアウト変更などで、どの場所に有ったボタンだったか分からなくなる場合があります。
設置時にグループ化しておくと後のメンテが楽になります。
ツールボックスから、まず先にフレームを設置してその上にグループにするオプションボタンを設置するとグループ化できます。
設置のオプションボタンプロパティで、
「ON」の場合は
(オブジェクト名) | OptionButton10 |
Caption | ON |
GroupName | 重複MS |
と入力します。
(オブジェクト名)は自動で表示される名前でもOKです。
フレームを使ってグループ化すれば、そのグループ内でのスイッチングになりますが、
GroupNameでグループ名を明示しておいた方がメンテナンス的には楽になります。
- 重複メッセージグループ名・・・・ 「重複MS」
- 単発抽選抽選スピードグループ名・・・・ 「単発速度」
- 単発抽選点滅回数グループ名・・・・ 「単発回数」
- 連続抽選抽選スピードグループ名・・・・ 「連続速度」
他のオプションボタンも同様に設置してください。
⑭「強制初期化」コマンドボタン
「 強制初期化」コマンドボタンを設置します。
ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。
設置のコマンドボタンプロパティで、
(オブジェクト名) | 初期化 |
Caption | 強制初期化 |
BackColor | 適宜お好み |
Font | 適宜お好み |
ForeColor | 適宜お好み |
TabIndex | 32 |
と入力します。
フォームモジュールへのコード記述
ユーザーフォームに配置した各コントロールの操作のコードをフォームモジュールに記述していきます。
VBE(ビジュアルベーシックエディタ)で改めてユーザーフォームの「オブジェクトの表示」モードにします。
上から順に、配置した各コントロールを順にダブルクリックしていってください。
(ラベルについては操作対象ではないので今回は不要です。)
終わったところで「コードの表示」モードにすると、各コントロールの「コード記述の外枠」が出来ていると思います。
部品化プロシージャーでCallステートメントは必須①「 抽選名称復旧」コマンドボタン
Module1から「抽選名称復旧」プロシージャーを起動させます。
Private Sub 抽選名称復旧ボタン_Click()
Call Module1.抽選名称復旧
End Sub
②「抽選名称」テキストボックス
※特にコード記述はありません
③「参加人数」テキストボックス
※特にコード記述はありません
④「開催日付」テキストボックス
※特にコード記述はありません
⑤「抽選表SET」コマンドボタン
「抽選NAVIGATOR」の「参加人数」に数字記入がされていないときはプログラム進行を中止します。
Private Sub リセット_Click()
Call Module1.クリアG
Call Module1.応募者方眼紙
If 選定ナビ.参加人数.Value = "" Then
Exit Sub
End If
Call Module1.応募者配置乱数
End Sub
⑥「賞名6か所」テキストボックス
「抽選名称」テキストボックスに変化が起こった時に(文字が入力されたときに)
「(仮)」が付く文字の時はグレー色、そうでないときは黒色を表示します。
Instr関数・InstrRev関数は文字列を検索する。ファイルパス取得に威力Private Sub 一位賞_Change()
With Me.一位賞
If InStr(.Value, "(仮)") <> 0 Then
.ForeColor = &HC0C0C0
Else
.ForeColor = &H0&
End If
End With
End Sub
同様に六位賞まで記述します。
⑦「当選本数6か所」テキストボックス
※特にコード記述はありません
⑧「抽選項目復旧」コマンドボタン
Module1から「抽選項目復旧」プロシージャーを起動させます。
Private Sub 抽選項目復旧ボタン_Click()
Call Module1.抽選項目復旧
End Sub
⑨「抽選項目登録」コマンドボタン
Module3から「抽選項目登録」プロシージャーを起動させます。
Private Sub 項目登録_Click()
Call Module3.抽選項目登録
End Sub
⑩「抽選項目更新」コマンドボタン
Module4から「抽選項目バックアップ旧データ」プロシージャーを実行後
「抽選項目更新」プロシージャーを実行します。
Private Sub 抽選項目最新_Click()
Call Module4.抽選項目バックアップ旧データ
Call Module4.抽選項目更新
End Sub
⑪「抽選方法12か所」コマンドボタン
対応する賞の当選本数が入力されていないときは、メッセージを出し「0」入力を行いプログラムを終了します。
賞名と当選本数が「白紙(デフォルトの(仮)賞も無い)」の場合は、空欄状態で抽選項目のバックアップと更新を行います。当選本数が「空欄」なのでプロシージャーは作動しません。
当選本数が入力(0以外の整数)されていて、賞名が空欄の時は「(仮)賞」をテキストボックスに表示し抽選を行います。
これらの条件以外の場合は、Module3の各賞単ボタンまたは連ボタンを起動させます。
「1位単発」ボタンの場合
Private Sub 一位単発_Click()
If Me.一位本.Value = "" Then
If Me.一位賞.Value = "" Then Exit Sub
MsgBox "当選本数が入力されていません。" & vbCrLf & _
"半角数字を入力してください。", vbOKOnly, "メッセージ"
Me.一位本.Value = 0
Exit Sub
ElseIf Me.一位本.Value <> "" And Me.一位賞.Value = "" Then
With Me.一位賞
.Value = "(仮)1位賞"
End With
Call Module4.抽選項目バックアップ旧データ
Call Module4.抽選項目更新
End If
If Worksheets("抽選会場").Range("C5") <= 0 Then Exit Sub
Call Module3.一位単ボタン
End Sub
「1位連続」ボタンの場合
Private Sub 一位連続_Click()
If Me.一位本.Value = "" Then
If Me.一位賞.Value = "" Then Exit Sub
MsgBox "当選本数が入力されていません。" & vbCrLf & _
"半角数字を入力してください。", vbOKOnly, "メッセージ"
Me.一位本.Value = 0
Exit Sub
ElseIf Me.一位本.Value <> "" And Me.一位賞.Value = "" Then
With Me.一位賞
.Value = "(仮)1位賞"
End With
Module4.抽選項目バックアップ旧データ
Module4.抽選項目更新
End If
If Worksheets("抽選会場").Range("C5") <= 0 Then Exit Sub
Module3.一位連ボタン
End Sub
同様に「単ボタン」「連ボタン」6位まで記述してください。
メッセージボックス MsgBox実際の使い方を最速に理解⑫「抽選結果を保存」コマンドボタン
Module4から「当選者リスト作成」プロシージャーを実行します。
Private Sub 結果保存_Click()
Call Module4.当選者リスト作成
End Sub
⑬「イベントコントロール11か所」オプションボタン
オプションボタンがクリックされた時は、それぞれの識別コードが発生するようにしています。
これは、フォームモジュール上ではなく、Module3で行われるようにしています。
OptionButton1の場合
Module3から「option1ボタン」プロシージャーを実行します。
Private Sub OptionButton1_Click()
Call Module3.option1ボタン
End Sub
同様にボタン11まで記述してください。
⑭「強制初期化」コマンドボタン
Module1から「クリアS」プロシージャーを実行します。
Private Sub 初期化_Click()
Call Module1.クリアS
End Sub
ユーザーフォームの表示スイッチのVBA
ユーザーフォーム「抽選NAVIGATOR」をこのエクセルVBAソフト起動時に表示するためのコードを記述します。
ブックモジュールに以下のコードを記述します。
Private Sub Workbook_Open()
選定ナビ.Show vbModeless
End Sub
シートモジュール「Sheet1(抽選会場)」に以下のコードを記述します。
Private Sub Worksheet_Activate()
選定ナビ.Show vbModeless
End Sub
抽選作業を操作するユーザーフォーム のまとめ
ここまで、ユーザーフォームの設置の仕方を説明してきました。
設置コントロールの数と種類が多いので間違わないようにしてください。
ユーザーフォームのデザインに特に決まりはありませんので、
それぞれのコントロールのレイアウトなど自由にお考え下さい。
もちろん、ボタンの色やフォントの色やスタイルも自由です。
ちょっとした注意点ですが、ユーザーフォームを作成する場合
デフォルトではスクロールバーが表示されないということです。
大きめのモニタで作業していた場合、実際に使用するPCの画面では、
作ったユーザーフォームが長すぎて、稀に画面からはみ出してしまうことがあります。
うっかりミスですが、他のモニタでの見え方のチェックや、ユーザーフォームのコンパクトなつくり方に注意しましょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。