チェックボックスの切り替え

手書きの帳票をそのままExcelに置き換えた書式は、今でも世の中にたくさんある。中でも困るのが、チェックボックスだ。

選択肢が二つあって、その中から一つだけ選びたいとする。オプションボタンを使えば、自動的に一つしか選択できなくなるが、管轄が自部署でない書式の「見た目」を勝手に改造すると怒られる。

そこで、チェックボックスの片方をチェックすると、もう片方のチェックが外れる仕組みを考えてみた。
f:id:Infoment:20190409222049p:plain

例えば「りんご」と「みかん」の選択肢があって、現状ではどちらも選べている。
f:id:Infoment:20190409222153g:plain

それぞれの名前を見たとき、以下の関係になっているとする。

  • りんご ⇒ Check Box 5
  • みかん ⇒ Check Box 6

この類の書式は、フォームコントロールで作成されている場合が多い(気がする)。そこで、チェックボックスにマクロを登録してみる。
f:id:Infoment:20190409222429p:plain

登録内容は、以下のとおり。自分自身の状態を元に、相方の状態を決定している。

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

これで、片方しか選択できないチェックボックスができあがる。
f:id:Infoment:20190409223243g:plain

ちなみに、条件分岐を使いたくない方には、こんな方法もある。
例えば今回は、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

ちょっとだけ、短くなった。
その代わり、一読しただけでは理解不能なものになってしまった。
お勧めは、できません。

参考まで。