はじめに
Excelのシート上で、ユーザーに複数の選択肢から一つだけを選ばせる場合、「フォームコントロール」の「オプションボタン」が役立ちます。アンケートや設定シートなどで、排他的な選択を促すのに最適です。
VBAを使えば、シート上に配置された複数のオプションボタンの中から、ユーザーがどれを選択したのかを簡単に特定できます。この記事では、シート上の全てのオプションボタンをチェックし、選択されている項目のキャプション(表示テキスト)を取得するための、基本的で確実な方法を解説します。
選択されたオプションボタンを判定するVBAサンプルコード
このマクロは、シート上に配置された全てのオプションボタンをループで確認し、選択状態にあるボタンの名前(キャプション)をメッセージボックスに表示します。
完成コード
' シート上のオプションボタンで選択されている項目を取得する
Sub GetSelectedOptionButton()
'== 変数を定義します ==
Dim optButton As OptionButton
Dim selectedChoiceCaption As String
' デフォルト値を「未選択」に設定
selectedChoiceCaption = "未選択です"
'== OptionButtonsコレクションで、シート上の全てのオプションボタンをループ ==
For Each optButton In ActiveSheet.OptionButtons
' .Valueプロパティがオン(xlOn)かどうかを判定
If optButton.Value = xlOn Then
' オンになっているボタンのキャプションを取得
selectedChoiceCaption = optButton.Caption
' 選択項目が見つかったのでループを抜ける
Exit For
End If
Next optButton
'== 結果をメッセージボックスに表示 ==
MsgBox "選択された項目: " & selectedChoiceCaption, vbInformation, "選択結果"
End Sub
コードの解説
For Each optButton In ActiveSheet.OptionButtons
この一行が、シート上の全てのオプションボタンをチェックするための基本構造です。
ActiveSheet.OptionButtons
: 現在アクティブなシートに配置されている、全てのオプションボタンが含まれるコレクションです。For Each
ループで、このコレクションからオプションボタンオブジェクトを一つずつoptButton
変数に取り出して処理しています。
If optButton.Value = xlOn Then
オプションボタンの状態は .Value
プロパティで判定します。
xlOn
(値は1
): ボタンが選択されている(オン)状態を示します。xlOff
(値は-4146
): ボタンが選択されていない(オフ)状態を示します。
この If
文で、オンになっているボタンを見つけています。
selectedChoiceCaption = optButton.Caption
オンになっているボタンが見つかったら、そのボタンの .Caption
プロパティ(ボタンの横に表示されているテキスト)を取得し、変数に格納しています。
Exit For
オプションボタンは、同じグループ内では一つしか選択できません。そのため、選択されているボタンが一つ見つかった時点で、それ以上ループを続ける必要はありません。Exit For
でループを抜けることで、処理を効率化しています。
まとめ
今回は、VBAを使ってシート上のオプションボタンの選択状態を判定する方法を解説しました。
- シート上のオプションボタンは
ActiveSheet.OptionButtons
コレクションでまとめて扱える。 - ボタンの状態は
.Value
プロパティ(xlOn
/xlOff
)で判定する。 - ボタンの表示テキストは
.Caption
プロパティで取得できる。
この方法を使えば、ユーザーの選択に基づいて計算を行ったり、表示する内容を切り替えたりと、シートをよりインタラクティブに活用することができます。