抽選作業を操作できるユーザーフォームを作成する

tyusenuformeyecatch

抽選を操作するにはユーザーフォームを利用します。
設置するコントロールが多くなります。設置方法は同じパターンでできます。ただし入力ミスには注意しましょう。

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

今回のエクセルVBA抽選ソフトの作成部分は、「ユーザーフォーム」です。これによって抽選作業の操作を行います。

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

コンテンツ

ユーザーフォームのデザイン

tyusenuform017_kai

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

tyusentorisetu002a

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

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

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

各コントロールを配置する

tyusenuform018_kai

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

userformeyecatch ユーザーフォームの挿入と表示は簡単 エクセルVBA userformcommdeyecatch コマンドボタンをユーザーフォームに設置する userformtexteyecatch テキストボックスをユーザーフォームに設置する

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

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

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

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

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

tyusenuform001a

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

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

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

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

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

と入力します。

tyusenuform002a

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

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

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

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

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

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

と入力します。

tyusenuform003a

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

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

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

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

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

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

と入力します。

tyusenuform004a

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

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

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

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

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

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

と入力します。

tyusenuform005a

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

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

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

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

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

と入力します。

tyusenuform006a

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

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

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

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

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

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

1位賞名の場合

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

と入力します。

tyusenuform007a

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

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

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

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

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

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

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

1位賞当選本数の場合

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

と入力します。

tyusenuform008a

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

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

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

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

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

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

と入力します。

tyusenuform009a

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

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

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

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

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

と入力します。

tyusenuform010a

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

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

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

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

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

と入力します。

tyusenuform011a

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

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

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

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

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

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

1位単発の場合は、

(オブジェクト名)一位単発
Caption1位単発
BackColor適宜お好み
Font適宜お好み
ForeColor適宜お好み
TabIndex19

と入力します。

tyusenuform012a

1位連続の場合は、

(オブジェクト名)一位連続
Caption1位連続
BackColor適宜お好み
Font適宜お好み
ForeColor適宜お好み
TabIndex20

と入力します。

tyusenuform013a

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

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

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

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

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

と入力します。

tyusenuform014a

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

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

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

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

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

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

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

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

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

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

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

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

「ON」の場合は

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

と入力します。

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

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

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

tyusenuform015a
  • 重複メッセージグループ名・・・・ 「重複MS」
  • 単発抽選抽選スピードグループ名・・・・ 「単発速度」
  • 単発抽選点滅回数グループ名・・・・ 「単発回数」
  • 連続抽選抽選スピードグループ名・・・・ 「連続速度」

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

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

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

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

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

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

と入力します。

tyusenuform016a

フォームモジュールへのコード記述

tyusenuform019_kai

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

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

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

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

vbacalleyecatch 部品化プロシージャーでCallステートメントは必須

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

vbainsteeyecatch Instr関数・InstrRev関数は文字列を検索する。ファイルパス取得に威力
VBA
Private Sub 一位賞_Change()
    With Me.一位賞
        If InStr(.Value, "(仮)") <> 0 Then
                .ForeColor = &HC0C0C0
        Else
                .ForeColor = &H0&
        End If
    End With
End Sub

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

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

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

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

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

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

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

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

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

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

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

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

VBA
Private Sub 抽選項目最新_Click()
    Call Module4.抽選項目バックアップ旧データ
    Call Module4.抽選項目更新
End Sub

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

対応する賞の当選本数が入力されていないときは、メッセージを出し「0」入力を行いプログラムを終了します。

賞名と当選本数が「白紙(デフォルトの(仮)賞も無い)」の場合は、空欄状態で抽選項目のバックアップと更新を行います。当選本数が「空欄」なのでプロシージャーは作動しません。

当選本数が入力(0以外の整数)されていて、賞名が空欄の時は「(仮)賞」をテキストボックスに表示し抽選を行います。

これらの条件以外の場合は、Module3の各賞単ボタンまたは連ボタンを起動させます。

「1位単発」ボタンの場合

VBA
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位連続」ボタンの場合

VBA
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位まで記述してください。

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

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

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

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

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

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

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

OptionButton1の場合

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

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

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

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

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

VBA
Private Sub 初期化_Click()
    Call Module1.クリアS
End Sub

ユーザーフォームの表示スイッチのVBA

tyusenuform020_kai

ユーザーフォーム「抽選NAVIGATOR」をこのエクセルVBAソフト起動時に表示するためのコードを記述します。

ブックモジュールに以下のコードを記述します。

VBA
Private Sub Workbook_Open()
    選定ナビ.Show vbModeless
End Sub

シートモジュール「Sheet1(抽選会場)」に以下のコードを記述します。

VBA
Private Sub Worksheet_Activate()
    選定ナビ.Show vbModeless
End Sub

抽選作業を操作するユーザーフォーム のまとめ

tyusenuform021_kai

ここまで、ユーザーフォームの設置の仕方を説明してきました。

設置コントロールの数と種類が多いので間違わないようにしてください。

ユーザーフォームのデザインに特に決まりはありませんので、

それぞれのコントロールのレイアウトなど自由にお考え下さい。

もちろん、ボタンの色やフォントの色やスタイルも自由です。

ちょっとした注意点ですが、ユーザーフォームを作成する場合

デフォルトではスクロールバーが表示されないということです。

大きめのモニタで作業していた場合、実際に使用するPCの画面では、

作ったユーザーフォームが長すぎて、稀に画面からはみ出してしまうことがあります。

うっかりミスですが、他のモニタでの見え方のチェックや、ユーザーフォームのコンパクトなつくり方に注意しましょう。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

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

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

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

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min