こんにちは、今回はExcel VBAマクロのチェックボックスについての記事です。
シートにある複数のチェックボックスのON・OFFの状態を取得して、それに合わせて処理を変更するマクロを作りたいと思いました。
チェックボックスのチェックが一つでも、チェックボックスのチェックが2つ、3つでもそれに合わせた処理(メッセージボックスを表示)するというサンプルマクロを作成します。
3つのチェックボックスのチェックで処理を変えるサンプルマクロ
早速サンプルマクロを載せます。(処理の詳細は次章にて補足説明いれます。)
3つのチェックボックスがあり、各ボックスがチェックされているかされていないか判定します。チェックが1つでも、2つでも3つでも判定できるようにしました。
Sub checkBox_OnOff()
' 変数定義
Dim cbValue1 As Integer ' チェック1の値取得用
Dim cbValue2 As Integer ' チェック2の値取得用
Dim cbValue3 As Integer ' チェック3の値取得用
' ①チェックボックス値取得
cbValue1 = Worksheets("Sheet1").CheckBoxes("チェック 1").Value
cbValue2 = Worksheets("Sheet1").CheckBoxes("チェック 2").Value
cbValue3 = Worksheets("Sheet1").CheckBoxes("チェック 3").Value
' ②取得した値の処理
' チェックボックス1
If cbValue1 = 1 Then
cbValue1 = 100
Else
cbValue1 = 0
End If
' チェックボックス2
If cbValue2 = 1 Then
cbValue2 = 10
Else
cbValue2 = 0
End If
' チェックボックス3
If cbValue3 = 1 Then
cbValue3 = 1
Else
cbValue3 = 0
End If
' 判定値の計算
num = cbValue1 + cbValue2 + cbValue3
' ③判定値によって処理を変更
Select Case num
Case 100
MsgBox ("チェック1ON")
Case 110
MsgBox ("チェック1ON,チェック2ON")
Case 111
MsgBox ("チェック1ON,チェック2ON,チェック3ON")
Case 101
MsgBox ("チェック1ON,チェック3ON")
Case 10
MsgBox ("チェック2ON")
Case 11
MsgBox ("チェック2ON,チェック3ON")
Case 1
MsgBox ("チェック3ON")
Case Else
MsgBox ("チェックなし")
End Select
End Sub
次章にて、それぞれの処理の詳細を記載していきます。
サンプルマクロ補足説明
サンプルマクロのコメント部分に合わせて説明を補足します。
①チェックボックス値取得
チェックボックスの値はONの状態が「1」、OFFの状態が「-4146」の値が返却されます。チェックボックス値を取得することで、ON・OFFの状態を知ることができるので、値を受け取けとります。
上記のように、シート名とシートボックス名を指定することで、値を取得します。それを、変数に一旦格納しておきます。
②取得した値の処理
取得したチェックボックスの値を処理します。ONだった場合、重みを付けます。
具体的には、チェックボックス1がONの時は100、チェックボックス2がONの時は10、チェックボックス3がONの時は1という値を付与します。OFFだった場合、どのチェックボックスも0にします。
このようにすることで、1桁目(百の位)がチェックボックス1のON・OFFの情報、2桁目(十の位)がチェックボックス2のON・OFFの情報、3桁目(一の位)がチェックボックス3のON・OFFの情報としました。
③判定値によって処理を変更
②で計算した値を使って、処理分をします。Select Case分を使って、値によって(チェックしている箇所)によって出力するメッセージを変えています。
さいごに
いかがだったでしょうか。同じような疑問を持たれた方の参考になれば幸いです。それでは、また!