複数あるチェックボックスをVBAで判定!
①サンプルフォーム

サンプルフォーム
手 順
- 上図のようなフォームを作成します。
解 説
項目にチェックをし[実行]ボタンを押すとテキストボックスにチェックされた項目が表示されると言う単純なプログラムを想定しています。
②Excelを開くと自動でこのユーザーフォームが開くようにする
- Private Sub Workbook_Open()
- UserForm1.StartUpPosition = 2 '画面中央
- UserForm1.Show 'ユーザフォームを表示
- End Sub
手 順
- WorkbookのOpenイベントに上記コードを記述する。
解 説
このExcelを開いた際に自動的にこのフォームが開くようにする処理です。WorkbookのOpenイベントはこのエクセルが開いた時に実行されるイベントです。 ここに「UserForm1.Show」でフォームを表示するよう命令を記述します。
「UserForm1.StartUpPosition = 2」はフォームをPC画面の真ん中に表示する命令です。
「StartUpPosition = 3」なら画面左上
③実行が押された時の処理
- Private Sub CommandButton1_Click()
- Dim chkBox As Control
- Dim wkStr As String
- wkStr = ""
- For Each chkBox In Controls
- '--チェックボックスの名前に「CheckBox」の文字列があるか?
- If InStr(chkBox.Name, "CheckBox") <> 0 Then
- '--チェックされていれば
- If chkBox.Value = True Then
- wkStr = wkStr & "|" & chkBox.Caption
- End If
- End If
- Next chkBox
-
- '--文末に「|」を付けてテキストボックス」に書出し
- If wkStr <> "" Then
- wkStr = wkStr & "|"
- TextBox1.Text = wkStr
- Else
- MsgBox "1つもチェックされていません!", vbOKOnly + vbInformation, "確認してね"
- End If
- End Sub
手 順
- CommandButton1のClickイベントに上記コードを記述する。
解 説
[実行]ボタン(CommandButton1)が押された時の処理です。CommandButton1のClickイベントは[実行]がクリックされた時に実行されるイベントです。
ポイントは「chkBox」にフォーム上のすべてのコントロールを一括取得する所です。
02行:「chkBox」と言うコントロール型の変数を定義
06行:「For Each 変数 In コレクション」で1つ1つのコントロールを処理していく
08行:「chkBox.Name」でコントロールがチェックボックスかどうか調べる
10行:「chkBox.Value = True」でチェックボックスがチェックされているか調べる
11行:チェックされていれば「wkStr」変数に格納する
19行:「wkStr」が空でなければテキストボックス(TextBox1)に表示する
④実行結果

実行結果
解 説
項目にチェックをし[実行]ボタンを押します。テキストボックスにチェックされた文字列が表示されればOKです。
<後記>
今回は「For Each 変数 In コレクション」でコントロールを処理する部分を中心にしてみました。 VBAのプログラムでいろいろと応用の効く構文になりますので、みなさんの参考になれば幸いです。
今回は「For Each 変数 In コレクション」でコントロールを処理する部分を中心にしてみました。 VBAのプログラムでいろいろと応用の効く構文になりますので、みなさんの参考になれば幸いです。