- ベストアンサー
エクセルVBAマクロのオプションボタンについて
オプションボタンのマクロに関して教えて下さい。 マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。 「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタンAが押されている場合とBが押されている場合で、処理を変えたいのですが、そのオプションボタンの値をどうやっても拾えません。 色々検索した結果、以下のマクロでできる気がしたのですが、駄目でした。 Private Sub OptionButton1_Click() オプション1 = True End Sub Private Sub OptionButton2_Click() オプション2 = True End Sub Sub オプションボタン() If オプション1 = True Then Range("a1") = 1 ElseIf オプション2 = True Then Range("a1") = 2 Else Range("a1") = 0 End If End Sub 作ったオプションボタンを右クリックしてマクロ登録を選ぶと、「オプション1_Click」となっているので、「OptionButton1_Click」を「オプション1_Click」に変えてみたのですが、やっぱり駄目でした。 ネットではユーザフォームを使ったマクロ例はあるのですが、そのまま使用するオプションボタンの例がありません。できればユーザフォームは使いたくありません。 ご存知の方がいらっしゃいましたら、教えて下さい。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 出来れば、そろそろコントロールツール側のコントロールをお使いになってください。 今から、フォーム(ダイアログシートを含む)を勉強しようとしても、資料も手に入らないでしょうし、今は、隠しオブジェクトになってしまいましたので、インテリセンスが利きません。フォームのコントロールは、コントロール配列の真似事が出来ますので便利ですが、少し、その分、深く勉強しないと難しいのです。(Ver.5のマニュアルには詳しく出ています) それと、オプション1_Click 等は、右クリックで自動記録で出来ますので、それは手をつけませんが、一応、「Sub オプションボタン()」の2バイト文字の名称は、ユーザーが作成するプロシージャなので、なるべくアルファベットでつけてください。 なお、コントロールの名称は間違ってませんが、マクロで操作するには、私には、どうも曖昧さが残るような気がします。 それと、フォームのオプションボタンの戻り値は、1 と0で、True / False ではありません。今回は、組み込み定数を使いました。(xlOn) この説明は、少し難しいかもしれませんね。 '標準モジュール Sub OptionButtonsMcr() 'シート名は必ず入れます。 With Worksheets("Sheet1") If .OptionButtons("Option Button 1").Value = xlOn Then .Range("a1").Value = 1 ElseIf .OptionButtons("Option Button 2").Value = xlOn Then .Range("a1").Value = 2 Else .Range("a1").Value = 0 End If End With End Sub Sub オプション1_Click() Call OptionButtonsMcr End Sub Sub オプション2_Click() Call OptionButtonsMcr End Sub なお、Index を使った、もっと簡単な方法もありますが、逆に、その考え方は自体は難しくなります。すべて以下のマクロに登録すればよいです。Sub オプション1_Click() 等の個別のマクロは必要ありません。 '補足(Index を使った方法) '--------------------------- Sub OptionbuttonsMcr() Dim i As Integer With Worksheets("Sheet1") i = .OptionButtons(Application.Caller).Index If i < 3 Then .Range("a1").Value = i Else .Range("a1").Value = 0 End If End With End Sub
その他の回答 (3)
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 [表示]-[ツールバー]-[フォーム]での一例です。あくまでサンプルなので、 新規シートで下記の手順どおり、取り合えずお試し下さい。 1. Sheet1 で[表示]-[ツールバー]-[フォーム]のオプションボタンを3つ 書き込みます。 2. VBE で標準モジュールに下記コードを貼り付けます。 Sub ShapeOptionButton() Dim vntVal As Variant ' 次行のシート名は必要があれば書換え With ThisWorkbook.Worksheets("Sheet1") vntVal = 0 ' <-- その他のとき Select Case Application.Caller ' オプションボタン名と対応させる値を列挙します ' オプションボタン名は数式バーの横に表示されてます Case "オプション 1": vntVal = 1 Case "オプション 2": vntVal = 2 Case "オプション 3": vntVal = 3 End Select .Range("A1").Value = vntVal End With End Sub 3. 再び Sheet1 に戻り、オプションボタンをひとつ選択。右クリック メニュー[マクロの登録]で[ShapeOptionButton]を”選んで”(ココ重要) [OK] をクリックし、登録します。 この作業を全てのオプションボタンに対し行います。 この方法はイベントプロシージャなどをズラズラ書かずに済みますので、 手を抜きたいときは私は結構使ってマス(´・ω・`)
お礼
ご回答ありがとうございます。 文法の意味はまだ理解できていませんが、この方法で希望の処理ができました。 やっぱりマクロの記録の多様じゃなくて、ちゃんと一から勉強した方が良いのでしょうね・・・。
- papayuka
- ベストアンサー率45% (1388/3066)
表示-ツールバー-フォームのオプションボタンと 表示-ツールバー-コントロールツールボックスのオプションボタン があり混乱されているようです。 Private Sub OptionButton1_Click() はコントロールツールボックスのオプションボタンを使用する際につかう記述でしょう。 ツールバー-フォームのオプションボタンであれば、使用したいマクロを標準モジュールに作成して、「マクロの登録」で指定します。 なお、ツールバー-フォームのオプションボタンであればマクロを使わなくても、右クリックして「コントロールの書式設定」を開き、コントロールタブのリンクするセルを A1 に指定すれば希望に近いものになると思いますが、、、
お礼
ご回答ありがとうございます。 フォーム以外の存在をはじめて知りました。 もうちょっと勉強してみます。
- bin-chan
- ベストアンサー率33% (1403/4213)
オブジェクトの名前が誤っている。 Private Sub OptionButton1_Click() OptionButton1 = True End Sub Private Sub OptionButton2_Click() OptionButton2 = True End Sub
お礼
ご回答ありがとうございます。 オブジェクトとは何でしょう? すみません、文法等は全く分かってないです。 もうちょっと勉強してみます。
お礼
ご回答ありがとうございます。 No.2さんにも言われてますが、フォーム以外の存在は知りませんでした。 文法の意味はまだ理解できていませんが、この方法で希望の処理ができました。 もっと勉強してコンソールツールのスキルを身につけたいと思います。