Excel VBA チェックボックスの状態を取得する

スポンサーリンク

チェックボックスの状態を取得する方法

チェックボックスの状態を取得または設定するには、CheckBox【チェックボックス】コントロールオブジェクトのValue【バリュー】プロパティを使用します。

Value【バリュー】プロパティの書式と設定値・戻り値の説明

【取得】
取得値 = オブジェクト.Value
【設定】
オブジェクト.Value = 設定値

  • オブジェクト(必須)
    CheckBox【チェックボックス】コントロールオブジェクトを表すオブジェクト名を指定します。
  • 設定値 戻り値
    設定値・戻り値内容
    Trueチェックがされている状態
    Falseチェックがはずれている状態
    Null無効の状態

    ※Null(無効の状態)に設定するにはCheckBox【チェックボックス】コントロールオブジェクトのTripleState【トリプルスタート】プロパティにTrueを設定する必要があります。


Controls【コントロールズ】コレクション

フォームに配置されているコントロールのコントロールオブジェクトを取得するには、Controls【コントロールズ】コレクションを使用します。

Controls【コントロールズ】コレクションの書式の引数の説明

[]内は省略可能です。
Controls( Index )

  • Index【インデックス】
    参照するコントロールのインデックス番号またはオブジェクト名を文字列で指定します。

チェックボックスの状態を取得するコードと解説


チェックボックスが4つ配置されていて、コマンドボタンが1つあるフォームを想定したコードでチェックボックスに1つもチェックがなかった場合にメッセージを表示して処理を中断するコード例です。

Private Sub CommandButton1_Click()
Dim コントロール As Control
Dim チェック状態 As Boolean
  チェック状態 = False
 For Each コントロール In Controls
 If TypeName(コントロール) = "CheckBox" Then
  If コントロール.Value = True Then
 チェック状態 = True
 Exit For
  End If
 End If
Next
 If チェック状態 = False Then
  MsgBox "選択されていません。"
 Exit Sub
 End If
End Sub
1行目【Private Sub CommandButton1_Click()】
コマンドボタンがクリックされたときに発生するCommandButton【コマンドボタン】コントロールオブジェクトのClick【クリック】イベントプロシージャーにコードを記述します。


2行目【Dim コントロール As Control】
フォームに配置されているコントロールオブジェクトを格納する変数「コントロール」をオブジェクト型(Control)で宣言します。


3行目【Dim チェック状態 As Boolean】
配置されているチェックボックスのチェック状態を格納する変数「チェック状態」をブール型(Boolean)で宣言します。


4行目【チェック状態 = False】
チェックボックスのチェック状態を格納する変数「チェック状態」に初期値としてチェックされていない状態を表すFalseを代入します。


5行目【For Each コントロール In Controls】
For Each【ファアイーチ】ステートメントを使用して繰り返し処理の始まりです。フォーム上のすべてのコントロールを表すControls【コントロールズ】コレクション内の個々のコントロールを表すControl【コントロール】オブジェクトを繰り返し処理の中で順に参照して変数「コントロール」に順に代入します。


6行目【If TypeName(コントロール) = “CheckBox” Then】
Ifステートメントで条件分岐をします。TypeName【タイプネーム】関数を使用してコントロールオブジェクトが格納されている変数「コントロール」に格納されているコントロールがCheckBox【チェックボックス】だったときを定義します。


7行目【If コントロール.Value = True Then】
6行目の条件分岐で変数「コントロール」に格納されているコントロールがチェックボックスの場合、If【イフ】ステートメントを使用してさらに条件分岐をします。CheckBox【チェックボックス】コントロールオブジェクトのValue【バリュー】プロパティでチェックボックスの状態を取得しTrue(チェックされている)のときを定義します。


8行目~9行目【チェック状態 = True
Exit For】

7行目の条件分岐が成立した場合、つまりチェックボックスにチェックがされている場合、チェックボックスのチェック状態を格納する変数「チェック状態」にチェックされている状態を表す「True」を代入しExit Forステートメントを設定して繰り返し処理を途中で中断します。つまり、For Each【ファアイーチ】ステートメントでフォーム上のコントロールの数、繰り返し処理をしますがチェックがされている状態のチェックボックスがみつかった時点で繰り返し処理を終了するということです。


13~15行目【If チェック状態 = False Then
MsgBox “必ず1つ以上選択してください。”
Exit Sub】

If【イフ】ステートメントで条件分岐です。チェックボックスのチェック状態が格納されている変数「チェック状態」がFalse のときを定義します。つまり、5行目からの繰り返し処理で確認したチェックボックスのチェック状態がチェックされていない
状態を表すFalseだったときを表します。条件が成立した場合は、メッセージを表示してExit Sub【エグジットサブ】ステートメントでSub【サブ】プロシージャーを途中で終了します。


実行結果


チェックボックスの状態をセルに表示するコードと解説

Private Sub CommandButton1_Click()
Dim コントロール As Control
Dim チェック状態 As Boolean
 チェック状態 = False
 For Each コントロール In Controls
  If TypeName(コントロール) = "CheckBox" Then
   If コントロール.Value = True Then
  チェック状態 = True
 Exit For
   End If
  End If
 Next
  If チェック状態 = False Then
   MsgBox "選択されていません。"
   Exit Sub
  End If

Dim 最終行 As Integer
  最終行 = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1
Dim i As Integer
 For i = 1 To 4
  If Controls("checkbox" & i).Value = True Then
   Worksheets("sheet1").Cells(最終行, i).Value = "●"
  Else
   Worksheets("sheet1").Cells(最終行, i).Value = "×"
  End If
 Next i
End Sub
1~16行目
上記で説明した、チェックボックスのチェック状態を確認するコードです。そのコードのあとにチェックボックスの状態をセルに表示するコードを記述します。


18行目
【Dim 最終行 As Integer】

セルのデータが入力されている最終行番号の次の行番号を格納する変数「最終行」を整数型(Integer)で宣言します。


19行目【最終行 = Worksheets(“sheet1”).Cells(Rows.Count, 1).End(xlUp).Row + 1】
sheet1のA列の最終セルからEnd【エンド】プロパティで引数をxlupに指定して最終セルから上方向にデータが入力されている終端セルを参照しRow【ロウ】プロパティで行番号を取得して1を加算することでデータが入力されている終端セルの次の行の行番号を取得して変数「最終行」に代入します。


20行目【Dim i As Integer】
チェックボックスの数とセルの列番号を兼ねるカウンター変数「i」を整数型(Integer)で宣言します。


21行目【For i = 1 To 4】
For Next【フォアネクスト】ステートメントで繰り返し処理の始まりです。カウンター変数iにチェックボックスの数である1~4の値を順次代入します。


22行目【If Controls(“checkbox” & i).Value = True Then】
If【イフ】ステートメントで条件分岐です。Controls【コントロールズ】コレクションを使用して引数にチェックボックスのオブジェクト名を設定して個々のチェックボックスオブジェクトのValue【バリュー】プロパティでチェック状態を確認しTrue(チェックされている)の場合を定義します。


23行目【Worksheets(“sheet1”).Cells(最終行, i).Value = “●”】
22行目の条件分岐が成立した場合つまり、チェックボックスがチェックされている場合セルのデータが入力されている次の行のi列目に●を代入します。


24~25行目【Else
Worksheets(“sheet1”).Cells(最終行, i).Value = “×”】

Else【エルス】キーワードを使用して条件が成立しなかった場合、つまりチェックボックスがチェックされていない場合、セルのデータが入力されている次の行のi列目に×を代入します。


実行結果


以上で、チェックボックスの状態を取得する方法についての解説を終了します。
ありがとうございます。

スポンサーリンク

関連記事・広告