
ExcelのVBAに関する質問です。
さきほど「セルをクリック、またはダブルクリックしたときに○○したい」という質問に回答したのですが、「セルをクリックした」というイベントを拾う方法がわからず、ダブルクリックのパターンで回答しました。
Worksheetのイベントには BeforeDobuleClick や BeforeRightClick はあるのに Click や onClick というイベントがありません。オートシェイプなどのオブジェクトやフォーム上のオブジェクトには Click イベントがあるのですが、Worksheet になぜかありません。
これまでも同様のケースがあり、ネットで検索したりしたのですが、どれも SelectionChange で代用するものでした。それだと確かにマウスで別セルを選択したときにイベントが発生しますが、
・キーボード操作でセルを移動してもイベントが発生する
・現在選択しているセルをクリックしてもイベントが発生しない
と、厳密はマウスでクリックしたときと同じ動作になりません。
確か以前の質問で「あるセルをクリックするたびに、他のセルの値をカウントアップしたい」というようなものもありました。このような場合には、やはり Click に相当するようなイベントで処理したいです。
どうにかしてWorksheetでクリックイベントを拾うことはできないのでしょうか?
No.5ベストアンサー
- 回答日時:
ham_kamo様、こんにちは。
Wendy02です。いろいろ過去の資料をひっくり返して、もう一度検討してみましたが、やっぱりうまくいきませんね。ある程度の目算はあったのですが……。(内容は言いません、だめでしたから(^^;)
>「ヘルプのサンプルなのになぜ?」
あのヘルプの内容は、VB6側にも収録されていますから、やっぱり手を抜いているのでしょうね。まあ、あの文章では、あってもなくても同じですけれどね。あれじゃあ、さっぱり理解できません。
ここでのクラスは、あくまでも、与えられている種類のイベント(WithEvents)の範囲内であって、私も、Worksheetのオブジェクト自体の基底クラスに継承することなら不可能だと思います。
なお、もう特に知る必要性はないと思いますが、MS-Office のRaiseEvent についての詳しい説明は、MSDNにありますから、そのURLを置いておきます。Office2000の『プログラマーズガイド』の第9章の「カスタムクラスとオブジェクト」の「カスタムクラスにイベントを追加する」という項目に載っています。できないのに、「能書き」を書いてもしょうがありませんので、とりあえず、お返事まで。
参考URL:http://msdn.microsoft.com/library/ja/default.asp …
わざわわざ調べていただき、ありがとうございました。
Wendy02様が調べても無理なのであれば、やはり無理なんでしょうね。
> ここでのクラスは、あくまでも、与えられている種類の
> イベント(WithEvents)の範囲内であって、私も、Worksheetの
> オブジェクト自体の基底クラスに継承することなら不可能だと思います。
やはりそうなんですよね。仕組みとしてユーザに与えられていない部分には手を出しようがないのですね。
参考URLもありがとうございます。これを読んで自分でもいろいろ試してみようと思います。
No.4
- 回答日時:
Kasouken様、
割り込み失礼します。
>Helpにあったと思います。
まず、ExcelのRaiseEvent のHelpにあるサンプルコードは、Excelのものではないようですね。動作は、VBでは確認できましたが、コードをVBA用に手直ししてみましたが、全面的に変えないとExcelではできないようですね。私自身は、RaiseEvent 自体は理解しているつもりです。
単純に、Class モジュールをオブジェクトとして、イベントを設け、その中に、RaiseEvent で、呼び出しコードを書けば済む内容だとも思えないのです。
ヘルプの中の、
#イベントが宣言されると、RaiseEvent ステートメントを使って、イベントを発行できます。
とは書かれていますが、それに該当するロジックが必要だと思うのです。
それを、どのようにして、セルのクリックに対するイベントを応用させるのでしょうか?私にはわかりません。私が、#2で書いたように、(左)クリックイベントは、Application側で、Selection として働くわけですね。
RaiseEvent というのは、イベントの中において、監視機能を働かせ、登録したイベントを発行させるというような機能だと思います。もちろん、イベントの代わりに、タイマーを動かして、ワークシートを監視状態にすることも可能だと思います。
しかし、その元のイベントを新たに作り、仮にタイマーで監視させるにしても、ワークシートのクリックに対するものは、私は思いつかないのです。いわゆる、MouseDown(またはMouseUp)の機能をワークシート上でイベントを発行させられるかどうかだと同じに考えています。私には、できそうにもありません。
時々、出てくる質問ですが、今まで、この問題の解答を見たことがありません。私は、最近はVBAに対して、あまり勉強はしておりませんが、これは、興味のある話です。
よろしかったら、質問者さんとともに教えてくださいませんか?
この回答への補足
> まず、ExcelのRaiseEvent のHelpにあるサンプルコードは、Excelのものではないようですね。
やはりそうでしたか。そのままコピーして実行したらエラーが出たので、「ヘルプのサンプルなのになぜ?」とか思いつつ何ヶ所か修正して動くことは確認できました。(MSがヘルプに手を抜いてるのでしょうか?)
今の段階では、自分が実装したクラスやフォームでRaiseEventを用いてEventを発生させることができる、というところまでは理解したのですが、既存のWorksheetなどのクラスにイベントを定義する、ということができるのかわかりません。
Worksheetを継承したクラスを作成して、その中でClickイベントを作成できるのでは、とも思ったのですが、どうやらVBAではクラスの継承はできないのですね。そもそもクリックイベントを発生させようとすると、マウスの動きを監視して、SelectionChangeイベントを横取りするようなことになると思うのですが、それはやはりできないのでしょうか…。

No.3
- 回答日時:
#1です
下記を調べて見ては如何でしょう。
Helpにあったと思います。
Event
RaiseEvent
No.2
- 回答日時:
ham_kamoさん、こんにちは。
Wendy02です。前の回答(#2878604)のログは読ませていただきました。
私個人の作るものは、DoubleClick イベントのほうが多いですね。SelectionChangeイベントは、実際にきちんとしたものを作った時に、誤動作しかねませんので、ユーザーが意識的に行う動作-右クリックメニューや、ダブルクリックに対して、イベントを与えるという方式にします。
SelectionChange というのは、厳密には、セル間の移動に対して働くもので、直接、クリックに対してイベントが働くものではないのはご指摘のとおりです。
(左)クリックに対して、Select が最初に働くように出来ているわけですが、(左)ダブルクリックでは、いわゆる「命令待機モード」になってしまっています。それらは、アプリケーションの組み込みイベントで、それは、ユーザー側に提供されていません。
それを、(左)クリックでイベントを働かせるようにするには、もっとも感覚的に近いのは、コントロールツールの透明ラベルやオートシェイプの四角形で透明にした図形を設けることだと思います。ただ、コマンドボタンと同じことですから、それが実現できたとはいいません。透明ラベルがあるセルでは、書き込み等は出来なくなります。
ある一定の条件で、その透明ラベルが有効(.Visible =True)にするようなイベントを設けておけば、邪魔になることはありません。(透明ラベルですから、.Visibleは関係ないような気もしますが、.Visible=False になると、存在していないのと同じことになってしまうからです。)「ある一定の条件」で、On/Off にするのを、イベントで設けるわけです。
なお、私は、ワークシートのClassオブジェクトに、クリックイベントのインスタンスを設けることは出来ません。元々、その機能がユーザー側に与えられていませんから、既存のものにインスタンスを設けて変更するなりプロパティを付加するならともかく、新しいイベントは無理だと思います。
ワークシートのオブジェクトが、コントロールツールのように認識はしないと思います。
Wendy02さん、こんにちは。いつも参考にさせていただいてます。
> SelectionChangeイベントは、実際にきちんとしたものを
> 作った時に、誤動作しかねませんので、ユーザーが意識的に
> 行う動作-右クリックメニューや、 ダブルクリックに対して、
> イベントを与えるという方式にします。
やはりそうなんですね。私も今までは右クリックメニューかダブルクリックで処理してきました。ただ今日は、前の質問に回答してから「いくら検索してもクリックイベントを拾う方法が見つからないけど、本当にないのかな?」とかねがね疑問に思っていたので、質問してみました。
> もっとも感覚的に近いのは、コントロールツールの透明ラベルや
> オートシェイプの四角形で透明にした図形を設けることだと思います。
なるほど、セルにあわせて透明なコントロールを貼り付ければ確かに「似たこと」はできますね。でも対象となるセルの数だけコントロールを貼り付けて、その数だけClickのイベントハンドラを書くことになりますよね。(TopLeftCellでそのラベルがあるセルを取得すれば処理は共通化できそうですが)
対象のセルが少ない場合は使えそうですね。使えそうな機会があれば試してみます。
> ワークシートのClassオブジェクトに、クリックイベントのインスタンスを設けることは出来ません。
そうなんですか…。ユーザが手の出せない領域なのですね。
イベントを自分で作れるということを恥ずかしながら今まで知らず、No.1さんの回答ではじめて知ったのですが、やはりできることとできないことがあるのですね。
イベントを作る方法や、どこまでユーザの手が出せるのか、いろいろ調べてみようと思います。
ご回答どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- Excel(エクセル) 【Excel】hyperlink関数を解除してもハイパーリンクが活きるようにできますか? 3 2023/05/22 11:22
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- その他(Microsoft Office) EXCELでバーコードを作成すると白くなってコードが見えません 1 2022/04/04 14:24
- Excel(エクセル) 【エクセル】文中に別シートのセルの内容を自動入力したい 6 2022/11/17 11:30
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) EXCEL ActiveX コマンドボタンで実行する前にいったんmsgBoxで確認を求めたい 1 2022/07/06 19:41
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/04/21 13:46
- Visual Basic(VBA) Outlook VBAについて 1 2023/07/10 12:41
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
あなたの人生で一番ピンチに陥った瞬間は?
これまでの人生で今振り返ると「あの時、1番ピンチだったなぁ...」という瞬間はありますか?
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
Excel VBAでマウスの左クリックのイベントを検知するには
Visual Basic(VBA)
-
(エクセルVBA)セルを左クリックしたら実行させるには?
Excel(エクセル)
-
VBAでセルをクリックする回数で表示が変わる
その他(プログラミング・Web制作)
-
-
4
シングルクリックとダブルクリックのイベントについて
Access(アクセス)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
ExcelVBA 図形をクリックした際のイベントを拾うには
Visual Basic(VBA)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
Excelのシート上のShapeにイベントは設定できる?
Excel(エクセル)
-
9
【ExcelVBA】commandButtonをクラスモジュールで制御するには
Visual Basic(VBA)
-
10
Excel VBAでの右クリックのポップアップメニューの非表示方法は?
Visual Basic(VBA)
-
11
EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カレンダーの日付 5/Bの意味に...
-
月の最後の週の呼び名は?
-
エクセルのフィルターを複数シ...
-
10月をもって辞めるって、10...
-
自治会の通常総会の年度について
-
入社が2月1日とした場合、3ヶ月...
-
「1年以上」の定義について
-
学校の在籍機関
-
総会の年度表記について
-
VBA ユーザーフォームのChange...
-
確認ですが普通5月までに決める...
-
定年になる年度を関数で算出したい
-
8月までっていつまでのことでし...
-
1月~12月の降順並べ替え
-
満何歳の意味
-
「6月まで」というのは6月以内...
-
○年後の3月末日を関数で出したい
-
昔は何歳くらいからお酒を飲ん...
-
月度ってどういう意味ですか
-
「なんで付き合おうと思ったか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
月の最後の週の呼び名は?
-
昔は何歳くらいからお酒を飲ん...
-
10月をもって辞めるって、10...
-
成人式の代表者ってどう選ぶの...
-
えべっさんに行けなかった時
-
エクセルのフィルターを複数シ...
-
入社が2月1日とした場合、3ヶ月...
-
カレンダーの日付 5/Bの意味に...
-
月度ってどういう意味ですか
-
自治会の通常総会の年度について
-
8月までっていつまでのことでし...
-
確認ですが普通5月までに決める...
-
昔の愛称?「~の字」
-
VBAで先月、先々月を求める方法
-
鏡餅のプラスチック製ミカンの...
-
「1年以上」の定義について
-
願望 春より秋がよし 思い立つ...
-
董卓の酒池肉林って、具体的に...
-
「なんで付き合おうと思ったか...
-
定年になる年度を関数で算出したい
おすすめ情報