こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

イベントプロシージャについて(エクセル)

あるエクセルのブックの全てのシートに
適用されるようなイベントプロシージャを
作りたく思っています。

1、あるセルをダブルクリックする
2、そのセルが含まれている行を選択する
3、メッセージボックスで「現在の行を削除する」
 旨の確認を求めて 「はい」ならば削除
 「いいえ」なら何もしない


1、あるセルをシングルクリックする
2、そのセルが含まれている行を選択する
3、メッセージボックスで「現在の行をコピーして
  自身の一つしたの行に挿入する」
 旨の確認を求めて 「はい」ならば実行
 「いいえ」なら何もしない

という二つのモノを作りたく思っています
自分で色々HPを見たり 書籍も見てみたのですが
なかなかわかりませんでした

「ブック上での全てのシートで適用される」
という記述はどうしたらよろしいのでしょうか?
皆様よろしくお願いします

投稿日時 - 2005-04-30 06:36:43

QNo.1359942

暇なときに回答ください

質問者が選んだベストアンサー

ThisWorkbookクラスのSheetBeforeDoubleClickやSheetSelectionChangeイベントを
使用することになるかと思います。

下記のように、引数 Shにシート名 、Targetにアドレスが渡されます。

(両方のイベントを機能させるとSelectionChangeが先になり、その後、同セルWクリックで
DoubleClickイベントが機能します。)

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal _
      Target As Range, Cancel As Boolean)
MsgBox "そこは、 " & Sh.Name & " の " & Target.Address(False, False) & " です。"
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal _
      Target As Range)
MsgBox Sh.Name & " の " & Target.Address(False, False) & " を選択しました。"
End Sub


おやりになりたい最初の方は、ダブルクリックすることで、2の「そのセルが含まれて
いる行を選択する」は、意思が反映されているので、不要ではないかと思います。

あとの方は、「あるセル」とは、どの位の箇所を指すのかなど、状況によって一概には
言えませんが、「シングルクリック」を使う限り、他の操作性に支障来たさないように
しなければなりません。

投稿日時 - 2005-04-30 07:37:51

補足

重ね重ねもうしわけありません

教えていただいた内容ですと
シングルクリックと 
矢印キーでのセル移動が
同じく セル選択状態になっていますが
シングルクリックの時のみに
イベント発生させることは
可能でしょうか?

いろいろ調べてみますが お手数でなければ
御教授おねがいいたします
たびたびもうしわけありません

投稿日時 - 2005-04-30 07:58:10

お礼

おはようございます
早速の御回答ありがとうございます

複数のイベントの際には
引数を使用した記述が必要なのですね
大変勉強になりました

もうひとつ聞いてよろしいでしょうか?
セルを選択した状態から
そのセルが含まれている行を選択する
記述というのはどのようにしたらよいのでしょう?

投稿日時 - 2005-04-30 07:54:03

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>矢印キーでのセル移動が
>同じく セル選択状態になっていますが
>シングルクリックの時のみに
>イベント発生させることは
>可能でしょうか?

もともと、シングル・クリック(MouseDown)イベントは、ワークシート上にはありません。

それから、ダブルクリックの、Workbook_SheetBeforeDoubleClickは、Cancel =True を入れたほうがよいです。現在は、そのイベント自体が働いていないはずです。SelectionChange のシングル・クリックとSheetBeforeDoubleClickのダブル・クリックとは、ダブル・クリックの過程にシングル・クリックがあるので、論理的に、そのイベントは重なって、シングル・クリックに取られるはずです。

いずれにしても、もともと、行の挿入・削除は、右クリックメニュー("Cell")に登録されているし、行の挿入・削除は、行番号や列番号(A,B,C)のところをクリックしたり、セルを選択してから、
Ctrl+Shift + [+] で挿入、Ctrl+Shift + [-]で、削除になります。
Undoの範囲内にある、これらのショートカットがありますので、対話型のイベント・プロシージャは、本来必要だとは思いません。

もし、実務として、対話型にするなら、挿入・削除のコマンドボタン全てに、WithEventsで、コントロール自体に、イベントを取り付けたほうが確実だと思います。一般的なマクロで対話型の削除・挿入を実行しても、ワークシートのUndo(Ctrl+Z) が利きませんので、実務としてはあまり使い物になりません。

ご自身の勉強や練習でされるのでしたら、まず、書籍などをきちんと読んで、ご自分で作ってみてから、他の人にチェックしていただいたほうがよいのではないでしょうか?

投稿日時 - 2005-04-30 10:56:00

お礼

非常に参考になるご意見ありがとうございました。

練習や勉強というわけではありませんが
自分自身で毎回行う作業を出来るだけ簡略に
とおもって勉強している最中であります

これからの指針にさせていただきたいと思います

投稿日時 - 2005-04-30 13:59:17

ANo.2

> そのセルが含まれている行を選択する
> 記述というのはどのようにしたらよいのでしょう?

Selection.EntireRow  で、そのセルが含まれる行が、取得できます。
例えば、Wクリックしたセルが含む行を選択状態にするには、
Target.EntireRow.Select です。

> シングルクリックの時のみにイベント発生させることは可能でしょうか?

出来ないのではないかと思いますが・・・?
これは、先に書いたように操作性に問題が生じ、必要性が無いから作らない
のだと思います。 その必要性を感じたこともありません。

投稿日時 - 2005-04-30 10:45:39

あなたにオススメの質問