チェックボックスの切り替え
手書きの帳票をそのままExcelに置き換えた書式は、今でも世の中にたくさんある。中でも困るのが、チェックボックスだ。
選択肢が二つあって、その中から一つだけ選びたいとする。オプションボタンを使えば、自動的に一つしか選択できなくなるが、管轄が自部署でない書式の「見た目」を勝手に改造すると怒られる。
そこで、チェックボックスの片方をチェックすると、もう片方のチェックが外れる仕組みを考えてみた。
例えば「りんご」と「みかん」の選択肢があって、現状ではどちらも選べている。
それぞれの名前を見たとき、以下の関係になっているとする。
- りんご ⇒ Check Box 5
- みかん ⇒ Check Box 6
この類の書式は、フォームコントロールで作成されている場合が多い(気がする)。そこで、チェックボックスにマクロを登録してみる。
登録内容は、以下のとおり。自分自身の状態を元に、相方の状態を決定している。
Sub チェック5_Click() Select Case ActiveSheet.CheckBoxes("Check Box 5").Value Case xlOn ActiveSheet.CheckBoxes("Check Box 6").Value = xlOff Case xlOff ActiveSheet.CheckBoxes("Check Box 6").Value = xlOff End Select End Sub
もう一方にも同様のマクロを登録する。
Sub チェック6_Click() Select Case ActiveSheet.CheckBoxes("Check Box 6").Value Case xlOn ActiveSheet.CheckBoxes("Check Box 5").Value = xlOff Case xlOff ActiveSheet.CheckBoxes("Check Box 5").Value = xlOff End Select End Sub
これで、片方しか選択できないチェックボックスができあがる。
ちなみに、条件分岐を使いたくない方には、こんな方法もある。
例えば今回は、ONとOFFを数字で表すと、以下の関係にある。
xlon | 1 |
xloff | -4146 |
従って、後は一次関数の要領で、こんなコードにしてみる。
Sub チェック5_Click() ActiveSheet.CheckBoxes("Check Box 6").Value = _ -4145 - ActiveSheet.CheckBoxes("Check Box 5").Value End Sub Sub チェック6_Click() ActiveSheet.CheckBoxes("Check Box 5").Value = _ -4145 - ActiveSheet.CheckBoxes("Check Box 6").Value End Sub
ちょっとだけ、短くなった。
その代わり、一読しただけでは理解不能なものになってしまった。
お勧めは、できません。
参考まで。