ユーザーフォームを作成して抽選作業を操作する-抽選ソフト作成3

tyusenuformeyecatch

抽選作業を操作するためのユーザーフォーム作成を説明します。
今回はエクセルVBA抽選ソフト作成の3回目になります。
設置コントロールは多いですが、同じパターンで設置できます。
入力ミスに注意しましょう。

こんにちは、じゅんぱ店長(@junpa33)です。

 

今回のエクセルVBA抽選ソフトの作り方は、抽選作業の操作を行う「ユーザーフォーム」づくりです。

全ての抽選の操作を「抽選NAVIGATOR」というユーザーフォームで行うようにします。

 

前の記事を読み直すにはこちら↓です。


tyusenjikkoueyecatch

抽選を実行するVBAコードを組み立てる-抽選ソフト作成2

 

「抽選ソフト作成」の記事一覧を開く

 

コンテンツ

ユーザーフォームの操作パネルのデザイン

 

ユーザーフォーム「抽選NAVIGATOR」の完成形はこのようになります。

tyusentorisetu002a

14項目のコントロールを配置します。

イベントコードをフォームモジュールに記述します。

  1. 「 抽選名称復旧」コマンドボタン
  2. 「抽選名称」テキストボックス
  3. 「参加人数」テキストボックス
  4. 「開催日付」テキストボックス
  5. 「抽選表SET」コマンドボタン
  6. 「賞名6か所」テキストボックス
  7. 「当選本数6か所」テキストボックス
  8. 「抽選項目復旧」コマンドボタン
  9. 「抽選項目登録」コマンドボタン
  10. 「抽選項目更新」コマンドボタン
  11. 「抽選方法12か所」コマンドボタン
  12. 「抽選結果を保存」コマンドボタン
  13. 「イベントコントロール11か所」オプションボタン
  14. 「強制初期化」コマンドボタン

 

ユーザーフォーム作成
各コントロールのオブジェクト配置

 

ユーザーフォームのオブジェクト表示で、ツールボックスからコントロールを配置していきます。

MEMO

具体的な設置方法はこちらを参考にしてください。


ryousyu_userformeyecatcha

ユーザーフォームのVBAで領収書の印刷をコントロールする方法

 

ユーザーフォームに名前を付ける

 

新規作成したユーザーフォームに、コントロールボタンオブジェクトを設置します。

キーボードで「F4」を押してユーザーフォームのプロパティウインドを表示します。

「(オブジェクト名)」と「Caption」に「選定ナビ」と入力します。

ツールボックスから「ラベル」を選択し、上部スペースに「抽選NAVIGATOR」と張り付けてください。

tyusenuform001a

 

①「 抽選名称復旧」コマンドボタン

 

「 抽選名称復旧」コマンドボタンを設置します。

ツールボックスから「コマンドボタン」を選択し、上部スペース適所に設置します。

設置のコマンドボタンプロパティで、

(オブジェクト名) 抽選名称復旧ボタン
Caption 抽選名称復旧
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み

と入力します。

tyusenuform002a

 

②「抽選名称」テキストボックス

 

「 抽選名称」テキストボックスを設置します。

Captionの代わりに、ツールボックスから「ラベル」を選択し、上部スペースに「抽選名称」と張り付けてください。

ツールボックスから「テキストボックス」を選択し、スペース適所に設置します。

設置のテキストボックスプロパティで、

(オブジェクト名) 抽選名称
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 1

と入力します。

tyusenuform003a

 

③「参加人数」テキストボックス

 

「 参加人数」テキストボックスを設置します。

Captionの代わりに、ツールボックスから「ラベル」を選択し、上部スペースに「参加人数(口)」と張り付けてください。

ツールボックスから「テキストボックス」を選択し、スペース適所に設置します。

設置のテキストボックスプロパティで、

(オブジェクト名) 参加人数
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 2

と入力します。

tyusenuform004a

 

④「開催日付」テキストボックス

 

「 開催日付」テキストボックスを設置します。

Captionの代わりに、ツールボックスから「ラベル」を選択し、上部スペースに「開催日付」と張り付けてください。

ツールボックスから「テキストボックス」を選択し、スペース適所に設置します。

設置のテキストボックスプロパティで、

(オブジェクト名) 開催日付
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 3

と入力します。

tyusenuform005a

 

⑤「抽選表SET」コマンドボタン

 

「 抽選表SET」コマンドボタンを設置します。

ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。

設置のコマンドボタンプロパティで、

(オブジェクト名) リセット
Caption 抽選表SET
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 4

と入力します。

tyusenuform006a

 

⑥「賞名6か所」テキストボックス

 

「 賞名」というラベルを設置してください。

「 1位賞名」から「6位賞名」テキストボックスを設置します。

Captionの代わりに、ツールボックスから「ラベル」を選択し、スペースに「各位の賞名」を張り付けてください。

ツールボックスから「テキストボックス」を選択し、スペース適所に設置します。

設置のテキストボックスプロパティで、

1位賞名の場合

(オブジェクト名) 一位賞
BackColor 適宜お好み
Font 適宜お好み
ForeColor 記入不要(フォームモジュールから指定)
TabIndex 5
Text (仮)1位賞

と入力します。

tyusenuform007a

同様に6位賞名まで設置してください。

(注)TabIndexは順番に増やしてください。次の「6」は1位賞の当選本数になります。

 

⑦「当選本数6か所」テキストボックス

 

「 1位賞当選本数」から「6位賞当選本数」テキストボックスを設置します。

Captionの代わりに、ツールボックスから「ラベル」を選択し、スペースに「本」を張り付けてください。

ツールボックスから「テキストボックス」を選択し、スペース適所に設置します。

設置のテキストボックスプロパティで、

1位賞当選本数の場合

(オブジェクト名) 一位本
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 6

と入力します。

tyusenuform008a

同様に6位賞当選本数まで設置してください。

 

⑧「抽選項目復旧」コマンドボタン

 

「 抽選項目復旧」コマンドボタンを設置します。

ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。

設置のコマンドボタンプロパティで、

(オブジェクト名) 抽選項目復旧ボタン
Caption 抽選項目復旧
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み

と入力します。

tyusenuform009a

 

⑨「抽選項目登録」コマンドボタン

 

「 抽選項目登録」コマンドボタンを設置します。

ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。

設置のコマンドボタンプロパティで、

(オブジェクト名) 項目登録
Caption 抽選項目登録
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 17

と入力します。

tyusenuform010a

 

⑩「抽選項目更新」コマンドボタン

 

「 抽選項目更新」コマンドボタンを設置します。

ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。

設置のコマンドボタンプロパティで、

(オブジェクト名) 抽選項目最新
Caption 抽選項目更新
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 18

と入力します。

tyusenuform011a

 

⑪「抽選方法12か所」コマンドボタン

 

ツールボックスから「ラベル」を選択し、「 抽選方法」「単発抽選」「連続抽選」というラベルを設置してください。

スペースに「各位の賞名」を張り付けてください。

「 1位賞」から「6位賞」の「単発」と「連続」のコマンドボタンを合計12個設置します。

ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。

設置のコマンドボタンプロパティで、

1位単発の場合は、

(オブジェクト名) 一位単発
Caption 1位単発
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 19

と入力します。

tyusenuform012a

1位連続の場合は、

(オブジェクト名) 一位連続
Caption 1位連続
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 20

と入力します。

tyusenuform013a

 

⑫「抽選結果を保存」コマンドボタン

 

「 抽選結果を保存」コマンドボタンを設置します。

ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。

設置のコマンドボタンプロパティで、

(オブジェクト名) 結果保存
Caption 抽選結果を保存
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 31

と入力します。

tyusenuform014a

 

⑬「イベントコントロール11か所」オプションボタン

 

ツールボックスから「ラベル」を選択し、

「 イベントコントロール」「重複メッセージ」「単発抽選」「抽選スピード」「点滅回数」「連続抽選」「抽選スピード」

というラベルを設置してください。

「 ON」「OFF」と「L」「M」「H」のオプションボタンを3組設置します。

ツールボックスから「オプションボタン」を選択し、スペース適所に設置します。

オプションボタン設置のコツ

 

そのまま設置するだけでもOKですが、オプションボタンは1つづつバラバラですので、

レイアウト変更などで、どの場所に有ったボタンだったか分からなくなる場合があります。

 

設置時にグループ化しておくと後のメンテが楽になります。

ツールボックスから、まず先にフレームを設置してその上にグループにするオプションボタンを設置するとグループ化できます。

設置のオプションボタンプロパティで、

「ON」の場合は

(オブジェクト名) OptionButton10
Caption ON
GroupName 重複MS

と入力します。

(オブジェクト名)は自動で表示される名前でもOKです。

フレームを使ってグループ化すれば、そのグループ内でのスイッチングになりますが、

GroupNameでグループ名を明示しておいた方がメンテナンス的には楽になります。

tyusenuform015a

重複メッセージグループ名・・・・ 「重複MS」

単発抽選抽選スピードグループ名・・・・ 「単発速度」

単発抽選点滅回数グループ名・・・・ 「単発回数」

連続抽選抽選スピードグループ名・・・・ 「連続速度」

他のオプションボタンも同様に設置してください。

 

⑭「強制初期化」コマンドボタン

 

「 強制初期化」コマンドボタンを設置します。

ツールボックスから「コマンドボタン」を選択し、スペース適所に設置します。

設置のコマンドボタンプロパティで、

(オブジェクト名) 初期化
Caption 強制初期化
BackColor 適宜お好み
Font 適宜お好み
ForeColor 適宜お好み
TabIndex 32

と入力します。

tyusenuform016a

 

フォームモジュールへの各コントロールの
イベント発生のコード記述

 

ユーザーフォームに配置した各コントロールの操作のコードをフォームモジュールに記述していきます。

VBE(ビジュアルベーシックエディタ)で改めてユーザーフォームの「オブジェクトの表示」モードにします。

上から順に、配置した各コントロールを順にダブルクリックしていってください。
(ラベルについては操作対象ではないので今回は不要です。)

終わったところで「コードの表示」モードにすると、各コントロールの「コード記述の外枠」が出来ていると思います。

 

VBAコード参考記事

ここの説明で出てくるVBAコードの参考にしていただける記事です。

 

①「 抽選名称復旧」コマンドボタン

 

Module1から「抽選名称復旧」プロシージャーを起動させます。

コード

Private Sub 抽選名称復旧ボタン_Click()
    Module1.抽選名称復旧
End Sub

 

②「抽選名称」テキストボックス

 

※特にコード記述はありません

 

③「参加人数」テキストボックス

 

※特にコード記述はありません

 

④「開催日付」テキストボックス

 

※特にコード記述はありません

 

⑤「抽選表SET」コマンドボタン

 

「抽選NAVIGATOR」の「参加人数」に数字記入がされていないときはプログラム進行を中止します。

コード

Private Sub リセット_Click()
    Module1.クリアG
    Module1.応募者方眼紙
    If 選定ナビ.参加人数.Value = "" Then
        Exit Sub
    End If
    Module1.応募者配置乱数
End Sub

 

⑥「賞名6か所」テキストボックス

 

「抽選名称」テキストボックスに変化が起こった時に(文字が入力されたときに)

「(仮)」が付く文字の時はグレー色、そうでないときは黒色を表示します。

コード

Private Sub 一位賞_Change()
    With Me.一位賞
        If InStr(.Value, "(仮)") <> 0 Then
                .ForeColor = &HC0C0C0
        Else
                .ForeColor = &H0&
        End If
    End With
End Sub

同様に六位賞まで記述します。

 

MEMO

With~End Withの使い方については、この記事を参考にしてください。


vbawithstateeyecatch

With~End Withの使い方。VBAコードを簡潔に記述する

 

⑦「当選本数6か所」テキストボックス

 

※特にコード記述はありません

 

⑧「抽選項目復旧」コマンドボタン

 

Module1から「抽選項目復旧」プロシージャーを起動させます。

コード

Private Sub 抽選項目復旧ボタン_Click()
    Module1.抽選項目復旧
End Sub

 

⑨「抽選項目登録」コマンドボタン

 

Module3から「抽選項目登録」プロシージャーを起動させます。

コード

Private Sub 項目登録_Click()
    Module3.抽選項目登録
End Sub

 

⑩「抽選項目更新」コマンドボタン

 

Module4から「抽選項目バックアップ旧データ」プロシージャーを実行後

「抽選項目更新」プロシージャーを実行します。

コード

Private Sub 抽選項目最新_Click()
    Module4.抽選項目バックアップ旧データ
    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
        Module4.抽選項目バックアップ旧データ
        Module4.抽選項目更新
    End If
    
    If Worksheets("抽選会場").Range("C5") <= 0 Then Exit Sub
    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位まで記述してください。

 

MEMO

メッセージボックスについてはこの記事を参考にできます。


vbamsgboxeyecatch

メッセージボックス MsgBox実際の使い方を最速に理解

 

⑫「抽選結果を保存」コマンドボタン

 

Module4から「当選者リスト作成」プロシージャーを実行します。

コード

Private Sub 結果保存_Click()
    Module4.当選者リスト作成
End Sub

 

⑬「イベントコントロール11か所」オプションボタン

 

オプションボタンがクリックされた時は、それぞれの識別コードが発生するようにしています。

これは、フォームモジュール上ではなく、Module3で行われるようにしています。

OptionButton1の場合

Module3から「option1ボタン」プロシージャーを実行します。

コード

Private Sub OptionButton1_Click()
    Module3.option1ボタン
End Sub

同様にボタン11まで記述してください。

 

⑭「強制初期化」コマンドボタン

 

Module1から「クリアS」プロシージャーを実行します。

コード

Private Sub 初期化_Click()
    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を独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

 

「エクセルVBA最速理解」の記事一覧を開く

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

 

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。