
オプションボタンの代わりにボタンを押すたびにセルの値と表示を切り替える

住所録や参加者リストなどをエクセルで管理することも多いと思いますが、顧客入力フォームをユーザーフォームを使ってオリジナルで作っていて、男女選択をオプションボタンを使うのが一般的です。
ただ、男性・女性と2つ並べて用意しなくてはいけないので、横幅を多く必要とします。
スペースの関係で1つで済むリストボックスを使ってみると、今度は縦にスペースが必要になるので、小さくすると文字も小さくなり見づらくなります。
でもあきらめないでください、コマンドボタンを押すと「男性」、もう一度押すと「女性」、さらにまた押すと「男性」。
このようにコマンドボタンを押すたびに男女が入れ替わり、同時に指定したセルにも同じように記載できる方法があります。
オプションボタンさようなら!切り替えボタンを作る
オプションボタンの代わりにコマンドボタンで代用すると言っても、難しいVBAコードを使っているわけではなく、なじみのあるIf~Then~ElseIf~Then~End Ifを使うだけで、下記のように置き換えたらイメージしやすいでしょう。
コマンドボタンを押した時にセルB1が「男性」だったら、「女性」に書き換えて同時に背景色を赤色に、文字色は黒色に、コマンドボタンの表示名(キャプション)も女性に変更する。
そうではなく、もし「女性」だったら、「男性」に書き換えて同時に背景色を青色に、文字色は白色に、コマンドボタンの表示名も男性に変更する。
これをVBAコードでコマンドボタンに記述すれば、クリックするたびに「男性」➡「女性」➡「男性」と切り替わるので、ユーザーフォームのスペースの節約・見た目のシンプルさも可能になります。

実際にCommandButton1に記述したVBAコードは下記のようになります。
Private Sub CommandButton1_Click()
If Sheets(“Sheet1”).Range(“B1”).Value = “男性” Then
Sheets(“Sheet1”).Range(“B1”).Value = “女性”
With UserForm1.CommandButton1
.Caption = “女性”
.BackColor = RGB(255, 0, 0)
.ForeColor = RGB(0, 0, 0)
End With
ElseIf Sheets(“Sheet1”).Range(“B1”).Value = “女性” Then
Sheets(“Sheet1”).Range(“B1”).Value = “男性”
With UserForm1.CommandButton1
.Caption = “男性”
.BackColor = RGB(0, 0, 255)
.ForeColor = RGB(255, 255, 255)
End With
End If
End Sub
- コマンドボタン1がクリックされたら
- もしSheet1のセルB1の値が男性だったら
- Sheet1のセルB1の値を女性に書き換える
- ユーザーフォーム1のコマンドボタン1の下記処理をする
- 表示名(キャプション)を女性に書き換える
- 背景色を赤色にする
- 文字色を黒色にする
- Withステートメント終了
- そうではなくもしSheet1のセルB1の値が女性だったら
- Sheet1のセルB1の値を男性に書き換える
- ユーザーフォーム1のコマンドボタン1の下記処理をする
- 表示名(キャプション)を男性に書き換える
- 背景色を青色にする
- 文字色を白色にする
- Withステートメント終了
- Ifステートメント終了
- マクロ記録終了
ちなみにWithステートメントを使わずにUserForm1.CommandButton1.Caption = “女性”、UserForm1.CommandButton1.BackColor = RGB(255, 0, 0)、UserForm1.CommandButton1.ForeColor = RGB(0, 0, 0)と、3行並べてVBAコードを書いても同じプログラムが作動しますが、Withステートメントを使った方が見た目がスッキリするだけです。
ここで使用したVBAコードをちょっとだけアレンジすると、ユーザーフォームを表示した瞬間に自動的に性別を判定して文字や色を表示することも可能になります。

今回使った色は青色・赤色・黒色・白色ですが、エクセルで利用できる色は決まっているので、下記より色見本を見ながら好きな56色から選んでVBAコードに書けばすぐ利用できます。

またコマンドボタンの代わりにLabelでも同じようにできるし、男女2種類ではなく3種類に増やす事も可能です。
とても簡単なので、ぜひ利用してみてはいかがですか?