環境:Office365 Windows10
様々なサイトでVBAの解説はされていると思いますが、ところどころ端折っていたり、専門用語が書いてあったりで結局わからない。。という人の為の解説記事です。
ユーザーフォームのチェックボックスについて超丁寧に解説しますので、初心者の方はぜひ全部読んでみてください。
前回の続きになります。
本日はチェックボックスの
グループ化の方法
全件選択
について解説します。
こちらが本日のサンプルです。
グループ化
まず「全件選択」のチェックボックスはグループから除外して残りのA~E社を対象にグループ化していきます。
プロパティを確認します。
まず全件選択のチェックボックスが
残りのA~E社が順にCheckBox2、CheckBox3,,,,,
と続いていきます。
続いてプロパティの「GroupName」を確認します。
現在空白になっているこちらのGroupNameの欄に任意のグループ名を付けます。
今回は「会社名」と付けました。
同じように残りのB社~E社まで同じようにGroupNameの欄に「会社名」と入力していきます。
これでグループ化の完成です。
続いて全件選択の方法を解説します。
まずはプログラムを見てください。
プログラムを解説します。
- CheckBox1_Click()
CheckBox1がクリックされた時にこの処理を実行します。
- Dim ctl as Controls
Controls=コントロール(チェックボックスやラジオボタンなどの部品のこと)
- For Each ctl In Me.Controls
UserForm1に存在するコントロールを一つずつ繰り返しctlの中へ入れます。
※今回の場合はMe=UserForm1を指します
- If TypeName(ctl) = “CheckBox” And ctl.Name <> “CheckBox1” Then
CheckBoxタイプだった場合と全件選択であるCheckBox1を除いて以下の処理をします。
- If ctl.GroupName = “会社名” Then
コントロールのGroupNameが会社名だった場合に以下の処理をします。
- ctl.Value = CheckBox1.Value
CheckBox1と同じ値を入力します。
要約すると
全てのコントロールを一つずつ繰り返しctlへ一度代入し、もし代入されたコントロールがチェックボックスであり、なおかつ全件選択でもなく、GroupNameが会社名だった場合にCheckBox1と同じ値を入力します。ということです。
これなら「Tror」「False」を分けて考える必要もなくチェックを入れたり外したり出来るわけです。
そして気づいてる人は気づいているかもしれませんが、上記の④と⑤をなぜわけて処理しているかというところです。今回の場合はグループが一つしかないのであまり意味がありませんが、同じフォーム内に「会社名」グループと「会社住所」グループのように複数のグループが存在した場合などは、グループごとに処理を分けて記述しなければいけません。
なのであえてグループ名を別で処理させているのです。
ではプログラムを実行していきます。
画像ではわかりづらいですが、全件選択へチェックをいれたらすべてにチェックが入り、全件選択を解除するとすべてのチェックボックスのチェックが外れます。
結論
VBAのユーザーフォーム上でチェックボックスを使用することで、使用者に複数の選択肢を提供し、システムとの対話的な処理を実現できます。
チェックボックスの作成方法やイベント処理、値の取得方法などを理解し、適切に活用することで、使いやすく柔軟な入力フォームを実現できます。ぜひこれらの機能を活用して、VBAユーザーフォームの開発に役立ててください。
今回はまだ記事にしていない、ForEach文やAnd処理などを書いてしまいました。
またこれからもこれらの解説をしていきますのでもし興味があればまた読んでください。
よろしくお願いします!
コメント