【VBA】Excelマクロでラジオボタン(オプションボタン)を作る方法

VBA
スポンサーリンク

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

ラジオボタンのコード実行後の図

今回紹介するラジオボタンでは、1個しか選択できません。

複数選択ができるチェックボックスはこちらの記事で解説しています。

ユーザーフォームでラジオボタンを作成する

ユーザーフォームの作成

まずはラジオボタンをユーザーフォームで作成します。

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”にチェックを入れてボタンを押してみましょう。

Aがクリックされたことを確認する図

このように項目名が表示されれば成功です。

チェックしたボタンのキャプションを読み取る

さっき書いたプログラムを全ボタンに対して繰り返します。

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は、指定範囲の中から()に入れた文字を検索する関数です。

詳しくはExcelマクロのFind(FindNext)で文字を検索する方法をご覧ください。

もし見つかればその列番号をColumnで取得して、変数colに入れます。

endRowはどこまでの行をfor文で処理するか決める変数です。
Rows.CountとEndを組み合わせると取得できます。

詳しくはExcelマクロで最終行(列)を取得する方法をご覧ください。

後はfor文で2行目から足していくだけですね。

ラジオボタンのコード実行後の図

このように、ラジオボタンで項目名を受け取り、if文に入れて条件を変えることができます。

まとめ:ラジオボタンで選択肢を実装しよう

今回はラジオボタンによる選択肢の実装方法を解説しました。

1個ずつではなく複数選択可能にしたいならチェックボックスを試してみてください。

VBAの次に新しい言語に挑戦したいな。。。

と考えている方にはPythonがおすすめです。勉強方法についても解説しています。

コメント

タイトルとURLをコピーしました