• ベストアンサー

Calculateイベントでセルを指定したい

Private Sub Worksheet_Calculate() を使ってイベントを利用していますが、特定のrangeだけで発生するイベントだけを使用したいと考えています。 このような使い方ができるのでしょうか。 例えば range("A1","C5") だけの範囲に発生するイベントを利用し 他の領域で発生する信号は無視したいのです。 よろしくお願いします

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>例えば range("A1","C5") だけの範囲に発生するイベントを利用し >他の領域で発生する信号は無視したいのです。 完全に無視する事は厳しいような気がします。 妥協できればの話ですが、 監視対象シートがSheet1だとします。 それと別のシート、Sheet2のセルに =Sheet1!A1 =Sheet1!C5 と監視対象セルへの参照数式を入れて、 このSheet2のシートモジュールにCalculateイベントを記述するわけです。 これでSheet1のA1,C5セルの数式が再計算された時のイベントが捉えられるかと思います。 ただ、Sheet1の関係ない行列の削除もしくは挿入した時もA1,C5セルは再計算されます。 使う関数によっても再計算が発生する事があります。 計算結果に変化がなくても、A1,C5セルの再計算イベントを捉える事ができるわけですから それはそれでいいのかもしれませんが。 また、別シートからSheet1を参照しているので、Sheet1の名前を変更した時や、オートフィルタ操作時など、 Sheet1の再計算は発生しなくても、Sheet2の再計算が発生し、Calculateイベントが走る事があります。 (他にもあるかもしれません。あまり深く検証してないです) もし、再計算発生、かつ計算結果が変化している事をトリガーにしたいという事なら Calculateイベントの内容を工夫すれば可能と思います。 Static変数やセル値に計算結果を記憶させて、次回イベント時に比較して差異があれば処理する...など。 他サイト過去ログですが参考になるかもしれません。 『calclcuiate を セル ごとでイベント発生させるには』 http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200808/08080153.txt

VB0979
質問者

お礼

早速のご回答ありがとうございます。 別のsheetに乗り換えてイベントを監視する方法には 気がつきませんでした。 クリーンな回答恐れ入ります。

関連するQ&A

  • エクセル イベントマクロ Changeイベントを複数作りたい

    Private Sub Worksheet_Change(ByVal Target As Range)   If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub 以下マクロの内容 End Sub これでセルA1が変わるとイベントマクロが発生しますが セルB1が変わると別のマクロが発生し セルC1が変わるとまた別のマクロが発生し…とするには どうすればよいのですか 単純に並べて書いたらだめみたいだったんですけど

  • excel 複数のセル範囲を指定したイベント

    excelのVBAにて、ダブルクリック時のイベントを作成しております。 任意のセルをダブルクリックした時に、イベントが起こるようにしているのですが、 HPに載っていた方法を参考に Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) If Intersect(Target, Range("Q24:U24")) Is Nothing Then Exit Sub --以下、省略-- End Sub このように作成してみました。 現在、範囲がQ24:U24でのイベントとなっておりますが、これが複数のセル範囲 (例えば、Q24:U24のほかに、O40:U40も範囲に含める)とした場合、上記の記載については どのようにすればうまくいきますでしょうか? よろしくお願いします。

  • エクセルVBAのイベントについて教えてください。

    エクセルVBA初学者のです。 "C9"にいれるとchangeイベントが発生するコードなんですが、 "C9"のほかに"D1"においてもchangeイベントを発生させたいのですが 下記のコードに続けて書いてもイベントが発生しないのですが どのように書けばよいのでしょうか? private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C9")) Is Nothing Then Exit Sub Range("H14:H56").Interior.ColorIndex = 2 If Intersect(Target, Range("D1")) Is Nothing Then Exit Sub Range("G14:G56").Interior.ColorIndex = 2 End Sub よろしくお願いします。

  • エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

    VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub

  • エクセル: Changeイベントが発生しないのはなぜ?

    エクセルでChangeイベントが発生しないので以下の方法で確認してみました。 やはり駄目でした。 なぜでしょうか。 条件:Excel2000 セル"A1" に楽天証券から株価データをRSSでもらっています。 書いたコード Private Sub Worksheet(ByVal Target As Range) If Target.Address <> "" Then MsgBox "イベント確認" End if End Sub これで駄目なのでセルにをいじるとイベントは発生しているようです。 Intersectプロシージャも試しましたが駄目でした。 Case文で拾うことも試しましたが駄目でした。 RSSで信号を受けた場合イベントは発生しないものでしょうか? よろしくお願いいたします。

  • エクセルVBA/シートのチェンジイベントを発生させない方法?

    Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "イベント発生" End Sub このワークシートがアクティヴになってるときに手入力された場合以外、チェンジイベントを発生させなくするにはどのような方法があるでしょうか? 標準モジュール記載の他のマクロでセルが変更された場合を無視したいのです。 よろしくお願いします。

  • Excel VBA イベントプロシージャを2つ記述する(基本です)

    基本的な事なのですが、Excelのイベントプロシージャで2つプログラムを作るにはどうやって記述すればよいのでしょうか? 具体的には、worksheetのchangeイベントで、セルC5の値を変えた時と、セルG7の値を変えた時の2通りのマクロを作成したいのです。 Private Sub Worksheet_Change(ByVal Target As Range) C5を変えた時の処理 End Sub Private Sub Worksheet_Change(ByVal Target As Range) G7を変えた時の処理 End Sub このように書けばよいのでしょうか?そうするとTargetがかぶっておかしくなる気がします。。 お願いします。

  • マクロの自動実行

    Private Sub Worksheet_Calculate() Range("b1").Value = Range("b1").Value + Range("a1").Value End Sub このマクロをA1セルの数値が変わるたびに自動で実行するには どうすればいいでしょうか?

  • VBA Private Sub Worksheet_Calculate()

    「ユーザー定義関数」で計算されるセルがセルB2にある場合、シートモジュールの Private Sub Worksheet_Calculate()で、他の再計算は無視し、そのユーザー定義関数が計算されたことを判断するためにはどのような記述をすればいいのでしょうか?

  • エクセル: Changeイベントが発生しないのはなぜ?

    エクセルでChangeイベントが発生しないので以下の方法で確認してみました。 やはり駄目でした。 なぜでしょうか。 条件:Excel2000 エクセルのセル に楽天証券から株価データをRSSでもらっています。 書いたコード Private Sub Worksheet(ByVal Target As Range) If Target.Address <> "" Then MsgBox "イベント確認" End if End Sub これで駄目なのですがセルをいじるとイベントは発生しているようです。 Intersectプロシージャも試しましたが駄目でした。 Case文で拾うことも試しましたが駄目でした。 RSSで信号を受けた場合イベントは発生しないものでしょうか? よろしくお願いいたします。

専門家に質問してみよう