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列目に×を代入します。


実行結果


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

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク