複数のチェックボックスで、一つだけチェックを入れたい ①
以前、下記内容でブログを書いた。
infoment.hatenablog.com
しかし実際に使う機会は、ほとんど来なかった。
まずチェックボックスには、以下の二通りがある。
私がもっぱら使うのは、ActiveXコントロール。
だから、使う機会はほとんど無かった。
すると先日、こんなシートが私の下にやってきた。
同時に二つ以上、選べないようにして欲しいとのこと。
※オプションボタンを使えば良いのでは?という意見は
承知してますとのコメント付きで。
それでは試しに左側の4つに対し、一つだけチェック可能とする制御を
盛り込んでみよう。
前回取り組んだ、シーソーのように「あちらが出れば、こちらが引っ込む」の
ような仕掛けは使えない。
Sub チェック10_Click() If ActiveSheet.CheckBoxes("Check Box 10").Value = xlOn Then ActiveSheet.CheckBoxes("Check Box 11").Value = xlOff ActiveSheet.CheckBoxes("Check Box 12").Value = xlOff ActiveSheet.CheckBoxes("Check Box 13").Value = xlOff End If End Sub Sub チェック11_Click() If ActiveSheet.CheckBoxes("Check Box 11").Value = xlOn Then ActiveSheet.CheckBoxes("Check Box 10").Value = xlOff ActiveSheet.CheckBoxes("Check Box 12").Value = xlOff ActiveSheet.CheckBoxes("Check Box 13").Value = xlOff End If End Sub Sub チェック12_Click() If ActiveSheet.CheckBoxes("Check Box 12").Value = xlOn Then ActiveSheet.CheckBoxes("Check Box 10").Value = xlOff ActiveSheet.CheckBoxes("Check Box 11").Value = xlOff ActiveSheet.CheckBoxes("Check Box 13").Value = xlOff End If End Sub Sub チェック13_Click() If ActiveSheet.CheckBoxes("Check Box 13").Value = xlOn Then ActiveSheet.CheckBoxes("Check Box 10").Value = xlOff ActiveSheet.CheckBoxes("Check Box 11").Value = xlOff ActiveSheet.CheckBoxes("Check Box 12").Value = xlOff End If End Sub
出来た。後はこれを、全12個に拡張するだけだ・・・いやいや待て待て、そんなこと、やってられるか!
ということでしばらく試行錯誤して、以下の方法を試すことにした。
まず、登録がこちら。
Sub 登録() Dim CB As CheckBox For Each CB In ActiveSheet.CheckBoxes CB.OnAction = "切り替え" Next End Sub
これで各チェックボックスはクリックされた時、「切り替え」サブルーチンを実行する。次いで、「切り替え」サブルーチンを作成。
Sub 切り替え() Dim CB As CheckBox For Each CB In ActiveSheet.CheckBoxes If CB.Caption <> Application.Caller Then CB.Value = xlOff End If Next End Sub
切り替えサブルーチンを呼び出したチェックボックスで無ければ、チェックを外す仕掛けだ。
チェックボックスが100個あっても、同じ仕掛で一個だけ選べるようになった。
ただしこのままでは、グループが複数ある場合に対応できていない。
さて、どのように解決しようか。
明日に続きます。
参考まで。