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

Excelシート上にオプションボタンを複数設置し、
ON状態が変わったらVBA処理を走らせたい。
方法があれば教えてください。

Worksheet.Changeイベントではオプションボタンは監視できませんよね。

A 回答 (3件)

こんばんは



ご質問文の通りに「監視」するのであれば、
 ・OnTime等で一定時間ごとにチェックする
あるいは、ボタンの変化がクリックで起こるとしてよいのなら
 ・マウスクリックを取得して、チェック(監視)する
ような方法が考えられます。
https://excel-excel.com/tips/vba_151.html
とは言え、いずれにしろ無駄に実行される確率が高いので、効率も悪く、下手なコードを書けば負荷の増大につながりかねません。

補足に、
>ボタンごとにマクロを割り付けるのではなく、
とありますが、ボタンのクリックをひとつのマクロで処理することは可能ですし、この方法であれば、必要な時にしか動作しないので効率が悪くなることもありません。

以下は、そのような一例です。
フォームコントロールのオプションボタンの場合を例として。
(ActiveXの場合は、扱いが変わる可能性があります)

1)例えば、標準モジュールに以下のコードを用意しておきます。
 Sub optBtnCheck()
  Set c = ActiveSheet.Shapes(Application.Caller)
  MsgBox c.Name & "(" & c.AlternativeText & ") is ON"
 End Sub
2)シート上にフォームコントロールのオプションボタンを作成
3)2)のボタンに1)のマクロを登録
4)3)のボタンをコピペで好きなだけ増やします。

以上で、ボタンをクリックすれば(=ONになるのと同値)、そのボタン名がメッセージボックスに表示されます。
(実際の処理内容は、なさりたいことに応じて書き換える必要があります)

※ すでにボタンを多数作成済みであれば、「マクロを登録する」マクロを作成して実行すれば、後からの登録も可能です。
※ 上記のままだと、「ONになっているボタン」をクリックしても動作しますが、状態が変化したかどうかは、単純にこれだけをチェックすれば済むものと思います。
※ ボタンのグループが複数存在する場合であっても、チェックタイミングの取得は同様にできるものと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
勉強になりました。
ActiveXコントロールのオプションボタンだったので、
一括でマクロ登録出来なかったという事情もあり、
セル変化を検知できて、オプションボタンを検知できないのかという興味もありまして。
扱いやすいフォームコントロールのオプションボタンに置き換えて正攻法でいこうと思います。

お礼日時:2022/02/25 19:47

単純にこう言うことじゃなくて?



Private Sub OptionButton1_Click()
MsgBox "op1"
End Sub

Private Sub OptionButton2_Click()
MsgBox "op2"
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
ボタンごとにマクロを割り付けるのではなく、

Worksheet.Changeイベントが、シート上のセル書き換えを監視して、マクロ処理を走らせるように、

シート上よオプションボタンの変更を検知してマクロ処理を走らせる、
みたいな方法を探していました。

単純に全オプションボタンに同じマクロ割り当てれば実現はできますが、
「オプションボタンの変更」をきっかけにできるか、
という点での質問でした。

お礼日時:2022/02/25 16:45

エクセルに監視機能はありません

    • good
    • 0
この回答へのお礼

ありがとうございます。

Worksheet.Changeイベントのように変更を検知することを「監視」と表現したのですが、
的確な言葉を知らない不慣れな人とのやり取りを重ねた方でないと質問の主旨が伝わりにくかったかもしれませんね。

でも、また同じ様な質問をするときに「監視」という言葉を使ってしまいそうです。

お礼日時:2022/02/25 19:31

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

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