プチIT化 PR

【VBA】複数のチェックボックスの条件を判定して処理を変えるマクロサンプル

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんにちは、今回は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の状態を知ることができるので、値を受け取けとります。

Worksheets("シート名").CheckBoxes("チェック ボックス名").Value

上記のように、シート名とシートボックス名を指定することで、値を取得します。それを、変数に一旦格納しておきます。

②取得した値の処理

取得したチェックボックスの値を処理します。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分を使って、値によって(チェックしている箇所)によって出力するメッセージを変えています。

説明ベタな人
説明ベタな人
上手く伝わっているか分かりませんが、イメージ少しだけでも伝われば幸いです。

さいごに

いかがだったでしょうか。同じような疑問を持たれた方の参考になれば幸いです。それでは、また!