オプションボタンのマクロに関して教えて下さい。
マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。
「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタン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」に変えてみたのですが、やっぱり駄目でした。
ネットではユーザフォームを使ったマクロ例はあるのですが、そのまま使用するオプションボタンの例がありません。できればユーザフォームは使いたくありません。
ご存知の方がいらっしゃいましたら、教えて下さい。よろしくお願いします。
No.3ベストアンサー
- 回答日時:
こんばんは。
出来れば、そろそろコントロールツール側のコントロールをお使いになってください。
今から、フォーム(ダイアログシートを含む)を勉強しようとしても、資料も手に入らないでしょうし、今は、隠しオブジェクトになってしまいましたので、インテリセンスが利きません。フォームのコントロールは、コントロール配列の真似事が出来ますので便利ですが、少し、その分、深く勉強しないと難しいのです。(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
ご回答ありがとうございます。
No.2さんにも言われてますが、フォーム以外の存在は知りませんでした。
文法の意味はまだ理解できていませんが、この方法で希望の処理ができました。
もっと勉強してコンソールツールのスキルを身につけたいと思います。
No.4
- 回答日時:
こんにちは。
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] をクリックし、登録します。
この作業を全てのオプションボタンに対し行います。
この方法はイベントプロシージャなどをズラズラ書かずに済みますので、
手を抜きたいときは私は結構使ってマス(´・ω・`)
ご回答ありがとうございます。
文法の意味はまだ理解できていませんが、この方法で希望の処理ができました。
やっぱりマクロの記録の多様じゃなくて、ちゃんと一から勉強した方が良いのでしょうね・・・。
No.2
- 回答日時:
表示-ツールバー-フォームのオプションボタンと
表示-ツールバー-コントロールツールボックスのオプションボタン
があり混乱されているようです。
Private Sub OptionButton1_Click()
はコントロールツールボックスのオプションボタンを使用する際につかう記述でしょう。
ツールバー-フォームのオプションボタンであれば、使用したいマクロを標準モジュールに作成して、「マクロの登録」で指定します。
なお、ツールバー-フォームのオプションボタンであればマクロを使わなくても、右クリックして「コントロールの書式設定」を開き、コントロールタブのリンクするセルを A1 に指定すれば希望に近いものになると思いますが、、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) [貼り付けオプション]とは? 3 2022/04/17 08:15
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Excel(エクセル) 【マクロ】リボン、行列、数式・ステータスバを非表示に 4 2022/12/12 07:32
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
エクセルVBAでOptionButtonのオンオフ取得
Excel(エクセル)
-
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
マクロの「SaveAs」でエラーが出るのを解消したいです(再)
Visual Basic(VBA)
-
5
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
6
別のユーザーフォームのコマンドボタンを押す
Visual Basic(VBA)
-
7
オプションボタンを別シートに連動
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
行数が不規則な一週間ごとの合...
-
文字列になっている時間をVBAで...
-
ある列、或いは、ある行のセル...
-
マクロの有効化するダイヤログ...
-
【マクロ】フォルダからエクセ...
-
Excelでの時間帯の入力
-
excel で二つのどちらかを選ぶ
-
エクセルの順位別一覧表の自動...
-
Excel 2019 のピボットテーブル...
-
エクセル 価格表から単価を呼び...
-
excelの不要な行の削除ができな...
-
エクセルで特定の範囲内から小...
-
シートAで横に並んだ項目→シー...
-
Excelが固まってしまった。
-
Excel2013のF6キー操作について
-
【関数】スペースがいくつ入っ...
-
Excelはなんで先頭の0を消すん...
-
【Microsoft Office Excel Comp...
-
西暦や和暦の表示をyyyymmdd表...
-
別シートからの文字を変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでオプションが開けない
-
Google Mapで、都市高速は使わ...
-
Access2007で複数のチェックボ...
-
「Excelのオプション」の「ユー...
-
[Google カレンダー] 定期的な...
-
エクセルVBAマクロのオプシ...
-
画像やオートシェイプの単位が...
-
エクセルVBA/フォームのオプシ...
-
[貼り付けオプション]とは?
-
日経225オプションの過去データ...
-
リブレオフィスの予測表示の停...
-
Word2010 文書外の背景色について
-
オプション取引がゼロサムゲー...
-
オプション コール
-
MSアウトルックのアラーム音を...
-
シャットダウンができない!!
-
CSSで、テキストボックスの文字...
-
AcsessでオプショングループをN...
-
SBI証券のオプション取引の約定...
-
新規契約時のオプションについて…
おすすめ情報