ラジオボタンを使ってマクロの処理を条件分岐することができます。

今回紹介するラジオボタンでは、1個しか選択できません。
複数選択をしたいなら、チェックボックスを使いましょう。
>>Excelマクロでチェックボックスを作る方法
ユーザーフォームでラジオボタンを作成する
ユーザーフォームの作成
まずはラジオボタンをユーザーフォームで作成します。
VisualBasic画面の”挿入”から”ユーザーフォーム”を選択しましょう。

すると以下のような画面が現れます。

ラジオボタンの描画
ツールボックスの中から“ラジオボタン”を選択し、ドラッグして描画します。

これで1つ目のラジオボタンができました。
続けて合計3つ作成しましょう。コピペすると簡単です。
さらに“コマンドボタン”を選択して描画しておきましょう。

書式設定
ラジオボタンとコマンドボタンの表記内容やフォントを変えることができます。
画面左下に書式を設定するリストがあるはずです。

“Caption”で表記文字を、”Font”でフォントを、”TextAlign”で文字寄せを変えられます。


これでユーザーフォームは作成完了です!!
メインプログラム(標準モジュール)を作成する
今回はプログラムを2つ作成する必要があります。
まずは、メインプログラム(標準モジュール)を作成しましょう。

Sub test()
UserForm1.Show
End Sub
“UserForm1″は先ほど作成したユーザーフォームのことです。
Showでこのフォームを表示させることができます。
実行して、フォームが表示されたら成功です!!
フォームを閉じるときは×ボタンを押してください。
ユーザーフォームのプログラムを作成する
プログラム入力画面を出す
ユーザーフォームのプログラムを作るために、”コマンドボタン”をダブルクリックしましょう。

すると以下のウィンドウが現れます。

“CommandButton1_Click”と書いてありますね。
つまり、ここに書いたプログラムがコマンドボタンをクリックしたときに起動します。
ラジオボタンのチェック有無を確認するプログラム
Private Sub CommandButton1_Click()
MsgBox OptionButton1.Value
Unload Me
End Sub
OptionButton1とは今回作成したラジオボタンの1つです。

OptionButton1.Valueは、チェックありならTrueで、なしならFalseになります。
“Unload Me”はユーザーフォームを閉じる処理です。
この状態でメインプログラム、つまり”UserForm1.Show”を実行してみましょう。

こんな感じで、ユーザーフォームが現れたらOKです。
“sampleA”の方をチェックして「実行!」を押します。

もし”sampleA”にチェックが入っていればTureを、入っていなければFalseを表示します。
ラジオボタンのキャプションを読み取る方法
Captionを使って項目名(キャプション)を読み取ることができます。
Private Sub CommandButton1_Click()
If OptionButton1.Value Then
MsgBox OptionButton1.Caption
End If
Unload Me
End Sub

if文で条件分岐をして、もし”sampleA”にチェックが入っていれば項目名を表示します。
これを実行し、”sampleA”にチェックを入れてボタンを押してみましょう。

このように項目名が表示されれば成功です。
チェックしたボタンのキャプションを読み取る
さっき書いたプログラムを全ボタンに対して繰り返します。
Private Sub CommandButton1_Click()
For i = 1 To 3
If Me.Controls("OptionButton" & i).Value Then
MsgBox Me.Controls("OptionButton" & i).Caption
End If
Next i
Unload Me
End Sub

Me.Controlsは、コントロールしたい対象の指定に使います。
例えばi = 1での「”OptionButton” & i」は、OptionButton1のことです。
項目名が取得できたら、メインプログラムでif文などに利用しましょう。
ラジオボタンを使ったプログラムの例
例えば下図のように、1行目に項目名、それ以降にデータが入っているとします。

ラジオボタンを使って、選択した項目の合計値を算出してみましょう。
Private Sub CommandButton1_Click()
For i = 1 To 3
If Me.Controls("OptionButton" & i).Value Then
sampleName = Me.Controls("OptionButton" & i).Caption
End If
Next i
col = Rows(1).Find(sampleName).Column
endRow = Cells(Rows.Count, col).End(xlUp).Row
Sum = 0
For i = 2 To endRow
Sum = Sum + Cells(i, col)
Next i
MsgBox Sum
Unload Me
End Sub

項目名の取得方法は先ほどと同じです。
変数sampleNameに入れるようにしました。
Findは、指定範囲の中から()に入れた文字を検索する関数です。
もし見つかればその列番号をColumnで取得して、変数colに入れます。
>>ExcelマクロのFind(FindNext)で文字を検索する方法
endRowはどこまでの行をfor文で処理するか決める変数です。
Rows.CountとEndを組み合わせると取得できます。
>>Excelマクロで最終行(列)を取得する方法
あとはfor文で2行目から足していくだけですね。

このように、ラジオボタンで項目名を受け取り、if文に入れて条件を変えることができます。
まとめ
今回はラジオボタンによる選択肢の実装方法を解説しました。
1個ずつではなく複数選択可能にしたいならチェックボックスを試してみてください。
コメント