プロが教えるわが家の防犯対策術!

オプションボタンのマクロに関して教えて下さい。
マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。

「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタン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」に変えてみたのですが、やっぱり駄目でした。

ネットではユーザフォームを使ったマクロ例はあるのですが、そのまま使用するオプションボタンの例がありません。できればユーザフォームは使いたくありません。
ご存知の方がいらっしゃいましたら、教えて下さい。よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
No.2さんにも言われてますが、フォーム以外の存在は知りませんでした。
文法の意味はまだ理解できていませんが、この方法で希望の処理ができました。
もっと勉強してコンソールツールのスキルを身につけたいと思います。

お礼日時:2006/09/11 20:19

こんにちは。

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] をクリックし、登録します。
  この作業を全てのオプションボタンに対し行います。

この方法はイベントプロシージャなどをズラズラ書かずに済みますので、
手を抜きたいときは私は結構使ってマス(´・ω・`)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
文法の意味はまだ理解できていませんが、この方法で希望の処理ができました。
やっぱりマクロの記録の多様じゃなくて、ちゃんと一から勉強した方が良いのでしょうね・・・。

お礼日時:2006/09/11 20:22

表示-ツールバー-フォームのオプションボタンと


表示-ツールバー-コントロールツールボックスのオプションボタン
があり混乱されているようです。

Private Sub OptionButton1_Click()
はコントロールツールボックスのオプションボタンを使用する際につかう記述でしょう。

ツールバー-フォームのオプションボタンであれば、使用したいマクロを標準モジュールに作成して、「マクロの登録」で指定します。

なお、ツールバー-フォームのオプションボタンであればマクロを使わなくても、右クリックして「コントロールの書式設定」を開き、コントロールタブのリンクするセルを A1 に指定すれば希望に近いものになると思いますが、、、
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
フォーム以外の存在をはじめて知りました。
もうちょっと勉強してみます。

お礼日時:2006/09/11 20:15

オブジェクトの名前が誤っている。



Private Sub OptionButton1_Click()
  OptionButton1 = True
End Sub
Private Sub OptionButton2_Click()
  OptionButton2 = True
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
オブジェクトとは何でしょう?
すみません、文法等は全く分かってないです。
もうちょっと勉強してみます。

お礼日時:2006/09/11 20:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています