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

コマンドボタンONOFF

住所録や参加者リストなどをエクセルで管理することも多いと思いますが、顧客入力フォームをユーザーフォームを使ってオリジナルで作っていて、男女選択をオプションボタンを使うのが一般的です。

ただ、男性・女性と2つ並べて用意しなくてはいけないので、横幅を多く必要とします。

スペースの関係で1つで済むリストボックスを使ってみると、今度は縦にスペースが必要になるので、小さくすると文字も小さくなり見づらくなります。

でもあきらめないでください、コマンドボタンを押すと「男性」、もう一度押すと「女性」、さらにまた押すと「男性」。

このようにコマンドボタンを押すたびに男女が入れ替わり、同時に指定したセルにも同じように記載できる方法があります。

目次

オプションボタンさようなら!切り替えボタンを作る

オプションボタンの代わりにコマンドボタンで代用すると言っても、難しいVBAコードを使っているわけではなく、なじみのあるIf~Then~ElseIf~Then~End Ifを使うだけで、下記のように置き換えたらイメージしやすいでしょう。

コマンドボタンを押した時にセルB1が「男性」だったら、「女性」に書き換えて同時に背景色を赤色に、文字色は黒色に、コマンドボタンの表示名(キャプション)も女性に変更する。

そうではなく、もし「女性」だったら、「男性」に書き換えて同時に背景色を青色に、文字色は白色に、コマンドボタンの表示名も男性に変更する。

これをVBAコードでコマンドボタンに記述すれば、クリックするたびに「男性」➡「女性」➡「男性」と切り替わるので、ユーザーフォームのスペースの節約・見た目のシンプルさも可能になります。

コマンドボタンONOFFタイトルなし

実際にCommandButton1に記述したVBAコードは下記のようになります。

男女切り替えボタン 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. コマンドボタン1がクリックされたら
  2. もしSheet1のセルB1の値が男性だったら
  3. Sheet1のセルB1の値を女性に書き換える
  4. ユーザーフォーム1のコマンドボタン1の下記処理をする
  5. 表示名(キャプション)を女性に書き換える
  6. 背景色を赤色にする
  7. 文字色を黒色にする
  8. Withステートメント終了
  9. そうではなくもしSheet1のセルB1の値が女性だったら
  10. Sheet1のセルB1の値を男性に書き換える
  11. ユーザーフォーム1のコマンドボタン1の下記処理をする
  12. 表示名(キャプション)を男性に書き換える
  13. 背景色を青色にする
  14. 文字色を白色にする
  15. Withステートメント終了
  16. Ifステートメント終了
  17. マクロ記録終了

ちなみに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種類に増やす事も可能です。

3つ以上に増やす場合の実例

2択ではなく3択にしたい場合、ElseIf文をもう1つ増やすだけで対応できます。

例えば、コマンドボタンの表示名を「名前」→「出席」→「欠席」→「名前」と順番に巡回させたい場合、次のように書きます。

VBAコード

Private Sub CommandButton1_Click()
If CommandButton1.Caption = Range(“A1”).Value Then
CommandButton1.Caption = “出席”
ElseIf CommandButton1.Caption = “出席” Then
CommandButton1.Caption = “欠席”
ElseIf CommandButton1.Caption = “欠席” Then
CommandButton1.Caption = Range(“A1”).Value
End If
End Sub

セルA1にメンバーの名前を入れておけば、コマンドボタンのCaptionを最初に手動設定する必要もなく、メンバー表が変わっても自動で連動します。選択肢をさらに増やしたい場合も、同じ考え方でElseIf文を追加していくだけです。

目次